這個章節(jié)展示了如何使用環(huán)境變量公開pod的信息到它自己運(yùn)行的容器里面。環(huán)境變量可以公開Pod字段和容器字段紊册。
有兩種方式用來公開Pod和容器字段給運(yùn)行的容器:環(huán)境變量和DownwardAPIVolumeFiles液茎。
使用Pod字段作為環(huán)境變量的值
在本次實(shí)驗(yàn)票彪,創(chuàng)建包含一個容器的Pod援所。下面是這個Pod的配置文件:
apiVersion: v1
kind: Pod
metadata:
name: dapi-envars-fieldref
spec:
containers:
- name: test-container
image: gcr.io/google_containers/busybox
command: [ "sh", "-c"]
args:
- while true; do
echo -en '\n';
printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE;
printenv MY_POD_IP MY_POD_SERVICE_ACCOUNT;
sleep 10;
done;
env:
- name: MY_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: MY_POD_SERVICE_ACCOUNT
valueFrom:
fieldRef:
fieldPath: spec.serviceAccountName
restartPolicy: Never
在這個配置文件揭朝,可以看到五個環(huán)境變量队贱。env字段是個數(shù)組。數(shù)組里面的第一個元素指定了MY_NODE_NAME環(huán)境變量潭袱,它的值是從Pod的spec.nodeName里面獲取的柱嫌。類似的其他的環(huán)境變量獲取pod的字段名稱。
注意:這些例子里面的字段是pod的字段。不是運(yùn)行在pod里面的容器的字段。
創(chuàng)建pod:
kubectl create -f test.yaml
驗(yàn)證運(yùn)行在pod里面的容器:
kubectl get pods
查看容器的日志:
kubectl logs dapi-envars-fieldref
輸出展示了選擇的環(huán)境變量的值:
minikube
dapi-envars-fieldref
default
172.17.0.4
default
為何在日志里面是這些值摆舟,可以看配置文件的command和args。當(dāng)容器啟動的時候嘉抓,把這個五個環(huán)境變量的值寫入的標(biāo)準(zhǔn)輸出里面。每十秒鐘重復(fù)一次晕窑。
下一步抑片,通過shell進(jìn)入Pod運(yùn)行的容器里面:
kubectl exec -it dapi-envars-fieldref -- sh
在shell里面,查看環(huán)境變量:
/# printenv
輸出展示了確定已經(jīng)把pod字段的值分配給環(huán)境變量:
MY_POD_SERVICE_ACCOUNT=default
...
MY_POD_NAMESPACE=default
MY_POD_IP=172.17.0.4
...
MY_NODE_NAME=minikube
...
MY_POD_NAME=dapi-envars-fieldref
使用容器字段作為環(huán)境變量的值
在上面的實(shí)驗(yàn)杨赤,使用pod字段作為環(huán)境變量的值蓝丙。在下一個實(shí)驗(yàn),可以使用容器字段作為環(huán)境變量的值望拖。下面是Pod的配置文件:
apiVersion: v1
kind: Pod
metadata:
name: dapi-envars-resourcefieldref
spec:
containers:
- name: test-container
image: gcr.io/google_containers/busybox:1.24
command: [ "sh", "-c"]
args:
- while true; do
echo -en '\n';
printenv MY_CPU_REQUEST MY_CPU_LIMIT;
printenv MY_MEM_REQUEST MY_MEM_LIMIT;
sleep 10;
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
restartPolicy: Never
在配置文件里面,可以看到四個環(huán)境變量挫鸽。env字段是一個數(shù)組说敏。數(shù)組的第一個元素指定了MY_CPU_REQUEST環(huán)境變量的值通過名字為test-container容器的request.cpu字段獲取。類似的其他的環(huán)境變量通過他們對應(yīng)的容器字段獲取相應(yīng)的值丢郊。
創(chuàng)建Pod:
kubectl create -f test.yaml
驗(yàn)證Pod里面的容器已經(jīng)運(yùn)行:
kubectl get pods
查看容器日志:
kubectl logs dapi-envars-resourcefieldref
輸出展示了選擇的環(huán)境變量的值:
1
1
33554432
67108864