Pod가 ConfigMap을 사용하도록 구성하기
Pod가 ConfigMap을 사용하도록 구성하기 (Configure a Pod to Use a ConfigMap)
많은 애플리케이션은 애플리케이션 초기화 또는 런타임 중에 사용되는 구성에 의존해요. 대부분 구성 파라미터에 할당된 값을 조정해야 하는 요구가 있어요. ConfigMap은 구성 데이터를 애플리케이션 파드에 주입할 수 있게 해주는 쿠버네티스 메커니즘이에요.
ConfigMap 개념을 사용하면 구성 아티팩트를 이미지 콘텐츠에서 분리해 컨테이너화된 애플리케이션을 이식 가능하게 유지할 수 있어요. 예를 들어 같은 컨테이너 이미지를 다운로드해 실행해 로컬 개발, 시스템 테스트, 또는 실제 최종 사용자 워크로드 실행을 위한 컨테이너를 띄울 수 있어요.
이 페이지는 ConfigMap을 만들고 ConfigMap에 저장된 데이터를 사용해 Pod를 구성하는 방법을 보여주는 일련의 사용 예시를 제공해요.
출처: 문서
본문
시작하기 전에 (Before you begin)
쿠버네티스 클러스터가 필요하고, kubectl 명령줄 도구가 클러스터와 통신하도록 구성돼 있어야 해요. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 두 개 이상 있는 클러스터에서 실행하는 것을 권장해요. 아직 클러스터가 없다면 minikube로 만들거나 다음 쿠버네티스 플레이그라운드 중 하나를 사용할 수 있어요.
- iximiuz Labs
- Killercoda
- KodeKloud
wget 도구가 설치돼 있어야 해요. curl 같은 다른 도구가 있고 wget이 없다면, 예시 데이터를 다운로드하는 단계를 맞춰 조정해야 해요.
ConfigMap 만들기 (Create a ConfigMap)
kubectl create configmap 또는 kustomization.yaml의 ConfigMap 생성기를 사용해 ConfigMap을 만들 수 있어요.
kubectl create configmap으로 ConfigMap 만들기 (Create a ConfigMap using kubectl create configmap)
kubectl create configmap 명령을 사용해 디렉토리, 파일, 또는 리터럴 값에서 ConfigMap을 만들어요.
kubectl create configmap <map-name> <data-source>
여기서 <map-name>은 ConfigMap에 할당하려는 이름이고 <data-source>는 데이터를 가져올 디렉토리, 파일, 또는 리터럴 값이에요. ConfigMap 객체의 이름은 유효한 DNS 서브도메인 이름이어야 해요.
파일을 기반으로 ConfigMap을 만들 때, <data-source>의 키는 기본적으로 파일의 기본 이름(basename)이고 값은 기본적으로 파일 콘텐츠예요.
kubectl describe 또는 kubectl get을 사용해 ConfigMap에 대한 정보를 가져올 수 있어요.
디렉토리에서 ConfigMap 만들기 (Create a ConfigMap from a directory)
kubectl create configmap을 사용해 같은 디렉토리의 여러 파일에서 ConfigMap을 만들 수 있어요. 디렉토리를 기반으로 ConfigMap을 만들 때, kubectl은 파일 이름이 디렉토리에서 유효한 키인 파일을 식별하고 그 각각의 파일을 새 ConfigMap으로 패키징해요. 일반 파일이 아닌 디렉토리 항목은 모두 무시돼요(예: 서브디렉토리, 심볼릭 링크, 디바이스, 파이프 등).
참고: ConfigMap 생성에 사용되는 각 파일 이름은 허용 가능한 문자만으로 구성돼야 해요. 문자(
AZ및az), 숫자(0~9),-,_,.이 그것이에요. 허용되지 않는 문자가 포함된 파일 이름이 있는 디렉토리로kubectl create configmap을 사용하면kubectl명령이 실패할 수 있어요.kubectl명령은 잘못된 파일 이름을 만나면 오류를 출력하지 않아요.
로컬 디렉토리를 만들어요.
mkdir -p configure-pod-container/configmap/
이제 샘플 구성을 다운로드하고 ConfigMap을 만들어요.
# Download the sample files into `configure-pod-container/configmap/` directory
wget https://kubernetes.io/examples/configmap/game.properties -O configure-pod-container/configmap/game.properties
wget https://kubernetes.io/examples/configmap/ui.properties -O configure-pod-container/configmap/ui.properties
# Create the ConfigMap
kubectl create configmap game-config --from-file=configure-pod-container/configmap/
위 명령은 configure-pod-container/configmap/ 디렉토리의 각 파일, 이 경우 game.properties와 ui.properties를 game-config ConfigMap으로 패키징해요. 다음 명령으로 ConfigMap의 세부 정보를 표시할 수 있어요.
kubectl describe configmaps game-config
출력은 다음과 비슷해요.
Name: game-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
game.properties:
----
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
ui.properties:
----
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice
configure-pod-container/configmap/ 디렉토리의 game.properties와 ui.properties 파일은 ConfigMap의 data 섹션에 표현돼요.
kubectl get configmaps game-config -o yaml
출력은 다음과 비슷해요.
apiVersion: v1
kind: ConfigMap
metadata:
creationTimestamp: 2022-02-18T18:52:05Z
name: game-config
namespace: default
resourceVersion: "516"
uid: b4952dc3-d670-11e5-8cd0-68f728db1985
data:
game.properties: |
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
ui.properties: |
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice
파일에서 ConfigMap 만들기 (Create ConfigMaps from files)
kubectl create configmap을 사용해 개별 파일 또는 여러 파일에서 ConfigMap을 만들 수 있어요.
예를 들어,
kubectl create configmap game-config-2 --from-file=configure-pod-container/configmap/game.properties
는 다음 ConfigMap을 만들 거예요.
kubectl describe configmaps game-config-2
출력은 다음과 비슷해요.
Name: game-config-2
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
game.properties:
----
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
여러 데이터 소스에서 ConfigMap을 만들려면 --from-file 인자를 여러 번 전달할 수 있어요.
kubectl create configmap game-config-2 --from-file=configure-pod-container/configmap/game.properties --from-file=configure-pod-container/configmap/ui.properties
다음 명령으로 game-config-2 ConfigMap의 세부 정보를 표시할 수 있어요.
kubectl describe configmaps game-config-2
출력은 다음과 비슷해요.
Name: game-config-2
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
game.properties:
----
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
ui.properties:
----
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice
리터럴 값에서 ConfigMap 만들기 (Create ConfigMaps from literal values)
--from-literal 인자를 사용해 리터럴 값에서 ConfigMap을 만들 수도 있어요.
kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=charm
여러 키-값 쌍을 전달할 수 있어요. 각 쌍은 결과 ConfigMap의 data 섹션에 별도 항목으로 추가돼요.
(계속) 다음 단계에서 ConfigMap의 일부로 소비:
- ConfigMap으로 정의된 값을 컨테이너의 환경 변수로 정의하기
- ConfigMap의 모든 키-값 쌍을 컨테이너 환경 변수로 구성하기
- 파드의 명령에서 ConfigMap 정의 환경 변수 사용하기
- ConfigMap의 값을 컨테이너에 볼륨으로 추가하기
- ConfigMap 데이터로 볼륨 마운트
- 조건부 동작을 위해 key의 하위 경로에 ConfigMap 정의
이후 섹션의 자세한 예시는 원문을 참고하세요.