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

859



被折叠的 条评论
为什么被折叠?



