创建pod时如何在pod里引用本身的IP地址
如果pod所用镜像里的程序要求指定自己的IP才能正常运行的话,那么在pod还没有创建出来之前都没有IP,那么该如何在pod的yaml文件里指定自己的IP?
这里可以在env.valueFrom里通过fileldRef.fieldPath来引用,看下面的例子。
[root@vms71 ~]# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod1
name: pod1
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod1
resources: {}
env:
- name: xx
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: yy
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: zz
valueFrom:
fieldRef:
fieldPath: metadata.namespace
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
[root@vms71 ~]#
这里创建了一个名字为pod1的pod,里面定义了三个变量:
- xx 通过status.podIP引用自己的IP
- yy 通过metadata.name引用自己的pod名
- zz 通过metadata.namespace引用pod所在的命名空间
当然了有人说我怎么知道fieldRef后面的值,可以随便创建一个pod然后通过kubectl get pods pod名 -o yaml 进行查看。
创建pod并测试:
[root@vms71 ~]# kubectl apply -f pod1.yaml
pod/pod1 created
[root@vms71 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
pod1 1/1 Running 0 4s 10.244.5.244 vms72.rhce.cc
[root@vms71 ~]#
这里pod的IP是10.244.5.244。
在pod里验证。
[root@vms71 ~]# kubectl exec -it pod1 -- sh -c 'echo $xx'
10.244.5.244
[root@vms71 ~]# kubectl exec -it pod1 -- sh -c 'echo $yy'
pod1
[root@vms71 ~]# kubectl exec -it pod1 -- sh -c 'echo $zz'
chap3-pod
[root@vms71 ~]#