kubectl explain pod.spec.volumes.downwardAPI
不是为了存放容器的数据也不是用来进行容器和宿主机的数据交换的,而是让 Pod 里的容器能够直接获取到这个 Pod 对象本身的一些信息
Downward API 能够获取到的信息,一定是 Pod 里的容器进程启动之前就能够确定下来的信息。如果想要获取 Pod 容器运行后才会出现的信息,比如,容器进程的 PID,那就肯定不能使用 Downward API 了,而应该考虑在 Pod 里定义一个 sidecar 容器来获取了
目前 Downward API 提供了两种方式用于将 Pod 的信息注入到容器内部:
- 环境变量:用于单个变量,可以将 Pod 信息和容器信息直接注入容器内部
- Volume 挂载:将 Pod 信息生成为文件,直接挂载到容器内部中去
通过环境变量获取这些信息的方式,不具备自动更新的能力
一般情况下,建议使用 Volume 文件的方式获取这些信息,因为通过 Volume 的方式挂载的文件在 Pod 中会进行热更新
pod env
kind: Podmetadata:name: env-podspec:containers:- name: env-podimage: busyboxcommand: ["/bin/sh", "-c", "env | grep pod"]env:- name: pod_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: pod_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: pod_IPvalueFrom:fieldRef:fieldPath: status.podIP
Volume 挂载
支持的值
metadata.annotations
metadata.labels
metadata.name
metadata.namespace
metadata.uid
volume-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: volume-pod
namespace: kube-system
spec:
volumes:
- name: podinfo
downwardAPI:
items:
- path: pod_name
fieldRef:
fieldPath: metadata.name
- path: pod_ns
fieldRef:
fieldPath: metadata.namespace
containers:
- name: volume-pod-c1
image: busybox
args:
- sleep
- “3600”
volumeMounts:
- name: podinfo
mountPath: /etc/podinfo
