繁体   English   中英

在 client-go 中创建/更新新 pod 时如何获取 Kube.netes 部署标签?

[英]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时,会创建一个管理PodsReplicaSet

查看PodownerReferences字段以查看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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM