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

时间:2019-06-09 09:40:41

标签: kubernetes kubernetes-deployment

我试图将一些容器信息公开为env变量,这些变量从pod的spec.template.spec.containers [0] .name中读取值,而这似乎不起作用。引用部署模板内的容器字段的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

2 个答案:

答案 0 :(得分:4)

Downward API使您可以将Pod自身的元数据公开给流程 在那个豆荚里跑

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

  • 豆荚的名字
  • 吊舱的IP地址
  • 吊舱所属的名称空间
  • 运行Pod的节点的名称
  • 在其中运行Pod的服务帐户的名称
  • 每个容器的CPU和内存请求
  • 每个容器的CPU和内存限制
  • 豆荚的标签
  • 豆荚的注释

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

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

答案 1 :(得分:1)

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

第二,虽然我同意David的观点,但我怀疑kubernetes是否可以让您运行任意的fieldPath:选择器,但是如果您愿意使用command:灵活选择,您实际上可以使用Pod自己的{{ 1}}会在启动时查询kubernetes API,以检索Pod信息的 all 全部,包括其ServiceAccount结构,该结构可能包含大量您需要的信息。