포드가 시작된 후에 알수 있는 데이터, 즉 포드의 IP, 호스트 노드의 이름, 혹은 포드의 이름과 포드의 라벨과 주석과 같이 이미 다른 위치에 지정된 데이터 등을 Downward API를 통해 확인 할 수 있다.
ㅁ Downward API를 사용하여 확인 가능한 메타 데이터
ㅇ 포드의 이름
ㅇ 포드의 IP 주소
ㅇ 포드가 속한 네임스페이스
ㅇ 포드가 실행되고 있는 노드의 이름
ㅇ 포드가 실행 중인 서비스 계정의 이름
ㅇ 각 컨테이너에 대한 CPU 및 메모리 요청
ㅇ 각 컨테이너의 CPU 및 메모리 한계
ㅇ 포드의 라벨
ㅇ 포드의 주석
ㅁ 환경 변수를 통한 메타 데이터 노출
환경 변수를 통해 포드와 컨테이너의 메타 데이터를 컨테이너에 전달하는 방법
[downward-api-env.yaml]
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: 4Mi
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name # 절대 값을 지정하는 대신
- name: POD_NAMESPACE # 포드 매니페스트에서
valueFrom: # metadata.name 필드를 참조한다.
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:
resourceFeildRef: # 컨테이너의 CPU 및 메모리 요청 및 한계는
resource: requests.cpu # fieldRef 대신, resourceFieldRef를
divisor: 1m # 사용해 참조된다.
- name: CONTAINER_MEMORY_LIMIT_KIBIBYTES # 리소스 필드의 경우 필요한 단위로 값을
valueFrom: # 가져오는 약수르 정의한다.
resourceFieldRef:
resource: limits.memory
divisor: 1Ki
프로세스가 실행되면 포드 스펙에서 정의한 모든 환경 변수를 조회할 수 있다.
아래와 같은 명령어를 사용한다.
$ kubectl exec downard env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=downward
CONTAINER_MEMORY_LIMIT_KIBIB"YTES=4096
POD_NAME=downward
POD_NAMESPACE=default
POD_IP=10.0.0.10
NODE_NAME=gke-kubia-default-pool-32a2acs89-fdf
SERVICE_ACCOUNT=default
CONTAIONER_CPU_REQUEST_MILLICORES=15
KUBERNETES_SERVICE_HOST=10.3.240.1
KUBERNETES_SERVICE_PORT=443
...
ㅁ Downward API 볼륨 내의 파일을 통한 메타 데이터 전달
환경 변수 대신 파일을 통해 메타 데이터를 노출하려면 Downward API 볼륨을 정의하고 컨테이너에 마운트
포드의 라벨이나 주석을 표시하는 데는 Downard API 볼륨을 사용해야 함
[downwardAPI 볼륨을 가진 포드: downward-api-volume.yaml]
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: 4Mi
volumeMounts:
- name: downward
mountPath: /etc/downward
volumes:
- name: downward
downwardAPI:
items:
- path: "podName"
fieldRef:
filedPath: metadata.name
- path: "podNamespace"
fieldRef:
filedPath: metadata.namespace
- path: "labels"
fieldRef:
filedPath: metadata.labels
- path: "annotations"
fieldRef:
filedPath: metadata.annotations
- path: "containerCpuRequestMilliCores"
resourceFieldRef:
containerName: main
resource: requests.cpu
division: 1m
- path: "containerMemoryLimitBytes"
resourceFieldRef:
containerName: main
resource: limits.memory
division: 1
환경 변수를 이용해 메타 데이터를 전달하는대신, downward로 불려지는 볼륨을 정의하고 /etc/downward 하위의 컨테이너에 마운트함.
[마운트된 downwardAPI 볼륨내의 파일 확인 방법]
$ kubectl exec downward ls -lL /etc/downward
-rw-r--r-- 1 root root 134 June 22 10:23 annotations
-rw-r--r-- 1 root root 2 June 22 10:23 containerCpuRequestMilliCores
-rw-r--r-- 1 root root 7 June 22 10:23 containerMemoryLimitBytes
-rw-r--r-- 1 root root 9 June 22 10:23 labels
-rw-r--r-- 1 root root 8 June 22 10:23 pod
-rw-r--r-- 1 root root 7 June 22 10:23 podNamespace
[downwardAPI 볼륨에서 라벨과 주석 표시하기]
$ kubectl exec downward cat /etc/downward/labels
foo="bar"
$ kubectl exec downward cat /etc/downward/annotations
key1="value1"
key2="multi\nline\nvalue\n"
kubernetes.io/config/seen="2017-11-29T13:32:26.89792304Z"
kubernetes.io/config.source="api"
'Kubenetes > Kubernetes API' 카테고리의 다른 글
Kubernetes API 서버와 통신 (0) | 2021.02.12 |
---|