kubernetes - 将容器信息公开为环境变量

kubernetes - exposing container info as environment variables

我试图将一些容器信息公开为环境变量,从 pod 的 spec.template.spec.containers[0].name 中读取值,这似乎不起作用。在部署 template.The 部署模板中引用容器字段的 apiSpec 是什么,如下所示:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      creationTimestamp: null
      labels:
        run: nginx
      name: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          run: nginx
              strategy: {}
       template:
         metadata:
           creationTimestamp: null
            labels:
             run: nginx
        spec:
          containers:
           - image: nginx
            name: nginx
              ports:
             - containerPort: 8000
             resources: {}
            env:
             - name: MY_CONTAINER_NAME
                valueFrom:
                  fieldRef:
                    fieldPath: spec.template.spec.containers[0].name

两件事:首先,容器名称是固定的——它由 PodSpec 模板定义——你可能在想 docker 容器的名称(它将是一个由命名空间、容器名称、pod UID 和重启计数组成的长生成名称)?因为 docker 容器的名称肯定不会出现在 .spec.containers[0].name

其次,虽然我同意 David 的观点,但我怀疑 kubernetes 会让你 运行 任意 fieldPath: 选择器,如果你愿意灵活地使用你的 command: 你实际上可以在启动时使用 Pod 自己的 ServiceAccount 查询 kubernetes API 以检索 Pod 信息的 all,包括其可能具有的 status: 结构您需要的大量信息。

向下 API 使您能够将 pod 自己的元数据公开给进程 运行 在那个吊舱里。

目前,它允许您将以下信息传递给您的容器:

  • pod 的名称
  • pod 的 IP 地址
  • pod 所属的命名空间
  • pod 的节点名称是 运行 on
  • pod 在
  • 下 运行 的服务帐户名称
  • 每个容器的 CPU 和内存请求
  • 每个容器的 CPU 和内存限制
  • 广告连播的标签
  • 广告连播的注释

就是这样。如您所见,容器端口不在此列表中。

一般来说,通过向下 API 可用的元数据相当有限。如果您需要更多,您需要直接从 Kubernetes API 服务器获取它,您可以通过使用客户端库或使用大使容器来实现。