k8s之Dowanward API详细理解及使用

it2026-08-31  3

Downward API介绍

  作用:让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

 

Downward API使用

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

最新回复(0)