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 생성에 사용되는 각 파일 이름은 허용 가능한 문자만으로 구성돼야 해요. 문자(AZaz), 숫자(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.propertiesui.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.propertiesui.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 정의

이후 섹션의 자세한 예시는 원문을 참고하세요.

더 알아보기 (Learn more)