在容器内获取元数据
更新时间:2024-09-25
在容器内获取元数据
当前仅支持在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