본문 바로가기

Infrastructure/Kubernetes

[Pod] 다운워드(Downward) API

다운워드(Downward) API

쿠버네티스 공식문서를 확인하며 다운워드 API에 대해서 기억해야 하는 부분을 기록한다.

  • 컨테이너가 쿠버네티스에 지나치게 종속되지 않으면서도 자기 자신에 대한 정보를 알고 있으면 유용할 때가 있다.
  • 다운워드 API는 컨테이너가 자기 자신 혹은 클러스터에 대한 정보를 쿠버네티스 클라이언트나 API 서버 없이도 사용할 수 있게 한다.
  • 잘 알려진 특정 환경 변수에다가 고유한 식별자를 넣어 사용하는 애플리케이션이 있을 때, 해당 애플리케이션에 맞게 작업할 수도 있겠지만 이러한 방식은 오류가 나기 쉽고 결합력이 높아지게 된다.
  • 위에서 말한 방법 대신 파드의 이름을 식별자로 사용하고 잘 알려진 환경 변수에 파드의 이름을 넣는 것도 좋은 방식이다.
  • 쿠버네티스를 실행 중인 컨테이너에 파드 및 컨테이너 필드를 노출하기 위한 두 가지 방법이 있다.
    • 환경 변수
    • 볼륨 파일
  • 파드 및 컨테이너 필드를 노출하는 두 가지 방법을 다운워드 API라고 한다.

[정리]

파드 및 컨테이너 필드를 노출하는 방법을 다운워드 API라고 한다. 컨테이너가 쿠버네티스에 지나치게 종속적이지 않으면서 자기 자신에 대한 정보를 알고 있으면 유용할 때가 있으며 다운워드 API를 사용하면 쿠버네티스 클라이언트나 API 서버 없이 자기 자신 또는 클러스터에 대한 정보를 얻을 수 있다.


사용 가능한 필드

  • 쿠버네티스 API 필드 중 일부만이 다운워드 API를 통해 접근이 가능하다.
  • 사용 가능한 파드 필드에 대한 정보는 fieldRef를 통해 넘겨줄 수 있다. API 레벨에서, 파드의 spec은 항상 하나 이상의 컨테이너를 정의한다.
  • 사용 가능한 필드에 대한 정보는 resourceFieldRef를 통해 넘겨줄 수 있다.

fieldRef를 통해 접근 가능한 정보

  • metadata.name: 파드의 이름
  • metadata.namespace: 파드가 속한 네임스페이스
  • metadata.uid: 파드의 고유 ID
  • metadata.annotations['<KEY>']: 파드의 애너테이션에서 에 해당하는 값
  • metadata.labels['<KEY>']: 파드의 레이블에서 에 해당하는 문자열
  • spec.serviceAccountName: 파드의 서비스 어카운트
  • spec.nodeName: 파드가 실행중인 노드 이름
  • status.hostIP: 파드가 할당된 노드의 기본 IP 주소
  • status.podIP: 파드의 기본 IP 주소로 일반적으로 IPv4 주소
  • 아래의 필드는 환경 변수가 아닌, 다운워드 API 볼륨의 fieldRef로만 접근 가능하다.
    • metadata.labels: 파드의 모든 레이블로, 한 줄마다 하나의 레이블을 갖는 형식을 취한다.
    • metadata.annotations: 파드의 모든 애너테이션으로, 한 줄마다 하나의 애너테이션을 갖는 형식을 취한다.

resourceFieldRef를 통해 접근 가능한 정보

  • 컨테이너 필드는 CPU와 메모리 같은 리소스에 대한 요청 및 제한 값을 제공한다.
  • resource: limits.cpu: 컨테이너의 CPU 제한
  • resource: request.cpu: 컨테이너의 CPU 요청
  • resource: limites.memory: 컨테이너의 메모리 제한
  • resource: requests.memory: 컨테이너의 메모리 요청
  • resource: limits.hugepages-*: 컨테이너의 hugepage 제한(DownwardAPIHugePages 기능 게이트가 활성화 된 경우)
  • resource: requests.hugepages-*: 컨테이너의 hugepage 제한(DownwardAPIHugePages 기능 게이트가 활성화 된 경우)
  • resource: limites.ephmeral-storage: 컨테이너의 임시 스토리지 제한
  • resource: requests.ephemeral-storage: 컨테이너의 임시 스토리지 요청

리소스 제한에 대한 참고 정보

  • 컨테이너의 CPU와 메모리 제한을 명시하지 않고 다운워드 API로 이 정보들을 제공하려고 하는 경우, kubelet은 기본적으로 노드의 할당 가능량에 기반하여 CPU와 메모리에 할당 가능한 최댓값을 노출시킨다.

[정리]

쿠버네티스 API 필드중 일부 필드만 다운워드 API로 접근이 가능하다. 만약 리소스를 제한하지 않고 다운워드 API로 이러한 정보를 제공하려고 하는 경우 kubelet은 할당 가능한 최대값을 노출시킨다.


참고 자료