标签: kubectl

如何通过 Jumphost 转发 k8 pod 的端口

我可以通过 ssh 进入跳转主机,从那里我可以访问 k8 集群。有一个特定的 pod,其 UI 暴露在端口 4040 上,我如何在本地浏览器上查看它?

到目前为止,通过执行以下命令我已经弄清楚了

kubectl port-forward podName 4040:4040
Run Code Online (Sandbox Code Playgroud)

我现在可以在 Jumphost 上访问 UI(通过基于文本的浏览器)

portforwarding kubernetes devops kubectl

1
推荐指数
1
解决办法
1795
查看次数

kubectl 获取机密:来自服务器的错误(禁止)

我已经在本地安装了 Upbound CLI,从那时起,receiving Error from server (Forbidden)当我尝试使用以下命令执行不同的命令时,我(我认为)出现错误消息kubectl

kubectl get secrets

Error from server (Forbidden): secrets is forbidden: User "upbound-cloud-impersonator" cannot list resource "secrets" in API group "" in the namespace "default"
Run Code Online (Sandbox Code Playgroud)

kubectl get all

Error from server (Forbidden): replicationcontrollers is forbidden: User "upbound-cloud-impersonator" cannot list resource "replicationcontrollers" in API group "" in the namespace "default"
Error from server (Forbidden): services is forbidden: User "upbound-cloud-impersonator" cannot list resource "services" in API group "" in the namespace "default" …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubectl

1
推荐指数
1
解决办法
8726
查看次数

Kubernetes 修补多个不工作的资源

我正在尝试使用如下补丁将相同的作业历史记录限制应用于多个 CronJobs ,名为kubeJobHistoryLimit.yml

apiVersion: batch/v1beta1
kind: CronJob
spec:
  successfulJobsHistoryLimit: 1
  failedJobsHistoryLimit: 1
Run Code Online (Sandbox Code Playgroud)

我的kustomization.yml样子:

bases:
  - ../base
configMapGenerator:
- name: inductions-config
  env: config.properties
patches:
  - path: kubeJobHistoryLimit.yml
    target:
      kind: CronJob
patchesStrategicMerge:
  - job_specific_patch_1.yml
  - job_specific_patch_2.yml
  ...
resources:
  - secrets-uat.yml
Run Code Online (Sandbox Code Playgroud)

在我的 CI 管道中的某个时刻,我有:

kubectl --kubeconfig $kubeconfig apply --force -k ./
Run Code Online (Sandbox Code Playgroud)

版本kubectl1.21.9.

问题是工作历史限制值似乎没有被拾取。我使用的 K8s 配置或版本有问题吗?

patch kubernetes kubectl

1
推荐指数
1
解决办法
4596
查看次数

获取 kubernetes 秘密的 ca-cert.pem 字段

在我的istio-system命名空间中,我有以下秘密

\n
\xe2\x96\xb6 k get secret istio-ca-secret -o yaml\napiVersion: v1\ndata:\n  ca-cert.pem: LS0tLS1CR...\n  ca-key.pem: LS0..\n  cert-chain.pem: ""\n  key.pem: ""\n  root-cert.pem: ""\n
Run Code Online (Sandbox Code Playgroud)\n

虽然以下查询有效:

\n
kubectl get secret istio-ca-secret -n istio-system  -o jsonpath="{.data}"\n{"ca-cert.pem":"LS0t=...","ca-key.pem":"LS0tLS1","cert-chain.pem":"","key.pem":"","root-cert.pem":""}%       \n
Run Code Online (Sandbox Code Playgroud)\n

我执行以下命令试图只获取值,但ca-cert.pem什么也不返回

\n
kubectl get secret istio-ca-secret -n istio-system  -o jsonpath="{.data.ca-cert.pem}"\n
Run Code Online (Sandbox Code Playgroud)\n

这是为什么?

\n

json jsonpath kubernetes kubectl

1
推荐指数
1
解决办法
2102
查看次数

将 shell 变量传递给通过 kubectl exec 执行的命令

我在测试时执行一项重复性任务,需要连接到 cassandra pod 并运行几个 CQL 查询。

这是“手动”方法:

  1. 在集群控制器节点上,我使用 kubectl 在 pod 上执行 shell:
    kubectl exec pod/my-app-cassandra-pod-name -it --namespace myns -- /bin/bash

  2. 进入 pod 后,我执行 cqlsh:,
    cqlsh $(hostname -i) -u myuser
    然后以交互方式输入密码

  3. 我以交互方式执行 cql 查询

现在,我想要一个 bash 脚本来自动执行此操作。我的目的是通过 kubectl exec 直接运行 cqlsh。

我遇到的问题是,显然我无法在 kubectl exec 的“命令”部分中使用 shell 变量。我需要 shell 变量来存储 a) pod 的 IP、b) 作为第一个查询的输入的 id,以及 c) 中间查询结果(后两个尚未添加到脚本中)。

到目前为止,我使用的是虚拟 CQL 查询:

#!/bin/bash

CASS_IP=$(kubectl exec pod/my-app-cassandra-pod-name -it --namespace myns -- /usr/bin/hostname -i)
echo $CASS_IP   # This prints out the IP address just …
Run Code Online (Sandbox Code Playgroud)

bash cassandra kubernetes kubectl

1
推荐指数
1
解决办法
1574
查看次数

Terraform kubectl 提供程序错误:无法创建用于读取资源的 kubernetes Rest 客户端

