container怎么能够获取到pod元数据信息

Downward API提供了两种方式用于将 POD 的信息注入到容器内部:

  • 环境变量:用于单个变量,可以将 POD 信息和容器信息直接注入容器内部。
  • Volume挂载:将 POD 信息生成为文件,直接挂载到容器内部中去。

环境变量方式

通过Downward API来将 POD 的 IP、名称以及所对应的 namespace 注入到容器的环境变量中去;然后在容器中打印全部的环境变量来进行验证
距离创建pod 的yaml文件:

    apiVersion: v1
kind: Pod
metadata:
    name: test-env-pod
    namespace: kube-system
spec:
    containers:
    - name: test-env-pod
      image: busybox:latest
      command: ["/bin/sh", "-c", "env"]
      env:
      - name: POD_NAME
        valueFrom:
          fieldRef:
            fieldPath: metadata.name
      - name: POD_NAMESPACE
        valueFrom:
          fieldRef:
            fieldPath: metadata.namespace
      - name: POD_IP
        valueFrom:
          fieldRef:
            fieldPath: status.podIP

我们可以看到上面我们使用了一种新的方式来设置env的值:valueFrom。另外我们需要注意的是 POD 的 name 和 namespace 属于元数据,是在 POD 创建之前就已经定下来了的,所以我们使用 metata 获取就可以了,但是对于 POD 的 IP 则不一样,因为我们知道 POD IP 是不固定的,POD 重建了就变了,它属于状态数据,所以我们使用 status 去获取。
创建成功后验证env

$ kubectl logs podName -n kube-system |grep POD
POD_IP=172.30.19.24
POD_NAME=test-env-pod
POD_NAMESPACE=kube-system

Volume挂载

通过Volume挂载的方式去获取 POD 的基本信息。接下来我们通过Downward API将 POD 的 Label、Annotation 等信息通过 Volume 挂载到容器的某个文件中去,然后在容器中打印出该文件的值来验证。 新建文件 yaml 文件:(test-volume-pod.yaml)

apiVersion: v1
kind: Pod
metadata:
    name: test-volume-pod
    namespace: kube-system
    labels:
        k8s-app: test-volume
        node-env: test
    annotations:
        build: test
        own: qikqiak
spec:
    containers:
    - name: test-volume-pod-container
      image: busybox:latest
      command: ["sh", "-c"]
      args:
      - while true; do
          if [[ -e /etc/podinfo/labels ]]; then
            echo -en '\n\n'; cat /etc/podinfo/labels; fi;
          if [[ -e /etc/podinfo/annotations ]]; then
            echo -en '\n\n'; cat /etc/podinfo/annotations; fi;
          sleep 3600;
        done;
      volumeMounts:
      - name: podinfo
        mountPath: /etc/podinfo
    volumes:
    - name: podinfo
      downwardAPI:
        items:
        - path: "labels"
          fieldRef:
            fieldPath: metadata.labels
        - path: "annotations"
          fieldRef:
            fieldPath: metadata.annotations

我们将元数据 labels 和 annotaions 以文件的形式挂载到了/etc/podinfo目录下,创建上面的 POD :
查看日志

$ kubectl logs test-volume-pod -n kube-system
k8s-app="test-volume"
node-env="test"

build="test"
kubernetes.io/config.seen="2018-03-02T17:51:10.856356259+08:00"
kubernetes.io/config.source="api"
own="qikqiak"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值