Yin的笔记本

vuePress-theme-reco Howard Yin    2021 - 2025
Yin的笔记本 Yin的笔记本

Choose mode

  • dark
  • auto
  • light
Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • MyIdeas
  • Linux
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • Node
  • Nvidia
  • Python
  • Rust
  • Tex
  • Shell
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
author-avatar

Howard Yin

299

Article

152

Tag

Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • MyIdeas
  • Linux
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • Node
  • Nvidia
  • Python
  • Rust
  • Tex
  • Shell
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
  • downwardAPI - 让容器了解自己的情况

    • 把 Pod 基本信息放到环境变量中
      • 把 Pod 基本信息生成文件挂载到容器内部

      downwardAPI - 让容器了解自己的情况

      vuePress-theme-reco Howard Yin    2021 - 2025

      downwardAPI - 让容器了解自己的情况


      Howard Yin 2020-08-08 11:35:02 Kubernetes概念实操存储Kubernetes对象

      downwardAPI用于让程序在容器中获取 Pod 的基本信息。

      使用downwardAPI让程序在容器中获取 Pod 基本信息的方法有两种:

      • 把 Pod 基本信息放到环境变量中
      • 把 Pod 基本信息生成文件挂载到容器内部(DownwardAPIVolumeFiles)

      下面这些信息可以通过环境变量和DownwardAPIVolumeFiles提供给容器:

      能通过fieldRef获得的:

      • metadata.name - Pod名称
      • metadata.namespace - Pod名字空间
      • metadata.uid - Pod的UID, 版本要求 v1.8.0-alpha.2
      • metadata.labels['<KEY>'] - 单个 pod 标签值 <KEY> (例如, metadata.labels['mylabel']); 版本要求 Kubernetes 1.9+
      • metadata.annotations['<KEY>'] - 单个 pod 的标注值 <KEY> (例如, metadata.annotations['myannotation']); 版本要求 Kubernetes 1.9+

      能通过resourceFieldRef获得的:

      • 容器的CPU约束值
      • 容器的CPU请求值
      • 容器的内存约束值
      • 容器的内存请求值
      • 容器的临时存储约束值, 版本要求 v1.8.0-beta.0
      • 容器的临时存储请求值, 版本要求 v1.8.0-beta.0

      此外,以下信息可通过DownwardAPIVolumeFiles从fieldRef获得:

      • metadata.labels - all of the pod’s labels, formatted as label-key="escaped-label-value" with one label per line
      • metadata.annotations - all of the pod’s annotations, formatted as annotation-key="escaped-annotation-value" with one annotation per line
      • metadata.labels - 所有Pod的标签,以label-key="escaped-label-value"格式显示,每行显示一个label
      • metadata.annotations - Pod的注释,以annotation-key="escaped-annotation-value"格式显示,每行显示一个标签

      以下信息可通过环境变量从fieldRef获得:

      • status.podIP - 节点IP
      • spec.serviceAccountName - Pod服务帐号名称, 版本要求 v1.4.0-alpha.3
      • spec.nodeName - 节点名称, 版本要求 v1.4.0-alpha.3
      • status.hostIP - 节点IP, 版本要求 v1.7.0-alpha.1

      # 把 Pod 基本信息放到环境变量中

      案例:

      apiVersion: v1
      kind: Pod
      metadata:
        name: test-env-pod
        namespace: kube-system
      spec:
        containers:
        - name: test-env-pod
          image: busybox:latest
          env:
          - name: POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name #获取Pod名称
          - name: POD_NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace #获取Pod名字空间
          - name: POD_IP
            valueFrom:
              fieldRef:
                fieldPath: status.podIP #获取节点IP
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22

      在这个容器中查看环境变量:

      $ env | grep POD
      POD_IP=172.30.19.24
      POD_NAME=test-env-pod
      POD_NAMESPACE=kube-system
      
      1
      2
      3
      4

      可以看到相关信息都已被写入。

      # 把 Pod 基本信息生成文件挂载到容器内部

      比如把上面那个加个注释改成挂载文件到容器内部:

      apiVersion: v1
      kind: Pod
      metadata:
        name: test-env-pod
        namespace: kube-system
        annotations:
          build: test
          own: qikqiak
      spec:
        volumes:
        - name: pod-info
          downwardAPI:
            items:
              - path: "labels"
                fieldRef:
                  fieldPath: metadata.labels
              - path: "annotations"
                fieldRef:
                  fieldPath: metadata.annotations
        containers:
        - name: test-env-pod
          image: busybox:latest
          volumeMounts:
            - name: podinfo
              mountPath: /etc/podinfo
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25

      这样,我们就能在容器中看到两个文件:

      $ ls /etc/podinfo
      labels
      annotations
      $ cat /etc/podinfo/labels
      k8s-app="test-volume"
      node-env="test"
      $ cat /etc/podinfo/annotations
      build="test"
      kubernetes.io/config.seen="2018-03-02T17:51:10.856356259+08:00"
      kubernetes.io/config.source="api"
      own="qikqiak"
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      帮助我们改善此页面!
      创建于: 2020-08-08 11:35:26

      更新于: 2020-08-08 11:35:26