阿里云首页 弹性容器实例

使用Downward API

Downward API支持Volume挂载的方式将Pod信息生成为文件,直接挂载到容器内,以便在容器内可以获取Pod信息。本文介绍如何通过Volume挂载的方式使用Downward API。

前提条件

K8s集群中已正确部署Virtual kubelet(VK)。

说明

阿里云ASK集群已默认集成VK,其它集群需要您自行部署VK。更多信息,请参见对接概述

配置说明

通过Volume挂载可以获得的Pod信息如下表所示。

参数

描述

metadata.name

Pod名称。

metadata.namespace

Pod命名空间。

metadata.uid

Pod的UID。

metadata.labels['<KEY>']

Pod的标签值。

metadata.annotations['<KEY>']

Pod的注解值。

spec.serviceAccountName

Pod服务账号名称。

spec.nodeName

节点名称。

status.podIP

节点IP。

说明

目前仅支持Pod字段,还不支持容器字段,例如:limits.cpu、requests.cpu、limits.memory、requests.memory、limits.ephemeral-storage、requests.ephemeral-storage。

配置示例

  1. 准备Pod的YAML配置文件。

    新建pod.yaml文件,文件内容如下,表示将metadata.labelsmetadata.annotations以文件的形式挂载到/etc/podinfo目录下。

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-downwardapi
      labels:
        region: cn-beijing
        zone: cn-beijing-h
      annotations:
        eci/test: virtual-kubelet
    spec:
    
      containers:
        - name: nginx
          image: nginx
          command: ["sh", "-c"]
          args:
          - while true; do cat /etc/podinfo/labels; sleep 5; cat /etc/podinfo/annotations; sleep 5; done
          volumeMounts:
            - name: podinfo
              mountPath: /etc/podinfo
      volumes:
        - name: podinfo
          downwardAPI:
            items:
              - path: "labels"
                fieldRef:
                  fieldPath: metadata.labels
              - path: "annotations"
                fieldRef:
                  fieldPath: metadata.annotations
  2. 创建Pod。

    kubectl create -f pod.yaml
  3. 查看结果。

    查看Pod内的文件目录,可以看到Pod的Label和Annotation信息已经被挂载到 /etc/podinfo目录下的labelsannotations文件中。

    downwardapi