• 如何将pod所在的主机IP地址,以变量的方式注入到容器当中? (downward API)


    1、概述

     

    我们知道,当pod被成功调度之后,当查看pod的状态的时候,就会看到pod的IP地址,和pod所在主机的IP地址,如下图所示:

    [root@nccztsjb-node-23 ~]# kubectl get pod -o wide
    NAME                        READY   STATUS    RESTARTS   AGE     IP               NODE               NOMINATED NODE   READINESS GATES
    nginx-ds-lw4vj              1/1     Running   0          10d     172.39.21.91     nccztsjb-node-25   <none>           <none>
    nginx-ds-nrf4t              1/1     Running   0          10d     172.39.209.108   nccztsjb-node-23   <none>           <none>
    nginx-ds-zlw6f              1/1     Running   0          2d23h   172.39.157.203   nccztsjb-node-24   <none>           <none>
    nginx-test-56745657-cdwn2   1/1     Running   0          3d23h   172.39.209.110   nccztsjb-node-23   <none>           <none>
    nginx-test-56745657-cfss5   1/1     Running   0          3d23h   172.39.209.112   nccztsjb-node-23   <none>           <none>
    nginx-test-56745657-h5hbn   1/1     Running   0          3d23h   172.39.209.111   nccztsjb-node-23   <none>           <none>
    nginx-test-56745657-m6hm4   1/1     Running   0          10d     172.39.21.90     nccztsjb-node-25   <none>           <none>
    nginx-test-56745657-pqhqp   1/1     Running   0          10d     172.39.21.93     nccztsjb-node-25   <none>           <none>
    [root@nccztsjb-node-23 ~]# 

     

    那么,如果在容器的内部,想要知道pod的ip和pod所在的节点的ip,该怎么做呢?

     

    OK,在本文中,我们就会介绍,如何通过变量注入的方式,获得pod的状态中的一些信息,然后变成pod的变量,供其中的容器来进行使用

     

    2、将pod的信息注入为环境变量

     

    比如,我们想要将pod启动后,所在的节点的信息注入为容器的环境变量,可以通过以下的方式

     

    增加环境变量到yaml配置文件中(已经运行的,可以通过kubectl edit来进行修改)

     

            env:
            - name: INSTANCE_HOST_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.hostIP
            - name: POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
          dnsPolicy: ClusterFirst
          restartPolicy: Always

     

    重新应用yaml配置文件

     

    查看pod的状态

     

    [root@nccztsjb-node-23 ~]# kubectl get pod -l app=nginx-taints
    NAME                            READY   STATUS    RESTARTS   AGE
    nginx-taints-549f6d97ff-6p7nj   1/1     Running   0          28s
    nginx-taints-549f6d97ff-7thxm   1/1     Running   0          28s
    nginx-taints-549f6d97ff-8h4zj   1/1     Running   0          28s
    nginx-taints-549f6d97ff-95j4v   1/1     Running   0          28s
    nginx-taints-549f6d97ff-zgp6m   1/1     Running   0          28s
    [root@nccztsjb-node-23 ~]# 

     

    进入其中的一个容器,查看环境变量

     

    [root@nccztsjb-node-23 ~]# kubectl exec -it nginx-taints-549f6d97ff-6p7nj -- bash -c "env | grep IP"
    POD_IP=172.39.209.114
    INSTANCE_HOST_IP=172.20.58.83
    [root@nccztsjb-node-23 ~]# 

    可以看到,在容器中,已经可以获得这2个环境变量了。

     

    这种,在容器内获取POD信息的方式叫做(Downward API

     

    OK,以上就简单介绍了如何在容器中获取pod所在的主机IP地址、POD自己的IP地址的方式,并且这些值都是以变量的方式在容器中存在的。

     

    3、downward api的好处是什么

     

    使用downward api,对于容器需要的关于自己的,也就是pod的信息,通过环境变量的方式注入到容器中,就不需要和k8s 的api进行交互来动态获取这些信息,降低了与api server的耦合度。

  • 相关阅读:
    android cts 命令的说明
    k8s认证授权和dashboard部署
    Pod对象的基本概念
    k8s创建自定义资源
    flannel网络插件介绍
    go语言包的介绍
    安装k8s的自动代码生成器
    k8s的pv和pvc概念
    Es索引匹配查询
    shell实现自动化部署项目
  • 原文地址:https://www.cnblogs.com/chuanzhang053/p/16066056.html
Copyright © 2020-2023  润新知