一、环境变量的方式
1.使用fieldRef获取pod的基本信息,编写yaml文件
[root@k8s-master downward-api]# vim test-env-pod.yaml
[root@k8s-master downward-api]# cat test-env-pod.yaml
---
apiVersion: v1
kind: Pod
metadata:
name: test-env-pod
namespace: kube-system
spec:
containers:
- name: test-env-pod
image: daocloud.io/library/nginx
env:
- name: POD_NAME #第⼀个环境变量的名字
valueFrom: #使⽤valueFrom⽅式设置
fieldRef: #关联⼀个字段metadata.name
fieldPath: metadata.name #这个字段从当前运⾏的pod详细信息查看
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP #因为pod的ip是不固定的,属于状态数据,所以使用status去获取
2.创建pod并查看pod内的环境变量
[root@k8s-master downward-api]# kubectl apply -f test-env-pod.yaml
pod/test-env-pod created[root@k8s-master downward-api]# kubectl exec -it test-env-pod /bin/bash -n kube-system
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@test-env-pod:/# env |grep pod
HOSTNAME=test-env-pod
POD_NAME=test-env-pod
root@test-env-pod:/# env |grep POD
POD_NAME=test-env-pod
POD_NAMESPACE=kube-system
POD_IP=10.244.2.18
root@test-env-pod:/# echo $POD_IP
10.244.2.18
二、volume卷挂载
通过Downward API将pod中的Label、Annotation等信息通过Volume挂载到容器的某个文件中去,然后在容器中打印出该文件的值来验证;
1.编写yaml文件
[root@k8s-master downward-api]# vim test-volume-pod.yaml
[root@k8s-master downward-api]# cat test-volume-pod.yaml
---
apiVersion: v1
kind: Pod
metadata:
name: test-volume-pod
namespace: kube-system
labels:
k8s-app: test-volume
node-env: test
spec:
containers:
- name: test-volume-pod-container
image: daocloud.io/library/nginx
volumeMounts:
- name: podinfo
mountPath: /etc/podinfo
volumes:
- name: podinfo
downwardAPI:
items:
- path: "labels"
fieldRef:
fieldPath: metadata.labels
2.创建pod并验证
[root@k8s-master downward-api]# kubectl apply -f test-volume-pod.yaml
pod/test-volume-pod created
[root@k8s-master downward-api]# kubectl get pod -n kube-system |grep test
test-env-pod 1/1 Running 0 19m
test-volume-pod 1/1 Running 0 2m19s
[root@k8s-master downward-api]# kubectl exec -it test-volume-pod -n kube-system /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@test-volume-pod:/# ls /etc/podinfo/
labels
root@test-volume-pod:/# cat /etc/podinfo/labels
k8s-app="test-volume"
node-env="test"root@test-volume-pod:/# exit
exit
三、Downward API支持字段
使⽤ fieldRef 可以声明使⽤:
PS:
2.Secret、ConfigMap,以及 Downward API 这三种 Projected Volume 定义的信息,⼤多还可以通过环境变量的⽅式出现在容器⾥。但是,通过环境变量获取这些信息的⽅式,不具备⾃动更新的能⼒。⼀般情况下,建议使⽤ Volume ⽂件的⽅式获取这些信息