如何从容器中获取部署名称?

Sta*_*nko 1 kubernetes

我正在尝试使用向下的API将部署名称设置为环境变量,但是我的容器一直崩溃而没有任何日志记录。我正在使用busybox打印环境变量。我在Pod上使用成功,但在部署上却没有运气:这是我的YAML:

--- 
apiVersion: apps/v1
kind: Deployment
metadata: 
  labels: 
    app: test-d
  name: test-deploy
spec: 
  replicas: 1
  selector: 
    matchLabels: 
      app: test-d
  template: 
    metadata: 
      labels: 
        app: test-d
    spec: 
      command: 
        - sh
        - "-c"
        - "echo Hello Kubernetes, I am $MY_DEPLOY_NAME in $MY_CLUSTER_NAME and $MY_NAMESPACE! && sleep 3600"
      containers: 
        - 
          image: busybox
          name: test-d-container
      env: 
        - 
          name: MY_DEPLOY_NAME
          valueFrom: 
            fieldRef: 
              fieldPath: metadata.name
        - 
          name: MY_NAMESPACE
          valueFrom: 
            fieldRef: 
              fieldPath: metadata.namespace
        - 
          name: MY_CLUSTER_NAME
          value: production
Run Code Online (Sandbox Code Playgroud)

我想念什么?

更新:

很明显,我的缩进是搞砸了,谢谢你指出这一点,但是我的问题的主要部分仍然不清楚。如何从容器中获取部署名称?

Jos*_*sto 6

您为部署对象使用了错误的缩进和结构。

无论是command键和env键是部分container关键。

这是正确的格式

--- 
apiVersion: apps/v1
kind: Deployment
metadata: 
  labels: 
    app: test-d
  name: test-deploy
spec: 
  replicas: 1
  selector: 
    matchLabels: 
      app: test-d
  template: 
    metadata: 
      labels: 
        app: test-d
    spec: 
      containers: 
        - image: busybox
          name: test-d-container
          command: 
            - sh
            - "-c"
            - "echo Hello Kubernetes, I am $MY_DEPLOY_NAME in $MY_CLUSTER_NAME and $MY_NAMESPACE! && sleep 3600"
          env: 
            - 
              name: MY_DEPLOY_NAME
              valueFrom: 
                fieldRef: 
                  fieldPath: metadata.name
            - 
              name: MY_NAMESPACE
              valueFrom: 
                fieldRef: 
                  fieldPath: metadata.namespace
            - 
              name: MY_CLUSTER_NAME
              value: production
Run Code Online (Sandbox Code Playgroud)

请记住,您可以使用此在线验证器或在本地使用kubeval验证Kubernetes清单。

参考问题的主要部分,您可以获取创建Pod的对象,但很可能是ReplicaSet,而不是Deployment。

Pod名称通常是由Kubernetes生成的,您事先并不知道它,这就是为什么有一种获取名称的机制的原因。但这不是部署的情况:您在创建部署时知道其名称。我认为没有一种机制可以动态获取Deployment名称。

通常,在Deployment对象的PodSpec中使用标签来添加元数据。

您也可以尝试解析它,因为Pod名称(您拥有的名称)始终具有以下格式:deploymentName-replicaSetName-randomAlphanumericChars。

  • 它现在部署正常,但`MY_DEPLOY_NAME` 返回 Pod 的名称('test-deploy-6bb8fb7f86-9whq4'),而不是部署的名称。如何获得部署的名称('test-deploy')?`fieldPath: metadata.name` 有什么问题? (2认同)