컨피그 & 스토리지 API 카테고리
설정/기밀 정보/영구 볼륨 등에 관련된 리소스
- 시크릿
- 컨피그맵
- 영구 볼륨 클레임
컨테이너에 대해 설정 파일, 패스워드 같은 기밀 정보 등을 추가하거나 영구 볼륨을 제공하기 위한 리소스다.
내부에서 사용되는 것을 제외하고 사용자가 직접 사용하는 것으로 세 가지 종류의 컨피그 & 스토리지 리소스가 있따.
환경 변수 사용
쿠버네티스에서 개별 컨테이너의 설정 내용은 환경 변수나 파일이 저장되어 있는 영역을 마운트하여 전달하는 것이 일반적이다.
쿠버네티스에서 환경 변수를 전달할 때 파드 템플릿에 env 또는 envForm을 지정한다.
다음과 같이, 크게 나눠 다섯 가지 정보를 환경 변수에 포함시킬 수 있다.
- 정책 설정
- 파드 정보
- 컨테이너 정보
- 시크릿 리소스 기밀 정보
- 컨피그맵 리소스 설정값
정적 설정
spec.containers[].env 에 정적인 값을 설정한다.
apiVersion: v1
kind: Pod
metadata:
name: sample-env
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: nginx:1.16
env:
- name: MAX_CONNECTION
value: "100"
# sample-env 파드의 환경 변수 'MAX_CONNECTION' 확인
$ kubectl exec -it sample-env -- env | grep MAX_CONNECTION
MAX_CONNECTION=100
기동한 컨테이너의 타임존은 기본값으로 UTC로 설정되어 있다. 타임존을 변경하는 가장 쉬운 방법은 환경 변수를 사용하는 것이다.
# 타임 존 설정
env:
- name: TZ
value: Asia/Seoul
파드 정보
어떤 노드에서 파드가 기동하고 있는지와 파드 자신의 IP 주소, 기동 시간 등 파드에 관한 정보는 fieldRef를 사용하면 참조할 수 있다.
apiVersion:
kind: Pod
metadata:
spec:
containers:
- name:
image:
env:
- name: K8S_NODE
valueFrom:
fieldRef:
fieldPath: spec.nodeName
# 파드가 기동 중인 노드 확인
$ kubectl get pods -o wide sample-env-pod
NAME READY STATUS RESTARTS AGE IP NODE
sample-env-pod 1/1 Running 0 4s 10.0.1.51 gke-k8s-default-pool-be72
# sample-env 파드의 환경 변수 'K8S_NODE' 확인
$ kubectl exec -it sample-env -- env | grep K8S_NODE
K8S_NODE=gke-k8s-default-pool-be72
컨테이너 정보
파드의 정보와 마찬가지로 컨테이너 리소스에 대한 정보는 resourceFieldRef를 사용하여 확인할 수 있다.
파드에는 여러 컨테이너 정보가 포함되어 있으므로 각 컨테이너 정보에 대해서는 fieldRef로 확인 불가능하다.
apiVersion: v1
kind: Pod
metadata:
name: sample-env-container
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: nginx:1.16
env:
- name: CPU_REQUESTS
valueFrom:
resourceFieldRef:
containerName: nginx-container
resource: requests.cpu
- name: CPU_LIMITS
valueFrom:
resourceFieldRef:
containerName: nginx-container
resource: limits.cpu
컨테이너에 할당된 CPU 리소스의 최솟값과 최댓값을 CPU_REQUESTS와 CPU_LIMITS 환경 변수로 등록해보자.
# sample-env-container 파드에 지정한 CPU_REQUESTS와 CPU_LIMITS 환경 변수 확인
$ kubectl exec -it sample-env-container -- env | grep CPU
CPU_REQUESTS=0
CPU_LIMITS=4
환경 변수 설정에 실패한 예제
apiVersion: v1
kind: Pod
metadata:
name: sample-env-fail
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: nginx:1.16
command: ["echo"]
args: ["$(TESTENV)", "$(HOSTNAME)"]
env:
- name: TESTENV
value: "100"
위의 파드를 실행하면 실패하면 환경 변수가 제대로 설정되지 않는다.
# 일부 환경 변수가 설정되지 않음
$ kubectl logs sample-env-fail-2
100 $(HOSTNAME)
command나 arg로 실행하면 안된다.
'Kubernetes' 카테고리의 다른 글
ConfigMap(컨피그맵) (0) | 2024.02.20 |
---|---|
Secret(시크릿) (1) | 2024.02.19 |
서비스 API 카테고리 정리 (0) | 2024.02.18 |
Ingress(인그레스) (0) | 2024.02.17 |
None-Selector 서비스 (0) | 2024.02.17 |