八、在容器内获取Pod信息(Downward API)

一、概述

Pod的逻辑概念在容器之上,Kubernetes在成功创建Pod之后,会为Pod和容器设置一些额外的信息,例如Pod级别的Pod名称、Pod IP、Node IP、Label、Annotation、容器级别的资源限制等。在很多应用场景中,这些信息对容器内的应用来说都很有用,例如使用Pod名称作为日志记录的一个字段用于标识日志来源。为了在容器内获取Pod级别的这些信息,Kubernetes提供了Downward API机制来将Pod和容器的某些元数据信息注入容器环境内,供容器应用方便地使用。

Downward API可以通过以下两种方式将Pod和容器的元数据信息注
入容器内部。
(1)环境变量:将Pod或Container信息设置为容器内的环境变量。
(2)Volume挂载:将Pod或Container信息以文件的形式挂载到容器内部。

二、环境变量方式

通过环境变量的方式可以将Pod信息或Container信息注入容器运行环境中。

1、将Pod信息设置为容器内的环境变量

下面的例子通过Downward API将Pod的IP、名称和所在命名空间注入容器的环境变量中,Pod的YAML文件内容如下:

[root@k8s-master01 APIPod] # vim apipod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: dapi-envars
spec:
  nodeName: k8s-node02
  containers:
    - name: nginx
      image: registry.cn-beijing.aliyuncs.com/dotbalo/nginx
      imagePullPolicy: IfNotPresent
      command: ["sh","-c"]
      args:
      - |
        while true;do
          echo;
          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
[root@k8s-master01 APIPod] # kubectl create  -f apipod.yaml
pod/dapi-envars created
[root@k8s-master01 APIPod] # kubectl get po
NAME                          READY   STATUS    RESTARTS      AGE
dapi-envars                   1/1     Running   0             39s

command: ["sh", "-c"]
是 Kubernetes Pod 中的容器启动参数,表示使用 /bin/sh(Linux Shell 的一个实现)作为容器的入口点,并通过-c参数执行一段命令或脚本。

  • sh 是一个 shell 程序,通常是 /bin/sh 的符号链接,指向某个 shell 的实现(比如 Bash、Dash 或其他)。
  • -c 是 sh 的参数,表示从命令行读取一段字符串,并将这段字符串作为命令执行。

args 使用多行脚本
args 是一个字符串数组,使用 | 表示这是一个多行字符串,并保持换行符。- | 的作用是表示将多行文本作为一个块字符串处理,这是 YAML 规范的一部分。YAML 格式要求多行脚本需用 | 引导,表示这是一个块字符串。所以有了 - |

  • -表示数组的一个元素。
  • | 表示这是一个块字符串,保持多行和换行符

---
  • command:指定容器的入口命令。

  • args:为 command 提供参数。

行为:
command: ["sh", "-c"] 启动 /bin/sh,并告诉它从 args 中读取命令。
args 中的脚本会被作为一个参数传递给 sh 的 -c,然后执行。


注意,环境变量不直接设置value,而是设置valueFrom对Pod的元数据进行引用。
在本例中通过对Downward API的设置使用了以下Pod的元数据信息设置环境变量。

  • ◎ spec.nodeName:Pod所在Node的名称。
  • ◎ metadata.name:Pod名称。
  • ◎ metadata.namespace:Pod所在命名空间的名称。
  • ◎ status.podIP:Pod的IP地址。
  • ◎ spec.serviceAccountName:Pod使用的ServiceAccount名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cyan_Jiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值