Kubernetes: Task: Expose Metadata to Pod

5th June 2021 at 2:04pm

在 k8s 中,向 Pod 暴露信息有几种常用的方式:

除了上面这些资源外,有时候你可以想 把 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 而不能通过环境变量,因为它们可能会被修改,而环境变量无法实时变化。