当前位置: 首页 > 知识库问答 >
问题:

从自身内部获取库伯内特斯POD的完整ID(运行容器)

万俟丁雷
2023-03-14

如何在库伯内特斯中从容器内部获取容器的完整标识。我想在作为库伯内特斯容器运行的应用程序日志中添加容器ID

共有2个答案

鄢雅畅
2023-03-14

HOSTNAME环境变量在Kubernetes上运行的任何容器中都是现成的,它给出了容器运行所在pod的唯一名称。使用日志框架提供的方法来访问环境变量并使其成为日志模式的一部分,或者通过编程将其值添加到日志条目中。

假设pod中只有一个应用程序容器(这被认为是一种最佳实践),就应用程序日志记录而言,应该这样做。

段弘和
2023-03-14

有两种方法可以向正在运行的容器公开Pod和Container字段:

  • 环境变量

这两种公开Pod和Container字段的方法一起称为下行API。

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

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

元数据。name=myimage唯一id

注意*-这里唯一需要注意的是,UID在每次升级时都会发生变化,因此最好从您这边分配一个唯一的ID,以便与K8 UID一起识别容器或pod。

下面是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

参考链接。

 类似资料:
  • 我定义了一个StatefulSet,里面有一个容器,它会启动。列出了CPU限制和请求,但我从未为内存指定相同的限制。我现在正在运行pod,但我不知道它们占用了多少内存。不管是什么,它都太多了,所以我想降低它。我如何知道它是什么?

  • 我正在尝试使用helm图表部署我的应用程序。我已经将statefulSet定义为一种正在部署的类型。yaml并根据规范serviceName提供无头服务。来自部署的代码片段。yaml如下所示。 部署后,当我启动“kubectl get pods”时,其显示的POD名称为“MyApp-100-deployment-n”,其中n 如果我使用kubectl exec进入Pod,并触发“主机名”命令,我会

  • 在Kubernetes集群上的pod中运行的应用程序如何找到同一映像(同一映像的实例)当前运行的pod数?是否还有一种方法可以唯一地识别同一类型豆荚集合中的每个豆荚? 对于Eg.如果我有3个Pod相同的图像运行在我的库伯内特斯集群我希望我的应用程序运行在Pod知道有3个实例运行的时刻并可能能够识别为0或1或2在集合中3的吊舱可以基于开始时间。

  • 我假设没有愚蠢的问题,所以这里有一个我找不到直接答案的问题。 现在的情况 我目前有一个运行1.15的Kubernetes集群。AKS上的x,通过Terraform部署和管理。AKS最近宣布Azure将在AKS上停用Kubernetes的1.15版本,我需要将集群升级到1.16或更高版本。现在,据我所知,直接在Azure中升级集群不会对集群的内容产生任何影响,即节点、豆荚、秘密和当前在那里的所有其他

  • 我只是在本地mac上使用mini kube设置kubernetes。 创建了一个类型为NodePort的服务,并且能够使用url

  • 我正在尝试在Kubernetes集群(Azure AKS)中部署Flink作业。作业群集在启动后立即中止,但任务管理器运行正常。 docker镜像创建成功,没有任何异常。我可以运行docker镜像,也可以SSHdocker镜像。 我已经按照以下链接中提到的步骤: https://github.com/apache/flink/tree/release-1.9/flink-container/kub