본문 바로가기
INFRA/DevOps

ConfigMap

by BTC_룰루랄라 2022. 8. 21.

반갑습니다!

💙베하💙 누구든 탑승할 수 있는 유임승차 팀의 BTC 룰루랄라 입니다!!💨😉

 

저번 포스팅은 쿠버네티스 기능 중 하나인 volume에 대해서 설명 드렸는데요~

이번 포스팅에서는 Kubernetes의 ConfigMap에 대해서 살펴보겠습니다.

 

그럼 시작해 보겠습니다!

룰루랄라~♬

 

 

 

⚡️ 목표

쿠버네티스에서 설정파일과 환경변수를 관리하는 방법을 알아봅니다.

컨테이너에서 설정 파일을 관리하는 방법은 이미지를 빌드할 때 복사하거나, 컨테이너를 실행할 때 외부 파일을 연결하는 방법이 있습니다. 쿠버네티스는 ConfigMap으로 설정을 관리합니다.

#ConfigMap 만들기

파일을 통째로 ConfigMap으로 만든 다음 컨테이너에서 사용하는 방법을 알아봅니다.

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: prometheus
    metrics_path: /prometheus/metrics
    static_configs:
      - targets:
          - localhost:9090
 

먼저, ConfigMap을 만듭니다. --from-file 옵션을 이용하여 file을 설정으로 만듭니다.

# ConfitMap 생성 configmap -> cm
kubectl create cm my-config --from-file=config-file.yml

# ConfitMap 조회
kubectl get cm

# ConfigMap 내용 상세 조회
kubectl describe cm/my-config

생성한 ConfigMap을 /etc/config 디렉토리에 연결합니다.

apiVersion: v1
kind: Pod
metadata:
  name: alpine
spec:
  containers:
    - name: alpine
      image: alpine
      command: ["sleep"]
      args: ["100000"]
      volumeMounts:
        - name: config-vol
          mountPath: /etc/config
  volumes:
    - name: config-vol
      configMap:
        name: my-config
 

volume을 연결하여 배포하고 확인합니다.

kubectl apply -f alpine.yml

# 접속 후 설정 확인
kubectl exec -it alpine -- ls /etc/config
kubectl exec -it alpine -- cat /etc/config/config-file.yml

#env 파일로 만들기

env 포멧을 그대로 사용합니다.

hello=world
haha=hoho
 

env-config로 만듭니다.

# env 포멧으로 생성
kubectl create cm env-config --from-env-file=config-env.yml

# env-config 조회
kubectl describe cm/env-config

#YAML 선언하기

ConfigMap을 YAML파일로 정의합니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  hello: world
  kuber: netes
  multiline: |-
    first
    second
    third
 

config-map.yml 적용 후 마운트 된 내용을 확인합니다.

# 기존 configmap 삭제
kubectl delete cm/my-config

# configmap 생성
kubectl apply -f config-map.yml

# alpine 적용
kubectl apply -f alpine.yml

# 적용내용 확인
kubectl exec -it alpine -- cat /etc/config/multiline

#ConfigMap을 환경변수로 사용하기

ConfigMap을 volume이 아닌 환경변수로 설정합니다.

apiVersion: v1
kind: Pod
metadata:
  name: alpine-env
spec:
  containers:
    - name: alpine
      image: alpine
      command: ["sleep"]
      args: ["100000"]
      env:
        - name: hello
          valueFrom:
            configMapKeyRef:
              name: my-config
              key: hello
 

환경변수를 확인합니다.

kubectl apply -f alpine-env.yml

# env 확인
kubectl exec -it alpine-env -- env

#마무리

ConfigMap은 쿠버네티스에서 각종 설정을 관리하는 가장 좋은 방법입니다. 실제 운영에서 자주 접하게 되므로 어떻게 사용하는지 확실하게 익혀두세요

'INFRA > DevOps' 카테고리의 다른 글

[K8s] kubernetes namespace, yaml template  (0) 2022.08.25
Secret  (0) 2022.08.22
Volume(local)  (0) 2022.08.20
[K8s] kubernetes 동작 원리  (0) 2022.08.16
[k8s] kubernetes 설치 (containerd 사용)  (0) 2022.08.08

댓글