在容器内获取元数据
更新时间:2025-06-04
在容器内获取元数据
当前仅支持在CCE集群中获取元数据
通过 Downward API 访问元数据
Kubernetes Downward API提供了以下两种方式:
- 环境变量(Environment Variables)用于单个变量,可以将Pod信息直接注入容器内部。
 - Volume挂载(Volume Files)可以将Pod信息生成为文件,直接挂载到容器内部。 目前BCI已经支持了Downward API的大部分常用字段,下文将为您介绍使用方式。
 
1. 环境变量方式
您可以通过Downward API将Pod的名称、命名空间、IP等信息注入到容器的环境变量中。通过环境变量可以获得的值如下表所示。
| 参数 | 描述 | 
|---|---|
| metadata.name | Pod名称 | 
| metadata.namespace | Pod命名空间 | 
| metadata.uid | Pod的UID | 
| metadata.labels[' | 
Pod的标签值 | 
| metadata.annotations[' | 
Pod的注解值 | 
| spec.serviceAccountName | Pod服务账号名称 | 
| spec.nodeName | 节点名称 | 
| status.podIP | 节点IP | 
| limits.cpu | 容器的 CPU 限制值 | 
| requests.cpu | 容器的 CPU 请求值 | 
| limits.memory | 容器的内存限制值 | 
| requests.memory | 容器的内存请求值 | 
注意:
暂不支持的字段如下:
- status.hostIP
 - resource: limits.ephemeral-storage
 - resource: requests.ephemeral-storage
 
配置示例:
                Plain Text
                
            
            1apiVersion: v1
2kind: Pod
3metadata:
4  annotations:
5    myannotation: "myannotation"
6  labels:
7    app: bci-test-vk
8    mylabel: "mylabel"
9  name: env-test
10  namespace: default
11spec:
12  enableServiceLinks: false
13  nodeSelector:
14    type: virtual-kubelet
15  tolerations:
16    - effect: NoSchedule
17      key: virtual-kubelet.io/provider
18      operator: Equal
19      value: baidu
20    - effect: NoExecute
21      key: node.kubernetes.io/not-ready
22      operator: Exists
23      tolerationSeconds: 300
24    - effect: NoExecute
25      key: node.kubernetes.io/unreachable
26      operator: Exists
27      tolerationSeconds: 300
28  containers:
29  - image: hub.baidubce.com/cce/nginx-alpine-go
30    imagePullPolicy: IfNotPresent
31    name: c01
32    workingDir: /work
33    ports:
34    - containerPort: 8080
35      protocol: TCP
36    resources:
37      limits:
38        cpu: 250m
39        memory: 512Mi
40      requests:
41        cpu: 250m
42        memory: 512Mi
43    env:
44      - name: MY_POD_IP
45        valueFrom:
46          fieldRef:
47            fieldPath: status.podIP
48      - name: MY_ENV
49        value: "test"
50      - name: METADATA_NAME
51        valueFrom:
52          fieldRef:
53            fieldPath: metadata.name
54      - name: METADATA_NAMESPACE
55        valueFrom:
56          fieldRef:
57            fieldPath: metadata.namespace
58      - name: METADATA_UID
59        valueFrom:
60          fieldRef:
61            fieldPath: metadata.uid
62      - name: METADATA_LABELS
63        valueFrom:
64          fieldRef:
65            fieldPath: metadata.labels['mylabel']
66      - name: METADATA_ANNOTATIONS_REGION
67        valueFrom:
68          fieldRef:
69            fieldPath: metadata.annotations['myannotation']
70      - name: MY_CPU_LIMIT
71        valueFrom:
72          resourceFieldRef:
73            containerName: c01
74            resource: limits.cpu
75      - name: MY_CPU_REQUEST
76        valueFrom:
77          resourceFieldRef:
78            containerName: c01
79            resource: requests.cpu
80      - name: MY_MEM_LIMIT
81        valueFrom:
82          resourceFieldRef:
83            containerName: c01
84            resource: limits.memory
85      - name: MY_MEM_REQUEST
86        valueFrom:
87          resourceFieldRef:
88            containerName: c01
89            resource: requests.memory
            2. Volume挂载方式
您可以通过Downward API将Pod的Label、Annotation等信息通过Volume挂载到容器的某个文件中。通过Volume挂载可以获得的值如下表所示。
| 参数 | 描述 | 
|---|---|
| metadata.name | Pod名称 | 
| metadata.namespace | Pod命名空间 | 
| metadata.uid | Pod的UID | 
| metadata.labels[' | 
Pod的标签值 | 
| metadata.annotations[' | 
Pod的注解值 | 
| metadata.labels | Pod的所有标签 | 
| metadata.annotations | Pod的所有注解 | 
| limits.cpu | 容器的 CPU 限制值 | 
| requests.cpu | 容器的 CPU 请求值 | 
| limits.memory | 容器的内存限制值 | 
| requests.memory | 容器的内存请求值 | 
配置示例:
                Plain Text
                
            
            1apiVersion: v1
2kind: Pod
3metadata:
4  annotations:
5    myannotation: "myannotation"
6  labels:
7    app: bci-test-vk
8    mylabel: "mylabel"
9  name: volume-test
10  namespace: default
11spec:
12  nodeSelector:
13    type: virtual-kubelet
14  tolerations:
15    - effect: NoSchedule
16      key: virtual-kubelet.io/provider
17      operator: Equal
18      value: baidu
19    - effect: NoExecute
20      key: node.kubernetes.io/not-ready
21      operator: Exists
22      tolerationSeconds: 300
23    - effect: NoExecute
24      key: node.kubernetes.io/unreachable
25      operator: Exists
26      tolerationSeconds: 300
27  containers:
28  - image: hub.baidubce.com/cce/nginx-alpine-go
29    imagePullPolicy: IfNotPresent
30    name: c01
31    workingDir: /work
32    ports:
33    - containerPort: 8080
34      protocol: TCP
35    resources:
36      limits:
37        cpu: 250m
38        memory: 512Mi
39      requests:
40        cpu: 250m
41        memory: 512Mi
42    volumeMounts:
43      - name: podinfo
44        mountPath: /etc/podinfo
45  volumes:
46  - name: podinfo
47    downwardAPI:
48      items:
49        - path: "metadata.name"
50          fieldRef:
51            fieldPath: metadata.name
52        - path: "metadata.namespace"
53          fieldRef:
54            fieldPath: metadata.namespace
55        - path: "metadata.uid"
56          fieldRef:
57            fieldPath: metadata.uid
58        - path: "mylabel"
59          fieldRef:
60            fieldPath: metadata.labels['mylabel']
61        - path: "myannotation"
62          fieldRef:
63            fieldPath: metadata.annotations['myannotation']
64        - path: "labels"
65          fieldRef:
66            fieldPath: metadata.labels
67        - path: "annotations"
68          fieldRef:
69            fieldPath: metadata.annotations
70        - path: "workload_cpu_limit"
71          resourceFieldRef:
72            containerName: c01
73            resource: limits.cpu
74            divisor: 1m
75        - path: "workload_cpu_request"
76          resourceFieldRef:
77            containerName: c01
78            resource: requests.cpu
79            divisor: 1m
80        - path: "workload_mem_limit"
81          resourceFieldRef:
82            containerName: c01
83            resource: limits.memory
84            divisor: 1Mi
85        - path: "workload_mem_request"
86          resourceFieldRef:
87            containerName: c01
88            resource: requests.memory
89            divisor: 1Mi
            