Kubernetes

컨피그 & 스토리지 API 카테고리

jih0ssang 2024. 2. 18. 13:46

컨피그 & 스토리지 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