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

时间:2019-06-12 08:32:05

标签: 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

我想念什么?

更新

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

1 个答案:

答案 0 :(得分:5)

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

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

请记住,您可以使用this online validator或本地using kubeval来验证Kubernetes清单。

请参阅问题的主要部分you can get the object that created the Pod,但最有可能的是副本集,而不是部署。

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

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

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