쿠버네티스/이론

쿠버네티스 Downward API 란?

황동리 2024. 11. 28. 14:09
반응형

Downward API 란?

애플리케이션이 쿠버네티스 리소스에 대한 메타데이터 및 상태 정보를

액세스할 수 있도록 지원하는 기능입니다.

이를 통해 애플리케이션이 쿠버네티스 환경에서 동적으로 설정을 수정하거나,

Pod 및 컨테이너의 상태를 확인할 수 있습니다.

 

즉, Downward API는 애플리케이션이 쿠버네티스 환경의 메타데이터나, 리소스

정보를 동적으로 활용해야할 때 주로 사용됩니다.

 

Downward API를 사용하여 POD에 전달 할 수 있는 메타 데이터 종류는 아래와 같습니다.

  • 파드의 이름
  • 파드의 IP 주소
  • 파드가 속한 네임스페이스
  • 파드가 실행 중인 노드의 이름
  • 파드가 실행 중인 서비스 어카운트 이름
  • 각 컨테이너의 CPU와 메모리 요청
  • 각 컨테이너의 CPU와 메모리 제한
  • 파드의 레이블
  • 파드의 어노테이션

 


 

실습을 통해 좀 더 자세히 알아보도록 하겠습니다.

 

우선 아래와 같은 내용으로 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: 32Mi
    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_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: limits.memory
          divisor: 1Ki
  • spec.env에서 metadata.name, status.podIP, spec.nodeName 과 같이
    fieldPath에 적은 내용은 POD가 생성 되면서 생기는 정보들을
    환경 변수로 사용하겠다고 하는 의미 입니다.

그래서 실제로 POD내 컨테이너의 환경변수를 확인해보면,
아래 이미지와 같습니다.

# kubectl exec -it downward -- env

 

 

이제 downwardAPI 볼륨에 파일로 메타데이터를 전달 해보도록 하겠습니다.

 

아래의 Yaml 파일로 POD를 생성 해줍니다.

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", "9999999"]
    resources:
      requests:
        cpu: 15m
        memory: 100Ki
      limits:
        cpu: 100m
        memory: 32Mi
    volumeMounts:
    - name: downward
      mountPath: /etc/downward
  volumes:
  - name: downward
    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:
          containerName: main
          resource: requests.cpu
          divisor: 1m
      - path: "containerMemoryLimitBytes"
        resourceFieldRef:
          containerName: main
          resource: limits.memory
          divisor: 1
  • 위 yaml 파일의 내용대로 POD를 생성하면,

spec.containers.volumeMounts.mountPath 부분에 있는 /etc/downward 

환경 변수 값들이 존재하게 됩니다.

POD에 접속하여 확인해보도록 하겠습니다.

# kubectl exec -it downward -- /bin/sh
=> downward POD에 접속 후
/ # cd /etc/downward

아래 이미지와 같이 환경변수 파일이 있는 곳 까지
링크로 걸려있는 것을 확인 할 수 있습니다.

 

 

이상 입니다.

반응형