首页 > 解决方案 > 从 pod 中获取创建 pod 的 Deployment 的 Kubernetes uid

问题描述

我希望能够从 pod 中知道创建 pod 的 Deployment 的 Kubernetes uid。

这样做的原因是 Pod 可以生成另一个 Deployment,并将该 DeploymentOwnerReference的设置设置为原始 Deployment(因此在删除原始 Deployment 时它会收集垃圾)。

这里获得灵感,我尝试过*:

  1. 使用字段引用作为环境变量:
containers:
  - name: test-operator
    env:
      - name: DEPLOYMENT_UID
        valueFrom: 
          fieldRef: {fieldPath: metadata.uid}
  1. 通过卷上的文件使用downwardAPI和公开:
containers:
  volumeMounts:
    - mountPath: /etc/deployment-info
      name: deployment-info
volumes:
  - name: deployment-info
    downwardAPI:
      items:
      - path: "uid"
        fieldRef: {fieldPath: metadata.uid}

*这两者都属于spec.template.spec一种资源:部署。

然而,对于这两者,uid 是 Pod 的,而不是 Deployment 的。我正在尝试做的事情可能吗?

标签: kuberneteskubernetes-pod

解决方案


我认为不可能获得 Deployment 本身的 UID,您可以runAsUser在创建部署时设置任何范围。

尝试使用以下命令获取现有 pod 的 UID:

kubectl get pod -o jsonpath='{range .items[*]}{@.metadata.name}{" runAsUser: "}{@.spec.containers[*].securityContext.runAsUser}{" fsGroup: "}{@.spec.securityContext.fsGroup}{" seLinuxOptions: "}{@.spec.securityContext.seLinuxOptions.level}{"\n"}{end}'

这不是您想要得到的确切内容,但它可以为您提供提示。

要在创建时设置 UID Deployment,请参见下面的示例:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: toolbox2
 labels:
   app: toolbox2
spec:
 replicas: 3
 selector:
   matchLabels:
     app: toolbox2
 template:
   metadata:
     labels:
       app: toolbox2
   spec:
     securityContext:
       supplementalGroups: [1000620001]
       seLinuxOptions:
           level: s0:c25,c10
     containers:
     - name: net-toolbox
       image: quay.io/wcaban/net-toolbox
       ports:
       - containerPort: 2000
       securityContext:
           runAsUser: 1000620001

推荐阅读