我有一个 Terraform 配置(以及其他资源),可以在 Google Cloud 上创建 Google Kubernetes Engine 集群。我使用kubectl提供程序为 ManagedCertificate 和 FrontendConfig 添加 YAML 清单,因为这些不是 kubernetes 或 google 提供程序的一部分。从本地计算机应用 Terraform 配置时,这可以按预期工作,但是当我尝试在 CI 管道中执行它时,这两个资源都会出现以下错误kubectl_manifest

Error: failed to create kubernetes rest client for read of resource: Get "http://localhost/api?timeout=32s": dial tcp 127.0.0.1:80: connect: connection refused
Run Code Online (Sandbox Code Playgroud)

由于我只在 CI 期间遇到这个问题,我的第一个猜测是服务帐户缺少正确的范围,但据我所知,所有范围都存在。非常感谢任何建议和想法!

kubernetes google-kubernetes-engine terraform kubectl

1
推荐指数
1
解决办法
9347
查看次数

用于部署的 kubectl 短别名

kubectl/oc 上是否有更短的别名用于部署?在 OpenShift 中,您拥有部署配置,并且可以使用其别名来访问它们dc

deployment一直写作需要太多时间。知道如何缩短它而不在每台计算机上设置本地别名吗?

现实:

kubectl get deployment/xyz
Run Code Online (Sandbox Code Playgroud)

梦:

kubectl get d/xyz
Run Code Online (Sandbox Code Playgroud)

deployment command-line-interface openshift kubernetes kubectl

1
推荐指数
1
解决办法
1731
查看次数

kubectl 插件选项卡自动完成功能不适用于 zsh

在使用 zsh 的 Mac 中通过 homebrew 安装 kubernetes-cli 后,kubernetes 自动完成功能无法完全或完全运行。只有第一个选项卡有效,第二个选项卡之后的选项卡无效。例如,如果我输入kubectl [TAB],它会显示 的子命令kubectl,现在如果我选择一个子命令并按 [TAB],例如kubectl get [TAB],它会冻结很长时间,之后什么也不会发生。

我尝试了以下方法

  1. 通过 homebrew 安装 kubectl-cli
  2. 启用 zsh 插件
  3. 还添加了以下代码
    source <(kubectl completion zsh)
    autoload -Uz compinit
    compinit
    
    Run Code Online (Sandbox Code Playgroud)

zsh-completion oh-my-zsh kubectl

1
推荐指数
1
解决办法
3339
查看次数

Bash + Kubectl - 等待所有 pod 都处于运行状态

我正在 Linux 机器上的 kubernetes 环境中创建 pod。我想等到所有 Pod 都处于运行状态。我已经在 bash 中编写了 while 循环,但即使 podstatus (变量)中没有“false”值,它仍然在循环。谢谢你的帮助!


verifyPods(){
   timer=0
   msg="false"
   while [[ $timer -lt 15 &&  "false"  == *"$msg"* ]] ;do
        sleep 10
        ((timer=timer+1))
        echo "Timer current value >> $timer and Pods statuses >> $podstatus"
        podstatus=$(kubectl -n $ns get pods -o custom columns=metadata.name:status.containerStatuses[*].ready | grep true)
       echo "Pod status is >> $podstatus and Timer is >> $timer"
  done
}



Printed Output:
Pod status is >> true
true
true
true,true
true
true,true
true
true …
Run Code Online (Sandbox Code Playgroud)

bash kubectl

1
推荐指数
1
解决办法
2091
查看次数

对 kubectl get pods 命令进行故障排除:为什么 .spec.containers.ports.containerPort 返回 &lt;none&gt;?

我正在使用命令获取分配给 pod 的 IP 地址kubectl get pods -o custom-columns="POD_IP":.status.podIPs

基于相同的方法,我使用kubectl get pods -o custom-columns="POD_PORT":.spec.containers.ports.containerPort命令来获取端口号,但它是空白的。

cloudshell:~$ kubectl get pods -o custom-columns="POD_IP":.status.podIPs
POD_IP
[map[ip:10.32.0.194]]

cloudshell:~$ kubectl get pods -o custom-columns="POD_PORT":.spec.containers.ports.containerPort
POD_PORT
<none>

cloudshell:~$ kubectl get pods -o custom-columns="POD_PORT":.spec.containers
POD_PORT
[map[image:nginx:1.10.1 imagePullPolicy:IfNotPresent name:servic1 ports:[map[containerPort:8080 protocol:TCP]] resources:map[limits:map[cpu:500m ephemeral-storage:1Gi memory:2Gi] requests:map[cpu:500m ephemeral-storage:1Gi memory:2Gi]] securityContext:map[capabilities:map[drop:[NET_RAW]]] terminationMessagePath:/dev/termination-log terminationMessagePolicy:File volumeMounts:[map[mountPath:/var/run/secrets/kubernetes.io/serviceaccount name:kube-api-access-mgk8k readOnly:true]]]]

cloudshell:~$ 
Run Code Online (Sandbox Code Playgroud)

我尝试使用kubectl get pods -o custom-columns="Port Number of Pod":.spec.containers命令,我可以看到我的映射 ( .spec.containers.ports.containerPort) 是正确的,但不知何故它仍然无法正常工作。

我完全确定.spec.containers.ports.containerPort映射正确,并且相同的命令格式给出了 IP 地址,因此无法发现错误。

有人能发现这里出了什么问题吗?

kubernetes google-kubernetes-engine kubectl

1
推荐指数
1
解决办法
92
查看次数