从自身内部获取Kubernetes POD的完整ID(运行容器)

时间:2019-11-11 11:29:04

标签: logging kubernetes containers

如何在Kubernetes中从其内部获取容器的完整ID。我想在运行Kubernetes容器的应用程序日志中添加容器ID

2 个答案:

答案 0 :(得分:1)

  

有两种方法可以将Pod和Container字段暴露给正在运行的   容器:

     
      
  • 环境变量
  •   
  • 卷文件
  •   
     

这两种公开Pod和Container字段的方式在一起是   称为Downward API。

因此,只需使用环境变量,您就可以将容器的任何元数据注入正在运行的容器中。


评论更新-根据kubernetes文档,每个名称都有一个UID,该UID附加在资源名称之后,例如,一个pod或容器,它将提供一种获取方法用于记录的唯一ID。

metadata.name = myimage + unique id

注意*-唯一需要注意的是,每次升级都会更改UID,因此最好从您的侧面分配一个唯一的ID以结合K8 UID来识别容器或吊舱。

这是YAML的示例。

apiVersion: v1
kind: Pod
metadata:
  name: dapi-envars-fieldref
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "sh", "-c"]
      args:
      - while true; do
          echo -en '\n';
          printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE;
          printenv MY_POD_IP MY_POD_SERVICE_ACCOUNT;
          sleep 10;
        done;
      env:
        - name: MY_POD_ID   // <--- here you inject env into container
          valueFrom:
            fieldRef:
              fieldPath: metadata.name   // <--- set value of the env var to pod name
        - name: MY_POD_SERVICE_ACCOUNT
          valueFrom:
            fieldRef:
              fieldPath: spec.serviceAccountName
  restartPolicy: Never

reference link.

答案 1 :(得分:0)

HOSTNAME环境变量可在Kubernetes上运行的任何容器中随时使用,并提供容器在其中运行的Pod的唯一名称。使用日志记录框架提供的方法访问环境变量并将其作为日志记录模式的一部分,或以编程方式将其值添加到日志条目中。

假设在pod中只有一个 application 容器(应该被认为是最佳做法),那么这应该用于应用程序日志记录。