서론
쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 강력한 플랫폼입니다. 애플리케이션 설정과 비밀 정보를 효율적으로 관리하는 것은 쿠버네티스를 사용하는 데 있어 중요한 부분입니다. ConfigMap과 Secret은 이러한 설정과 비밀 정보를 관리하기 위해 쿠버네티스에서 제공하는 핵심 리소스입니다. 이번 포스팅에서는 ConfigMap과 Secret의 개념과 활용 방법을 초보자도 쉽게 이해할 수 있도록 자세히 설명합니다.
본론
ConfigMap의 개념과 활용
ConfigMap이란?
ConfigMap은 애플리케이션 설정 데이터를 키-값 쌍으로 저장하는 쿠버네티스 리소스입니다. 이를 통해 컨테이너 이미지에 설정 데이터를 포함시키지 않고도 애플리케이션의 설정을 외부에서 관리할 수 있습니다. ConfigMap은 환경 변수, 명령줄 인수 또는 구성 파일로 컨테이너에 전달될 수 있습니다.
ConfigMap 생성 방법
ConfigMap은 여러 가지 방법으로 생성할 수 있습니다. 여기서는 YAML 파일을 사용한 방법과 kubectl
명령어를 사용한 방법을 설명합니다.
YAML 파일을 사용한 ConfigMap 생성
다음은 ConfigMap을 생성하는 YAML 파일의 예시입니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
database_url: "mongodb://localhost:27017"
feature_enabled: "true"
이 YAML 파일을 사용하여 ConfigMap을 생성하려면 다음 명령어를 실행합니다.
kubectl apply -f my-config.yaml
kubectl 명령어를 사용한 ConfigMap 생성
kubectl
명령어를 사용하여 ConfigMap을 생성할 수도 있습니다.
kubectl create configmap my-config --from-literal=database_url=mongodb://localhost:27017 --from-literal=feature_enabled=true
ConfigMap 사용 방법
ConfigMap은 여러 가지 방법으로 컨테이너에 전달될 수 있습니다. 여기서는 환경 변수로 전달하는 방법과 볼륨으로 마운트하는 방법을 설명합니다.
환경 변수로 ConfigMap 사용
다음은 ConfigMap을 환경 변수로 전달하는 파드의 YAML 파일 예시입니다.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
env:
- name: DATABASE_URL
valueFrom:
configMapKeyRef:
name: my-config
key: database_url
- name: FEATURE_ENABLED
valueFrom:
configMapKeyRef:
name: my-config
key: feature_enabled
이 YAML 파일을 사용하여 파드를 생성하면, DATABASE_URL
과 FEATURE_ENABLED
환경 변수가 ConfigMap에서 가져온 값으로 설정됩니다.
볼륨으로 ConfigMap 사용
다음은 ConfigMap을 볼륨으로 마운트하는 파드의 YAML 파일 예시입니다.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: my-config
이 YAML 파일을 사용하여 파드를 생성하면, ConfigMap의 데이터가 /etc/config
디렉토리에 파일 형태로 마운트됩니다.
Secret의 개념과 활용
Secret이란?
Secret은 비밀 데이터를 저장하고 관리하는 쿠버네티스 리소스입니다. 비밀번호, API 키, 인증서 등 민감한 정보를 암호화하여 저장할 수 있습니다. Secret은 ConfigMap과 유사하게 환경 변수, 명령줄 인수 또는 구성 파일로 컨테이너에 전달될 수 있습니다.
Secret 생성 방법
Secret은 여러 가지 방법으로 생성할 수 있습니다. 여기서는 YAML 파일을 사용한 방법과 kubectl
명령어를 사용한 방법을 설명합니다.
YAML 파일을 사용한 Secret 생성
다음은 Secret을 생성하는 YAML 파일의 예시입니다.
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
password: cGFzc3dvcmQ= # "password"를 base64로 인코딩한 값
이 YAML 파일을 사용하여 Secret을 생성하려면 다음 명령어를 실행합니다.
kubectl apply -f my-secret.yaml
kubectl 명령어를 사용한 Secret 생성
kubectl
명령어를 사용하여 Secret을 생성할 수도 있습니다.
kubectl create secret generic my-secret --from-literal=password=password
위 명령어는 비밀번호를 base64로 자동 인코딩하여 Secret을 생성합니다.
Secret 사용 방법
Secret은 여러 가지 방법으로 컨테이너에 전달될 수 있습니다. 여기서는 환경 변수로 전달하는 방법과 볼륨으로 마운트하는 방법을 설명합니다.
환경 변수로 Secret 사용
다음은 Secret을 환경 변수로 전달하는 파드의 YAML 파일 예시입니다.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
env:
- name: PASSWORD
valueFrom:
secretKeyRef:
name: my-secret
key: password
이 YAML 파일을 사용하여 파드를 생성하면, PASSWORD
환경 변수가 Secret에서 가져온 값으로 설정됩니다.
볼륨으로 Secret 사용
다음은 Secret을 볼륨으로 마운트하는 파드의 YAML 파일 예시입니다.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
volumeMounts:
- name: secret-volume
mountPath: /etc/secret
volumes:
- name: secret-volume
secret:
secretName: my-secret
이 YAML 파일을 사용하여 파드를 생성하면, Secret의 데이터가 /etc/secret
디렉토리에 파일 형태로 마운트됩니다.
ConfigMap과 Secret 관리
ConfigMap 및 Secret 조회
현재 네임스페이스의 모든 ConfigMap과 Secret을 조회하려면 다음 명령어를 사용합니다.
kubectl get configmaps
kubectl get secrets
ConfigMap 및 Secret 상세 정보 조회
특정 ConfigMap과 Secret의 상세 정보를 조회하려면 다음 명령어를 사용합니다.
kubectl describe configmap my-config
kubectl describe secret my-secret
ConfigMap 및 Secret 삭제
특정 ConfigMap과 Secret을 삭제하려면 다음 명령어를 사용합니다.
kubectl delete configmap my-config
kubectl delete secret my-secret
실습: ConfigMap과 Secret을 사용한 애플리케이션 배포
이번 실습에서는 ConfigMap과 Secret을 사용하여 간단한 애플리케이션을 배포하는 과정을 진행합니다.
- ConfigMap 생성
다음 YAML 파일을 사용하여 ConfigMap을 생성합니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
database_url: "mongodb://db:27017"
feature_flag: "true"
kubectl apply -f app-config.yaml
- Secret 생성
다음 YAML 파일을 사용하여 Secret을 생성합니다.
apiVersion: v1
kind: Secret
metadata:
name: app-secret
type: Opaque
data:
db-password: cGFzc3dvcmQ= # "password"를 base64로 인코딩한 값
kubectl apply -f app-secret.yaml
- 애플리케이션 배포
다음 YAML 파일을 사용하여 애플리케이션 파드를 배포합니다.
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: app-container
image: my-app-image
env:
- name: DATABASE_URL
valueFrom:
configMapKeyRef:
name: app-config
key: database_url
- name: FEATURE_FLAG
valueFrom:
configMapKeyRef:
name: app-config
key: feature_flag
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: app-secret
key: db-password
kubectl apply -f my-app.yaml
이렇게 하면 애플리케이션 파드는 ConfigMap과 Secret에서 필요한 설정과 비밀 정보를 가져와 환경 변수를 설정하게 됩니다.
결론
ConfigMap과 Secret은 쿠버네티스에서 애플리케이션 설정과 비밀 정보를 관리하는 중요한 리소스입니다. ConfigMap은 설정 데이터를, Secret은 비밀 데이터를 안전하게 저장하고 관리할 수 있습니다. 이번 포스팅에서는 ConfigMap과 Secret의 개념, 생성 방법, 사용 방법을 상세히 설명했습니다. 이를 통해 쿠버네티스에서 애플리케이션을 배포할 때 ConfigMap과 Secret을 효과적으로 활용할 수 있기를 바랍니다.