9장. 애플리케이션과 함께 구성 맵 사용


구성 맵을 사용하면 이미지 콘텐츠에서 구성 아티팩트를 분리하여 컨테이너화된 애플리케이션을 이식할 수 있습니다.

다음 섹션에서는 구성 맵을 정의하고, 구성 맵을 생성 및 사용하는 방법을 설명하고, Pod에서 ConfigMap 오브젝트를 사용하는 사용 사례를 설명합니다.

9.1. 구성 맵 이해

다음 섹션을 검토하여 구성 맵을 사용하여 애플리케이션 코드와 별도로 Pod에 구성 값을 사용할 수 있도록 하는 방법을 확인할 수 있습니다.

많은 애플리케이션에는 구성 파일, 명령줄 인수 및 환경 변수의 조합을 사용하여 구성이 필요합니다. OpenShift Container Platform에서 컨테이너화된 애플리케이션을 이식하기 위해 이러한 구성 아티팩트는 이미지 콘텐츠와 분리됩니다.

ConfigMap 오브젝트는 컨테이너를 OpenShift Container Platform과 무관하게 유지하면서 구성 데이터를 사용하여 컨테이너를 삽입하는 메커니즘을 제공합니다. 구성 맵은 개별 속성 또는 전체 구성 파일 또는 JSON Blob과 같은 세분화된 정보를 저장하는 데 사용할 수 있습니다.

ConfigMap 오브젝트에는 Pod에서 사용하거나 컨트롤러와 같은 시스템 구성 요소의 구성 데이터를 저장하는 데 사용할 수 있는 구성 데이터의 키-값 쌍이 있습니다. 예를 들면 다음과 같습니다.

ConfigMap 오브젝트 정의

kind: ConfigMap
apiVersion: v1
metadata:
  creationTimestamp: 2016-02-18T19:14:38Z
  name: example-config
  namespace: my-namespace
data:
  example.property.1: hello
  example.property.2: world
  example.property.file: |-
    property.1=value-1
    property.2=value-2
    property.3=value-3
binaryData:
  bar: L3Jvb3QvMTAw

다음과 같습니다.

data
구성 데이터를 지정합니다.
binaryData.bar
UTF8이 아닌 데이터를 포함하는 파일을 지정합니다(예: 바이너리 Java 키 저장소 파일). Base 64에 파일 데이터를 입력합니다.
참고

이미지와 같은 바이너리 파일에서 구성 맵을 생성할 때 binaryData 필드를 사용할 수 있습니다.

다양한 방법으로 Pod에서 구성 데이터를 사용할 수 있습니다. 구성 맵을 다음과 같이 사용할 수 있습니다.

  • 컨테이너에서 환경 변수 값 채우기
  • 컨테이너에서 명령줄 인수 설정
  • 볼륨에 구성 파일 채우기

사용자 및 시스템 구성 요소는 구성 데이터를 구성 맵에 저장할 수 있습니다.

구성 맵은 보안과 유사하지만 민감한 정보가 포함되지 않은 문자열 작업을 더 편리하게 지원하도록 설계되었습니다.

9.1.1. 구성 맵 제한 사항

Pod에서 콘텐츠를 사용하기 전에 구성 맵을 생성해야 합니다.

컨트롤러는 누락된 구성 데이터를 허용하도록 작성할 수 있습니다. 상황에 따라 구성 맵을 사용하여 구성된 개별 구성 요소를 참조하십시오.

ConfigMap 오브젝트는 프로젝트에 있습니다.

동일한 프로젝트의 Pod에서만 참조할 수 있습니다.

Kubelet은 API 서버에서 가져오는 Pod에 대한 구성 맵만 지원합니다.

여기에는 CLI를 사용하거나 복제 컨트롤러에서 간접적으로 생성되는 모든 Pod가 포함됩니다. OpenShift Container Platform 노드의 --manifest-url 플래그, --config 플래그 또는 해당 REST API를 사용하여 생성한 Pod를 포함하지 않으며 이는 Pod를 생성하는 일반적인 방법이 아니기 때문입니다.

9.1.2. 구성 맵을 사용하여 컨테이너에서 환경 변수 채우기

구성 맵을 사용하여 컨테이너에서 개별 환경 변수를 채우거나 유효한 환경 변수 이름을 형성하는 모든 키에서 컨테이너의 환경 변수를 채울 수 있습니다.

다음 예제 ConfigMap CR(사용자 정의 리소스)에는 두 가지 환경 변수가 포함되어 있습니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: very
  special.type: charm

다음과 같습니다.

metadata.name
구성 맵의 이름을 지정합니다.
metadata.namespace
구성 맵이 있는 프로젝트를 지정합니다. 구성 맵은 동일한 프로젝트의 Pod에서만 참조할 수 있습니다.
data
삽입할 환경 변수를 지정합니다.

다음 예제 ConfigMap (CR)에는 하나의 환경 변수가 포함되어 있습니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: env-config
  namespace: default
data:
  log_level: INFO

다음과 같습니다.

metadata.name
구성 맵의 이름을 지정합니다.
metadata.namespace
구성 맵이 있는 프로젝트를 지정합니다. 구성 맵은 동일한 프로젝트의 Pod에서만 참조할 수 있습니다.
data
삽입할 환경 변수를 지정합니다.

