我可以通过 ssh 进入跳转主机,从那里我可以访问 k8 集群。有一个特定的 pod,其 UI 暴露在端口 4040 上,我如何在本地浏览器上查看它?
到目前为止,通过执行以下命令我已经弄清楚了
kubectl port-forward podName 4040:4040
Run Code Online (Sandbox Code Playgroud)
我现在可以在 Jumphost 上访问 UI(通过基于文本的浏览器)
我已经在本地安装了 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) 我正在尝试使用如下补丁将相同的作业历史记录限制应用于多个 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)
版本kubectl是1.21.9.
问题是工作历史限制值似乎没有被拾取。我使用的 K8s 配置或版本有问题吗?
在我的istio-system命名空间中,我有以下秘密
\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: ""\nRun Code Online (Sandbox Code Playgroud)\n虽然以下查询有效:
\nkubectl 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":""}% \nRun Code Online (Sandbox Code Playgroud)\n我执行以下命令试图只获取值,但ca-cert.pem什么也不返回
kubectl get secret istio-ca-secret -n istio-system -o jsonpath="{.data.ca-cert.pem}"\nRun Code Online (Sandbox Code Playgroud)\n这是为什么?
\n我在测试时执行一项重复性任务,需要连接到 cassandra pod 并运行几个 CQL 查询。
这是“手动”方法:
在集群控制器节点上,我使用 kubectl 在 pod 上执行 shell:
kubectl exec pod/my-app-cassandra-pod-name -it --namespace myns -- /bin/bash
进入 pod 后,我执行 cqlsh:,
cqlsh $(hostname -i) -u myuser
然后以交互方式输入密码
我以交互方式执行 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) 我有一个 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 期间遇到这个问题,我的第一个猜测是服务帐户缺少正确的范围,但据我所知,所有范围都存在。非常感谢任何建议和想法!
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
在使用 zsh 的 Mac 中通过 homebrew 安装 kubernetes-cli 后,kubernetes 自动完成功能无法完全或完全运行。只有第一个选项卡有效,第二个选项卡之后的选项卡无效。例如,如果我输入kubectl [TAB],它会显示 的子命令kubectl,现在如果我选择一个子命令并按 [TAB],例如kubectl get [TAB],它会冻结很长时间,之后什么也不会发生。
我尝试了以下方法
source <(kubectl completion zsh)
autoload -Uz compinit
compinit
Run Code Online (Sandbox Code Playgroud)
我正在 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) 我正在使用命令获取分配给 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 地址,因此无法发现错误。
有人能发现这里出了什么问题吗?