Search

[K8S] Downward API를 사용해보자

PublishDate
2023/04/28
Category
Kubernetes
Tag & Keyword
Downward API

1. 서론

쿠버네티스(Kubernetes)를 사용하면서 컨테이너가 자신에 대한 정보를 알고 있으면 유용한 경우가 있다. 컨테이너가 쿠버네티스에 지나치게 종속되지 않고도 자신의 정보를 사용할 수 있도록 Kubernetes는 Downward API를 제공한다.
이번 글에서 Downward API가 무엇인지와 사용 방법을 예시와 함께 알아보자.

2. Downward API란?

Downward API는 컨테이너가 자기 자신 혹은 클러스터에 대한 정보를, Kubernetes 클라이언트나 API 서버 없이도 사용할 수 있게 해준다. 이를 통해 컨테이너는 Pod의 이름, IP 주소, 레이블과 같은 정보를 얻을 수 있다.
Downward API는 다양한 방법을 통해 Pod에 대한 정보를 제공한다. 이를 통해 컨테이너는 Pod 내부에서 자신이 위치한 환경을 이해하고, 이에 맞게 동작할 수 있다.
공식 Document를 참고하면 사용 가능한 모든 Downward API의 종류를 확인할 수 있다.

3. Downward API 사용 방법

Downward API를 사용해서 Pod에게 IP를 전달하기 위해서는 Pod의 스펙(Spec)에 필드를 추가해야 한다.
예를 들어, Nginx Pod의 IP를 Nginx 기본 페이지에 출력하려면 다음과 같은 방법을 사용한다.
1.
Downward API를 사용하는 Deployment 파일 작성 test-downwardapi.yaml 파일 생성
# test-downwardapi.yaml apiVersion: apps/v1 kind: Deployment metadata: name: test-downwardapi spec: selector: matchLabels: app: nginx replicas: 1 # Pod 개수 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 readinessProbe: httpGet: path: / port: 80 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: httpGet: path: / port: 80 initialDelaySeconds: 15 periodSeconds: 20 env: - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP # 이부분이 Downward API 를 사용하는 것이다. command: ["/bin/sh"] # args 부분이 Downward API를 Application에서 사용하는 것이다. args: ["-c", "echo $POD_IP test > /usr/share/nginx/html/index.html && nginx -g 'daemon off;'"]
YAML
복사
2.
Deployment 배포하기
kubectl apply -f test-downwardapi.yaml kubectl get pod -o wide
Plain Text
복사
3.
결과 테스트해보기
동일 network에서 curl 명령어로 pod에 직접 http call을 했을 때, 의도한 것과 같이 10.4.140.19 test를 return 하는 것을 볼 수 있다.
microk8s, minikube와 같은 엔진을 Local PC에서 사용 중이라면 localhost:80 을 호출하는 것으로도 확인할 수 있을 것이다.

4. 결론

이번 글에서는 Downward API가 무엇인지와 사용 방법에 대해 알아봤다. Downward API를 사용하면 컨테이너가 Pod 내부에서 자신의 정보를 사용할 수 있게 되어, 컨테이너와 Pod 간의 종속성을 최소화할 수 있다. 이를 통해 더욱 유연하게 애플리케이션을 구축할 수 있을 것이다.