如何在kubernetes yaml文件的环境变量中分配集群,名称空间和pod名称

时间:2018-10-06 15:52:29

标签: kubernetes appdynamics kubernetes-pod kubernetes-namespace

我需要将Kubernetes集群中部署的容器中的集群,名称空间和Pod名称传递给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。 预先感谢。

2 个答案:

答案 0 :(得分:2)

您可以通过fit获得POD_NAMEPOD_NAMESPACE作为环境变量进行传递。

fieldRef

编辑添加了示例env 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 ,以显示如何引用变量。感谢this的答案指出了REFERENCE_EXAMPLE插值。

您可以参考文档here中提到的$()

但是,supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP不是可用的标准属性。根据此PR #22043,如果使用GCE,应将CLUSTERNAME注入到CLUSTERNAME字段中。

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

答案 1 :(得分:0)

以下格式对我有帮助,ewok2030和Praveen建议。 确保变量在用作JAVA_OPTS之前应该声明的只有一件事。

容器:

   - env:

    - name: APPD_NODE_NAME
       valueFrom: 
        fieldRef:
          fieldPath: spec.nodeName
    - name: APPD_POD_NAMESPACE
      valueFrom:
        fieldRef:
          fieldPath: metadata.namespace
    - name: APP_POD_NAME
      valueFrom: 
        fieldRef:
          fieldPath: metadata.name
    - name: JAVA_OPTS
      value: -Xmx712m -Xms556m -Dpdp.logging.level=WARN -Dappdynamics.agent.nodeName=$(APPD_NODE_NAME)-$(APPD_POD_NAMESPACE)-$(APP_POD_NAME)