在 k8s 中,向 Pod 暴露信息有几种常用的方式:
- DNS,比如 Service
- 环境变量,比如 Service,ConfigMaps,Secrets
- 文件(Volumn),比如 ConfigMaps,Secrets
除了上面这些资源外,有时候你可以想 把 Pod 的元信息(metadata)暴露给 pod。k8s 提供了 Downward API 机制,可以做这件事情,并且一样 支持环境变量及 Volumn。下面这个例子中,这些元信息通过环境变量给到 pod 中:
apiVersion: v1
kind: Pod
metadata:
name: downward
spec:
containers:
- name: main
image: busybox
command: ["sleep", "9999999"]
resources:
requests:
cpu: 15m
memory: 100Ki
limits:
cpu: 100m
memory: 4Mi
env:
# 注意这些环境变量
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
# ...
Pod 的 label 和 annotation 也是可以 expose 给 Pod 的,但是只能通过 Volumn 而不能通过环境变量,因为它们可能会被修改,而环境变量无法实时变化。