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

问题描述 投票:0回答:3

想象一下 kubernetes 中的以下部署定义:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-deployment
 labels:
  env: staging
spec:
...

我特别有两个问题:

1)。标签

env: staging
在创建的 Pod 中不可用。如何在
client-go
中以编程方式访问此数据?

2)。当 Pod 创建/更新时,我如何找到它属于哪个部署?

kubernetes client-go
3个回答
3
投票

1)。标签 env: staging 在创建的 Pod 中不可用。我如何在 client-go 中以编程方式访问这些数据?

您可以使用 client-go 获取

Deployment
。有关 Deployment 上的操作,请参阅示例
创建、更新和删除部署

2)。当 Pod 创建/更新时,我如何找到它属于哪个部署?

创建

Deployment
时,会创建管理 Pods
ReplicaSet

查看

ownerReferences
Pod
字段,了解
ReplicaSet
是如何管理它的。这在ReplicaSet如何工作

中进行了描述

2
投票

希望您享受您的 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/

希望这对您有帮助。你猜


0
投票

获取部署标签的命令:

kubectl describe deploy my-deployment -n my-namespace | grep i 'labels'

获取 pod 标签的命令:

kubectl get po --show-labels

Pod 名称始终以其部署名称开头。

© www.soinside.com 2019 - 2024. All rights reserved.