YOGAE

TODO: FIXME:

kubernetes Downward API

09 May 2019

Downward API를 사용하면 해당 포드의 내부에서 실행 중인 프로세스에 포드 자체의 메타 데이터를 노출할 수 있습니다.

사용 가능한 메타 데이터

  • 포드의 이름
  • 포드의 IP 주소
  • 포드가 속한 네임스페이스
  • 포드가 실행되고 있는 노드의 이름
  • 포드가 실행 중인 서비스 계정의 이름
  • 각 컨테이너에 대한 CPU 및 메모리 요청
  • 각 컨테이너의 CPU 및 메모리 한계
  • 포드의 라벨
  • 포드의 주석
apiVersion: v1
kind: Pod
metadata:
 name: downward
spec:
 containers:
 - name: main
   image: busybox
   command: ["sleep", "99999999"]
   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
 - name: NODE_NAME
   valueFrom:
    fieldRef:
     fieldPath: spec.nodeName
 - name: SERVICE_NAME
   valueFrom:
    fieldRef:
     fieldPath: spec.nodeName
 - name: SERVICE_ACCOUNT
   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: limit.memory
     dinisor: 1Ki
# downward 포드의 환경 변수 확인
kubectl exec downward env

Downward API 볼륨

환경 변수 대신 파일을 통해 메타 데이터를 노출하려면 Downward API 볼륨을 사용해야 합니다.

포드의 라벨이나 주석을 표시하는 데는 Downward API 볼륨을 사용해야 합니다.

apiVersion: v1
kind: Pod
metadata:
 name: downward
 labels:
  foo: bar
 annotations:
  key1: value1
  key2: |
   multi
   line
   value
spec:
 containers:
 - name: main
   image: busybox
   command: ["sleep", "99999999"]
   resources:
    requests:
     cpu: 15m
     memory: 100Ki
    limits:
     cpu: 100m
     memory: 4Mi
 volumeMounts:
 - name: downward
   mountPath: /etc/downward
 volumes:
 - name: downdard
   downwardAPI:
    items:
    - path: "podName"
      fieldRef:
       fieldPath: metadata.name
    - path: "podNameSpace"
      fieldRef:
       fieldPath: metadata.namespace
    - path: "labels"
      fieldRef:
       fieldPath: metadata.labels
    - path: "annotations"
      fieldRef:
       fieldPath: metadata.annotations
    - path: "containerCpuRequestMilliCores"
      resourceFieldRef:
       cotainerName: main
       resource: requests.cpu
       dinisor: 1m
    - path: "containerMemoryLimitBytes"
      resourceFieldRef:
       cotainerName: main
       resource: limits.memory
       dinisor: 1