![](/img/trans.png)
[英]Kubernetes `client-go` - How to get container status in a pod
[英]How to get Kubernetes deployments labels when a new pod is created/updated in client-go?
想象一下 kube.netes 中的以下部署定义:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
env: staging
spec:
...
我特别有两个问题:
1). label env: staging
在创建的 pod 中不可用。 如何在client-go
中以编程方式访问此数据?
2). 当创建/更新 pod 时,如何找到它属于哪个部署?
1). label env: staging 在创建的 pod 中不可用。 如何在 client-go 中以编程方式访问此数据?
您可以使用 client-go 获取Deployment
。 有关 Deployment 上的操作,请参阅示例Create、Update & Delete Deployment
。
2). 当创建/更新 pod 时,如何找到它属于哪个部署?
创建Deployment
时,会创建一个管理Pods
的ReplicaSet 。
查看Pod
的ownerReferences
字段以查看ReplicaSet
管理它的内容。 这在ReplicaSet 的工作原理中有所描述
希望你享受你的 kube.netes 之旅!
事实上,label 在创建的 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、replicaset、statefulset、job 等)当您使用 deployment 创建 pod 时,您可以确保在 deployment 和 pod 之间有一个 replicaset (部署仅管理副本集的不同版本,而副本集仅确保当前的实际副本数与清单中所需的副本数匹配,带有标签选择器!)
所以实际上,您通过键入以下内容来检查 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://kube.netes.io/docs/concepts/overview/working-with-objects/owners-dependents/
希望这对你有帮助。 猜测
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.