想象一下 kubernetes 中的以下部署定义:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
env: staging
spec:
...
我特别有两个问题:
1)。标签
env: staging
在创建的 Pod 中不可用。如何在 client-go
中以编程方式访问此数据?
2)。当 Pod 创建/更新时,我如何找到它属于哪个部署?
1)。标签 env: staging 在创建的 Pod 中不可用。我如何在 client-go 中以编程方式访问这些数据?
您可以使用 client-go 获取
Deployment
。有关 Deployment
上的操作,请参阅示例 创建、更新和删除部署。
2)。当 Pod 创建/更新时,我如何找到它属于哪个部署?
创建
Deployment
时,会创建管理 Pods
的 ReplicaSet。
查看
ownerReferences
的 Pod
字段,了解 ReplicaSet
是如何管理它的。这在ReplicaSet如何工作中进行了描述
希望您享受您的 Kubernetes 之旅!
事实上,该标签在创建的 pod 中不可用,但您可以将其添加到 pod 部分的清单中:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
labels:
#Here you have the deployment labels
app: nginx
spec:
selector:
matchLabels:
#Here you have the selector that indicates to the deployment
#(more exactly to the replicatsets of the deployment)
#which pod to track to check if the number of replicas is respected.
app: nginx
...
template:
metadata:
labels:
#Here you have the POD labels that needs to match in the selector.matchlabels section
app: nginx
spec:
containers:
- name: nginx-container
image: nginx:latest
...
您可以通过键入以下内容来检查 Pod 的标签:
❯ k get po --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-deploy-6bdc4445fd-5qlhg 1/1 Running 0 7m13s app=nginx,pod-template-hash=6bdc4445fd
nginx-deploy-6bdc4445fd-pgkhb 1/1 Running 0 7m13s app=nginx,pod-template-hash=6bdc4445fd
nginx-deploy-6bdc4445fd-xdz59 1/1 Running 0 7m13s app=nginx,pod-template-hash=6bdc4445fd
您可以通过键入以下内容来获取部署的标签:
❯ k get deploy --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
nginx-deploy 3/3 3 3 7m39s app=nginx
您可以在“kubectl get po”命令中添加自定义列,以在获取 pod 时显示每个“app”标签的值:
❯ k get pod -L app
NAME READY STATUS RESTARTS AGE APP
nginx-deploy-6bdc4445fd-5qlhg 1/1 Running 0 8m30s nginx
nginx-deploy-6bdc4445fd-pgkhb 1/1 Running 0 8m30s nginx
nginx-deploy-6bdc4445fd-xdz59 1/1 Running 0 8m30s nginx
你可以使用多个-L :
❯ k get pod -L app -L test
NAME READY STATUS RESTARTS AGE APP TEST
nginx-deploy-6bdc4445fd-5qlhg 1/1 Running 0 9m46s nginx
nginx-deploy-6bdc4445fd-pgkhb 1/1 Running 0 9m46s nginx
nginx-deploy-6bdc4445fd-xdz59 1/1 Running 0 9m46s nginx
一般来说,Pod 的名称以其所有者的名称开头(部署、副本集、状态集、作业等) 当你使用deployment创建pod时,可以确定deployment和pod之间存在一个replicaset(deployment只管理不同版本的replicaset,而replicaset仅确保当前实际的replica数量为使用标签选择器匹配清单中所需的副本数量!)
实际上,您可以通过输入以下内容来检查 Pod 的 OwnerReference 字段:
❯ kubectl get po -o custom-columns=NAME:'{.metadata.name}',OWNER:'{.metadata.ownerReferences[0].name}',OWNER_KIND:'{.metadata.ownerReferences[0].kind}'
NAME OWNER OWNER_KIND
nginx-deploy-6bdc4445fd-5qlhg nginx-deploy-6bdc4445fd ReplicaSet
nginx-deploy-6bdc4445fd-pgkhb nginx-deploy-6bdc4445fd ReplicaSet
nginx-deploy-6bdc4445fd-xdz59 nginx-deploy-6bdc4445fd ReplicaSet
可以对副本集执行相同的操作以获得其部署所有者:
❯ kubectl get rs -o custom-columns=NAME:'{.metadata.name}',OWNER:'{.metadata.ownerReferences[0].name}',OWNER_KIND:'{.metadata.ownerReferences[0].kind}'
NAME OWNER OWNER_KIND
nginx-deploy-6bdc4445fd nginx-deploy Deployment
这就是如何使用 kubectl 快速查看谁拥有谁
这里有一些关于所有者和家属的阅读:https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/
希望这对您有帮助。你猜
获取部署标签的命令:
kubectl describe deploy my-deployment -n my-namespace | grep i 'labels'
获取 pod 标签的命令:
kubectl get po --show-labels
Pod 名称始终以其部署名称开头。