【问题标题】:Get the Kubernetes uid of the Deployment that created the pod, from within the pod从 pod 中获取创建 pod 的 Deployment 的 Kubernetes uid
【发布时间】:2021-11-03 18:22:25
【问题描述】:

我希望能够从 pod 中了解创建 pod 的 Deployment 的 Kubernetes uid。

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

here获得灵感,我试过了*:

  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 的。我正在尝试做的事情可能吗?

【问题讨论】:

  • 您使用的是哪个 Kubernetes 版本以及在哪里:云端还是裸机?
  • 云 Kubernetes,1.20 版

标签: kubernetes kubernetes-pod


【解决方案1】:

行为正确,Downward API 用于pod 而不是deployment/replicaset

所以我想解决方案是在spec.template.metadata.labels中手动设置部署名称,然后采用Downward API将标签作为环境变量注入。

【讨论】:

  • 谢谢,有道理。我认为,我的问题是我想要 Deployment 对象的 uid(出于我在上面的编辑中添加的原因)。这是 Kubernetes 添加的字段 -> kubernetes.io/docs/concepts/overview/working-with-objects/names/…。所以我认为手动标记是不可能的。
  • @JamesCockbain,你找到解决办法了吗?
  • @Bazhikov - 我自己没有找到解决方案。我最终将生成的 Deployment 的 ownerReference 设置为 Pod 类型。这意味着如果 Pod 被删除,Deployment 会重新创建,但这对我的用例来说并不是一个破坏因素。
【解决方案2】:

我认为自己获取Deployment的UID是不可能的,你可以在创建deployment时设置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}'

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

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

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

【讨论】:

    猜你喜欢
    • 2022-12-21
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 2019-12-26
    • 2020-09-13
    • 1970-01-01
    • 2016-02-04
    • 2015-09-01
    相关资源
    最近更新 更多