Downward API
它的作用是:讓 Pod 里的容器能夠直接獲取到這個 Pod API 對象本身的信息己儒。
實驗:
- 新建一個dapi-metadata.yml文件
vi dapi-metadata.yml
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
command: ["sh", "-c"]
args:
- while true; do
if [[ -e /etc/podinfo/labels ]]; then
echo -en '\n\n'; cat /etc/podinfo/labels;echo -en '\n';cat /etc/podinfo/name; fi;
sleep 5;
done;
volumeMounts:
- name: podinfo
mountPath: /etc/podinfo
readOnly: false
volumes:
- name: podinfo
projected:
sources:
- downwardAPI:
items:
- path: "labels"
fieldRef:
fieldPath: metadata.labels
- path: "name"
fieldRef:
fieldPath: metadata.name
-
以yaml文件創(chuàng)建容器
kubectl create -f dapi-metadata.yml
image.png -
創(chuàng)建了這個 Pod 之后苟鸯,就可以通過 kubectl logs 指令,查看到這些 Labels 字段被打印出來疲扎,如下所示:
kubectl logs test-downwardapi-volume
每5秒記錄一次:
image.png
可以看到y(tǒng)ml文件中echo的內(nèi)容:
image.png
image.png
不過昵时,需要注意的是,Downward API 能夠獲取到的信息椒丧,一定是 Pod 里的容器進(jìn)程啟動之前就能夠確定下來的信息壹甥。而如果你想要獲取 Pod 容器運(yùn)行后才會出現(xiàn)的信息,比如壶熏,容器進(jìn)程的 PID句柠,那就肯定不能使用 Downward API 了,而應(yīng)該考慮在 Pod 里定義一個 sidecar 容器棒假。
apiVersion: v1
kind: Pod
metadata: # pod 的源數(shù)據(jù)信息溯职,可以寫多個
name: nginx-busybox # pod 的名字
spec:
containers:
- name: nginx # 容器的名字
image: nginx:alpine # 鏡像的名字
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /
port: 80
httpHeaders:
- name: X-Custom-Header
value: Awesome
initialDelaySeconds: 3
periodSeconds: 3