通过环境变量将 Pod 信息呈现给容器

Downward API 的能力
下面这些信息可以通过环境变量和 downward API 卷提供给容器:

## 能通过 fieldRef 获得的:
metadata.name                 // Pod 名称
metadata.namespace            // Pod 名字空间
metadata.uid                  // Pod 的 UID
metadata.labels['<KEY>']      // Pod 标签 <KEY> 的值 (例如, metadata.labels['mylabel'])
metadata.annotations['<KEY>'] // Pod 的注解 <KEY> 的值(例如, metadata.annotations['myannotation'])
metadata.labels               // Pod 的所有标签,以 label-key="escaped-label-value" 格式显示,每行显示一个标签
metadata.annotations          // Pod 的所有注解,以 annotation-key="escaped-annotation-value" 格式显示,每行显示一个标签

## 以下信息可通过环境变量获得:
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


# 例子:
apiVersion: v1
kind: Pod
metadata:
  name: dapi-envars-fieldref
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "sh", "-c"]
      args:
      - while true; do
          echo -en '\n';
          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
## 能通过 resourceFieldRef 获得的:
容器的 CPU 约束值
容器的 CPU 请求值
容器的内存约束值
容器的内存请求值
容器的巨页限制值(前提是启用了 DownwardAPIHugePages 特性门控)
容器的巨页请求值(前提是启用了 DownwardAPIHugePages 特性门控)
容器的临时存储约束值
容器的临时存储请求值

# 例子
apiVersion: v1
kind: Pod
metadata:
  name: dapi-envars-resourcefieldref
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox:1.24
      command: [ "sh", "-c"]
      args:
      - while true; do
          echo -en '\n';
          printenv MY_CPU_REQUEST MY_CPU_LIMIT;
          printenv MY_MEM_REQUEST MY_MEM_LIMIT;
          sleep 10;
        done;
      resources:
        requests:
          memory: "32Mi"
          cpu: "125m"
        limits:
          memory: "64Mi"
          cpu: "250m"
      env:
        - name: MY_CPU_REQUEST
          valueFrom:
            resourceFieldRef:
              containerName: test-container
              resource: requests.cpu
        - name: MY_CPU_LIMIT
          valueFrom:
            resourceFieldRef:
              containerName: test-container
              resource: limits.cpu
        - name: MY_MEM_REQUEST
          valueFrom:
            resourceFieldRef:
              containerName: test-container
              resource: requests.memory
        - name: MY_MEM_LIMIT
          valueFrom:
            resourceFieldRef:
              containerName: test-container
              resource: limits.memory
  restartPolicy: Never
posted @ 2022-01-07 15:28  klvchen  阅读(231)  评论(0)    收藏  举报