首页 > 解决方案 > 如何在 kubernetes yaml 文件的环境变量中分配集群、命名空间和 pod 名称

问题描述

我需要将集群、命名空间和 pod 名称从部署在 Kubernetes 集群中的容器传递给 AppDynamics 代理。

我尝试了以下方法,但这不起作用。

containers:
      - env:
        - name: JAVA_OPTS
          value: -Dappdynamics.agent.nodeName=$HOST-$spec.nodeName-spec.PodName

- name: appdynamics.agent.nodeName
  value= $HOST-$spec.nodeName-spec.PodName

任何人都可以在这里帮助我如何收集详细信息并传递给 AppD。提前致谢。

标签: kubernetesappdynamicskubernetes-podkubernetes-namespace

解决方案


您可以POD_NAME通过.POD_NAMESPACEfieldRef

apiVersion: v1
kind: Pod
metadata:
  name: test-env
spec:
  containers:
    - name: test-container
      image: my-test-image:latest
      env:
        - name: MY_NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: MY_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: MY_POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: MY_POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: MY_POD_SERVICE_ACCOUNT
          valueFrom:
            fieldRef:
              fieldPath: spec.serviceAccountName
        - name: REFERENCE_EXAMPLE
          value: "/$(MY_NODE_NAME)/$(MY_POD_NAMESPACE)/$(MY_POD_NAME)/data.log"
  restartPolicy: Never

编辑添加示例 envREFERENCE_EXAMPLE以显示如何引用变量。感谢这个答案指出$()插值。

您可以参考此处supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP文档中提到的内容。

但是,CLUSTERNAME不是可用的标准属性。根据此PR #22043,如果使用 GCE ,CLUSTERNAME则应将其注入现场。.metadata

否则,您必须CLUSTERNAME在该字段中手动指定.metadata,然后fieldRef将其作为环境变量注入。


推荐阅读