Downward API
Downward API
실행 중인 컨테이너에 Pod와 컨테이너 필드를 노출하는 두 가지 방법이 있어요: 환경 변수, 그리고 특수 볼륨 유형으로 채워지는 파일. 이 두 가지 방법을 합쳐 downward API라고 불러요.
컨테이너가 Kubernetes에 과도하게 결합(coupled)되지 않은 채 자신에 대한 정보를 갖는 것은 유용할 때가 있어요. downward API는 컨테이너가 Kubernetes 클라이언트나 API server를 사용하지 않고도 자신 또는 클러스터에 대한 정보를 소비하게 해줘요.
예를 들어 기존 애플리케이션이 특정 잘 알려진 환경 변수에 고유 식별자가 있다고 가정한다면, Pod의 이름을 식별자로 사용해 그 환경 변수에 주입할 수 있어요. 앱을 래핑하는 방법은 지루하고 오류가 나기 쉬우며 낮은 결합 목표를 위반하므로, downward API가 더 나은 선택이에요.
사용 가능한 필드
downward API를 통해 사용할 수 있는 Kubernetes API 필드는 일부뿐이에요.
- Pod 수준 필드의 정보는
fieldRef로 전달할 수 있어요. - 컨테이너 수준 필드의 정보는
resourceFieldRef로 전달할 수 있어요.
fieldRef로 사용 가능한 정보
Pod 수준 필드 중 환경 변수나 downwardAPI 볼륨 어느 쪽으로든 제공할 수 있는 필드:
metadata.name— Pod의 이름metadata.namespace— Pod의 네임스페이스metadata.uid— Pod의 고유 IDmetadata.annotations['<KEY>']— Pod의 annotation 값 (예:metadata.annotations['myannotation'])metadata.labels['<KEY>']— Pod의 라벨 텍스트 값 (예:metadata.labels['mylabel'])
환경 변수로는 사용 가능하지만 downwardAPI 볼륨 fieldRef로는 불가능한 정보:
spec.serviceAccountName— Pod의 서비스 계정 이름spec.nodeName— Pod가 실행되는 노드 이름status.hostIP— Pod가 할당된 노드의 주 IP 주소status.hostIPs—status.hostIP의 듀얼 스택 버전status.podIP— Pod의 주 IP 주소 (보통 IPv4)status.podIPs—status.podIP의 듀얼 스택 버전
downwardAPI 볼륨 fieldRef로는 사용 가능하지만 환경 변수로는 불가능한 정보:
metadata.labels— 모든 Pod 라벨,label-key="escaped-label-value"형식으로 라벨당 한 줄metadata.annotations— 모든 Pod annotations
downward API 볼륨
downwardAPI 볼륨 유형은 Pod와 컨테이너 필드를 파일로 컨테이너에 노출해요. 이 볼륨은 컨테이너가 Pod와 컨테이너 자신에 대한 정보를 읽을 수 있게 해요.
마운트 경로와 필드 선택
Pod 스펙에서 spec.containers[].volumeMounts로 downwardAPI 볼륨을 마운트하고, 볼륨 정의에서 items로 노출할 필드를 지정할 수 있어요.