프로세스

  • configMapKeyRef 섹션을 사용하여 Pod에서 이 ConfigMap의 키를 사용할 수 있습니다.

    특정 환경 변수를 삽입하도록 구성된 샘플 Pod 사양

    apiVersion: v1
    kind: Pod
    metadata:
      name: dapi-test-pod
    spec:
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: test-container
          image: gcr.io/google_containers/busybox
          command: [ "/bin/sh", "-c", "env" ]
          env:
            - name: SPECIAL_LEVEL_KEY
              valueFrom:
                configMapKeyRef:
                  name: special-config
                  key: special.how
            - name: SPECIAL_TYPE_KEY
              valueFrom:
                configMapKeyRef:
                  name: special-config
                  key: special.type
                  optional: true
          envFrom:
            - configMapRef:
                name: env-config
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop: [ALL]
      restartPolicy: Never

    다음과 같습니다.

    spec.containers.env
    구성 맵에서 가져올 환경 변수를 지정합니다.
    spec.containers.env.name
    키 값을 삽입하는 pod 환경 변수의 이름을 지정합니다.
    spec.containers.env.valueFrom.configMapKeyRef.name
    특정 환경 변수를 가져올 구성 맵의 이름을 지정합니다.
    spec.containers.env.valueFrom.configMapKeyRef.key
    구성 맵에서 가져올 환경 변수를 지정합니다.
    spec.containers.env.valueFrom.configMapKeyRef.optional
    환경 변수가 선택 사항임을 지정합니다. 선택 사항으로 지정된 구성 맵 및 키가 없는 경우에도 Pod가 시작됩니다.
    spec.containers.envFrom.configMapRef
    모든 환경 변수를 가져올 구성 맵의 이름을 지정합니다.

    이 Pod가 실행되면 Pod 로그에 다음 출력이 포함됩니다.

    SPECIAL_LEVEL_KEY=very
    log_level=INFO
    참고

    SPECIAL_TYPE_KEY=charm은 예제 출력에 나열되지 않습니다. optional: true가 설정되어 있기 때문입니다.

9.1.3. 구성 맵을 사용하여 컨테이너 명령의 명령줄 인수 설정

구성 맵을 사용하여 Kubernetes 대체 구문 $(VAR_NAME) 을 사용하여 컨테이너에서 명령 또는 인수 값을 설정할 수 있습니다.

예를 들어 다음 구성 맵을 고려하십시오.

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: very
  special.type: charm

프로세스

  • 컨테이너의 명령에 값을 삽입하려면 환경 변수로 사용할 키를 사용해야 합니다. 그런 다음 $(VAR_NAME) 구문을 사용하여 컨테이너의 명령에서 참조할 수 있습니다.

    특정 환경 변수를 삽입하도록 구성된 샘플 Pod 사양

    apiVersion: v1
    kind: Pod
    metadata:
      name: dapi-test-pod
    spec:
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: test-container
          image: gcr.io/google_containers/busybox
          command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]
          env:
            - name: SPECIAL_LEVEL_KEY
              valueFrom:
                configMapKeyRef:
                  name: special-config
                  key: special.how
            - name: SPECIAL_TYPE_KEY
              valueFrom:
                configMapKeyRef:
                  name: special-config
                  key: special.type
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop: [ALL]
      restartPolicy: Never

    다음과 같습니다.

    spec.containers.command
    환경 변수로 사용할 키를 사용하여 컨테이너에서 명령에 삽입할 값을 지정합니다.

    이 Pod가 실행되면 test-container 컨테이너에서 실행되는 echo 명령의 출력은 다음과 같습니다.

    very charm

9.1.4. 구성 맵을 사용하여 볼륨에 콘텐츠 삽입

구성 맵을 사용하여 콘텐츠를 볼륨에 삽입할 수 있습니다.

다음 예제 ConfigMap CR(사용자 정의 리소스)에는 두 가지 환경 변수가 포함되어 있습니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: very
  special.type: charm

다음 절차에서는 구성 맵을 사용하여 볼륨에 콘텐츠를 삽입하는 옵션을 설명합니다.

프로세스

  • 구성 맵을 사용하여 콘텐츠를 볼륨에 삽입하는 가장 기본적인 방법은 키가 파일 이름이고 파일의 콘텐츠가 키의 값인 파일로 볼륨을 채우는 것입니다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: dapi-test-pod
    spec:
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: test-container
          image: gcr.io/google_containers/busybox
          command: [ "/bin/sh", "-c", "cat", "/etc/config/special.how" ]
          volumeMounts:
          - name: config-volume
            mountPath: /etc/config
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop: [ALL]
      volumes:
        - name: config-volume
          configMap:
            name: special-config
      restartPolicy: Never

    다음과 같습니다.

    spec.volumes.configMap.name

    키가 포함된 파일을 지정합니다.

    이 Pod가 실행되면 cat 명령의 출력은 다음과 같습니다.

    very
  • 구성 맵 키가 프로젝션된 볼륨 내의 경로를 제어할 수도 있습니다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: dapi-test-pod
    spec:
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: test-container
          image: gcr.io/google_containers/busybox
          command: [ "/bin/sh", "-c", "cat", "/etc/config/path/to/special-key" ]
          volumeMounts:
          - name: config-volume
            mountPath: /etc/config
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop: [ALL]
      volumes:
        - name: config-volume
          configMap:
            name: special-config
            items:
            - key: special.how
              path: path/to/special-key
      restartPolicy: Never

    다음과 같습니다.

    spec.volumes.configMap.items.path
    구성 맵 키의 경로를 지정합니다.

    이 Pod가 실행되면 cat 명령의 출력이 매우 납니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동