简介

很多场景下,我们想要在容器运行的时候获取该副本本身的一些信息,例如副本的名称(名称由rc自动分配),当前运行的节点名,当前副本的IP等等信息,k8s为这类场景提供了解决方案。

示例:

downward-api-env.yaml

apiVersion: v1
kind: Pod
metadata:
  name: downward
spec:
  containers:
  - name: main
    image: busybox
    imagePullPolicy: IfNotPresent 
    command: ["sleep", "9999999"]
    resources:
      requests:
        cpu: 15m
        memory: 5Mi
      limits:
        cpu: 100m
        memory: 200Mi
    env:
    - name: POD_NAME ##副本名称
      valueFrom:
        fieldRef:
          fieldPath: metadata.name
    - name: POD_NAMESPACE ##副本运行的名称空间
      valueFrom:
        fieldRef:
          fieldPath: metadata.namespace
    - name: POD_IP ##副本的当前IP
      valueFrom:
        fieldRef:
          fieldPath: status.podIP
    - name: NODE_NAME ##副本运行的节点名称
      valueFrom:
        fieldRef:
          fieldPath: spec.nodeName
    - name: SERVICE_ACCOUNT ##sa
      valueFrom:
        fieldRef:
          fieldPath: spec.serviceAccountName
    - name: CONTAINER_CPU_REQUEST_MILLICORES
      valueFrom:
        resourceFieldRef:
          resource: requests.cpu
          divisor: 1m
    - name: CONTAINER_MEMORY_LIMIT_KIBIBYTES
      valueFrom:
        resourceFieldRef:
          resource: limits.memory
          divisor: 1Ki

通过以上配置,容器即可已环境变量的形式获取到副本的一些信息了,该应用的典型应用场景为pinpotint的客户端埋点的时候使用,agentID和agentName即可从副本的信息中使用,实现在统计结果中区分多副本的情况。