创建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 ~]# 

相关新闻

发表回复

Please Login to Comment

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

                                                                                                                                    RHCE9学习指南全部更新完成,点击阅读