k8s—Downward API

Downward API ⽤于在容器中获取 POD 的基本信息, kubernetes ⽀持
Downward API 提供了两种⽅式⽤于将 POD 的信息注⼊到容器内部:
1 . 环境变量:⽤于单个变量,可以将 POD 信息和容器信息直接注⼊容器内部。
2 .Volume 挂载:将 POD 信息⽣成为⽂件,直接挂载到容器内部中去

一、环境变量的方式

       环境变量的⽅式:通过Downward API 来将 POD IP 、名称以及所对应的 namespace 注⼊到容器的环境变量中去,然后在容器中打印全部的环境变量来进⾏验证
1.使用fieldRef获取pod的基本信息,编写yaml文件

[root@k8s-master downward-api]# vim test-env-pod.yaml
[root@k8s-master downward-api]# cat test-env-pod.yaml 
---
apiVersion: v1
kind: Pod
metadata:
  name: test-env-pod
  namespace: kube-system
spec:
  containers:
  - name: test-env-pod
    image: daocloud.io/library/nginx
    env:
    - name: POD_NAME                
#第⼀个环境变量的名字
      valueFrom:                        #使⽤valueFrom⽅式设置
        fieldRef:                        #关联⼀个字段metadata.name
          fieldPath: metadata.name                #这个字段从当前运⾏的pod详细信息查看
    - name: POD_NAMESPACE
      valueFrom:
        fieldRef:
          fieldPath: metadata.namespace
    - name: POD_IP
      valueFrom:
        fieldRef:
          fieldPath: status.podIP
                #因为pod的ip是不固定的,属于状态数据,所以使用status去获取

 2.创建pod并查看pod内的环境变量

[root@k8s-master downward-api]# kubectl apply -f test-env-pod.yaml 
pod/test-env-pod created

[root@k8s-master downward-api]# kubectl exec -it test-env-pod /bin/bash -n kube-system
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@test-env-pod:/# env |grep pod
HOSTNAME=test-env-pod
POD_NAME=test-env-pod
root@test-env-pod:/# env |grep POD
POD_NAME=test-env-pod
POD_NAMESPACE=kube-system
POD_IP=10.244.2.18
root@test-env-pod:/# echo $POD_IP
10.244.2.18

二、volume卷挂载

        通过Downward API将pod中的Label、Annotation等信息通过Volume挂载到容器的某个文件中去,然后在容器中打印出该文件的值来验证;

1.编写yaml文件

[root@k8s-master downward-api]# vim test-volume-pod.yaml
[root@k8s-master downward-api]# cat test-volume-pod.yaml 
---
apiVersion: v1
kind: Pod
metadata:
  name: test-volume-pod
  namespace: kube-system
  labels:
    k8s-app: test-volume
    node-env: test
spec:
  containers:
  - name: test-volume-pod-container
    image: daocloud.io/library/nginx
    volumeMounts:
    - name: podinfo
      mountPath: /etc/podinfo
  volumes:
  - name: podinfo
    downwardAPI:
      items:
      - path: "labels"
        fieldRef:
          fieldPath: metadata.labels

2.创建pod并验证

[root@k8s-master downward-api]# kubectl apply -f test-volume-pod.yaml 
pod/test-volume-pod created
[root@k8s-master downward-api]# kubectl get pod -n kube-system |grep test
test-env-pod                         1/1     Running   0             19m
test-volume-pod                      1/1     Running   0             2m19s
[root@k8s-master downward-api]# kubectl exec -it test-volume-pod -n kube-system /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@test-volume-pod:/# ls /etc/podinfo/
labels
root@test-volume-pod:/# cat /etc/podinfo/labels 
k8s-app="test-volume"
node-env="test"root@test-volume-pod:/# exit
exit

三、Downward API支持字段

使⽤ fieldRef 可以声明使⽤:
spec.nodeName - 宿主机名字
status.hostIP - 宿主机 IP
metadata.name - Pod 的名字
metadata.namespace - Pod Namespace
status.podIP - Pod IP
spec.serviceAccountName - Pod Service Account 的名字
metadata.uid - Pod UID
metadata.labels[ '<KEY>' ] - 指定 <KEY> Label
metadata.annotations[ '<KEY>' ] - 指定 <KEY> Annotation
metadata.labels - Pod 的所有 Label
metadata.annotations - Pod 的所有 Annotation
        PS:
                1.列出来的信息仅 供参考,在使⽤ Downward API 时,还是要记得去查阅⼀下官⽅⽂档

                2.Secret、ConfigMap,以及 Downward API 这三种 Projected Volume 定义的信息,⼤多还可以通过环境变量的⽅式出现在容器⾥。但是,通过环境变量获取这些信息的⽅式,不具备⾃动更新的能⼒。⼀般情况下,建议使⽤ Volume ⽂件的⽅式获取这些信息

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值