作用:让Pod里的容器能够直接获取到这个Pod API对象本身的信息
Downward API可以通过以下两种方式将Pod信息注入容器内部
1.环境变量:用于单个变量,可以将Pod信息和Container信息注入到容器内部
2. Volume挂载:通过文件挂载到容器内部
Downward API支持的常用字段
1. 使用fieldRef可以声明使用:
spec.nodeName - 宿主机名字
status.hostIP - 宿主机IP
metadata.name - Pod的名字
metadata.namespace - Pod的Namespace
status.podIP - Pod的IP
spec.serviceAccountName - Pod的Service Account的名字
metadata.uid - Pod的UID
metadata.labels['<KEY>'] - 指定<KEY>的Label值
metadata.annotations['<KEY>'] - 指定<KEY>的Annotation值
metadata.labels - Pod的所有Label
metadata.annotations - Pod的所有Annotation
2. 使用resourceFieldRef可以声明使用:
limits.cpu-容器的CPU limit
requests.cpu-容器的CPU request
limits.memory-容器的memory limit
requests.memory容器的memory request
1.环境变量方式——将pod和容器信息注入为环境变量
# test-downwardapi-vars.yaml apiVersion: v1 kind: Pod metadata: name: test-downwardapi-vars spec: containers: - name: test-container image: busybox imagePullPolicy: IfNotPresent command: [ "sh" , "-c" ] args: - while true; do echo -en '\n'; printenv MY_POD_NAME printenv MY_POD_IP printenv MY_CPU_REQUEST MY_CPU_LIMIT; printenv MY_MEM_REQUEST MY_MEM_LIMIT; sleep 3600; done; resources: requests: memory: "32Mi" cpu: "125m" limits: memory: "64Mi" cpu: "250m" env: - name: MY_CPU_REQUEST valueFrom: resourceFieldRef: containerName: test-container resource: requests.cpu - name: MY_CPU_LIMIT valueFrom: resourceFieldRef: containerName: test-container resource: limits.cpu - name: MY_MEM_REQUEST valueFrom: resourceFieldRef: containerName: test-container resource: requests.memory - name: MY_MEM_LIMIT valueFrom: resourceFieldRef: containerName: test-container resource: limits.memory - name: MY_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: MY_POD_IP valueFrom: fieldRef: fieldPath: status.podIP restartPolicy: Never#创建pod
$ kubectl create -f test-downwardapi-vars.yaml
#查看容器的日志输出(即注入的环境变量)
$ kubectl logs test-downwardapi-vars
2.Volume挂载方式
# test-downwardapi-volume.yaml apiVersion: v1 kind: Pod metadata: name: test-downwardapi-volume labels: zone: us-est-coast cluster: test-cluster1 rack: rack-22 spec: containers: - name: client-container image: busybox imagePullPolicy: IfNotPresent command: ["sh", "-c"] args: - while true; do if [[ -e /etc/podinfo/labels ]]; then echo -en '\n\n'; cat /etc/podinfo/labels; fi; sleep 500; done; volumeMounts: - name: podinfo mountPath: /etc/podinfo readOnly: false volumes: - name: podinfo projected: sources: - downwardAPI: items: - path: "labels" fieldRef: fieldPath: metadata.labels#创建pod
kubectl create -f test-downwardapi-volume.yaml
#查看日志输出
kubectl logs test-downwardapi-volume
