Kubernetes ConfigMap 이해
애플리케이션 리포지토리에는 전체 이미지 빌드 없이 환경 변수를 업데이트할 수 있도록 파일에 로드된 index.html
구성 파일이 있습니다.
구성 파일에는 중요한 정보가 포함되어 있지 않으며 컨테이너와 함께 로드하기만 하면 됩니다. 암호화 또는 인코딩을 사용하지 않고 컨테이너에 파일을 탑재하려면 어떻게 해야 하나요?
ConfigMaps 이해
ConfigMap은 Secret에 대응하는 요소입니다. 비밀은 중요한 데이터를 저장하고 전달하는 방법을 제공하지만 Config지도는 비밀과 동일한 키-값 구조를 사용하여 민감하지 않은 데이터를 저장하는 방법을 제공하는 개체입니다. ConfigMap 개체를 사용하면 컨테이너 이미지에서 구성을 분리하여 해당 이미지를 상태 비저장 상태로 유지할 수 있습니다.
사용자는 ConfigMap을 생성하여 애플리케이션 코드와 별도로 구성 데이터를 저장하고 Pod에 Secret 개체를 로드하는 것과 유사한 방법으로 로드합니다. 환경 변수를 사용하거나 컨테이너 내의 볼륨에 파일로 탑재하여 구성지도 참조할 수 있습니다.
ConfigMap에는 데이터 크기 제한이 있습니다. 한 ConfigMap에 최대 1MiB의 데이터를 저장할 수 있습니다. 이 크기 제한 덕분에 큰 구성을 더 작은 청크로 나누어 구성 파일이 크고 복잡해지는 것을 방지할 수 있습니다. ConfigMap을 사용하면 컨테이너에 필수 구성 파일만 탑재할 수 있으므로 세분성을 높일 수 있습니다.
비밀과 마찬가지로 ConfigMaps은 네임스페이스가 지정됩니다. 생성된 동일한 네임스페이스에 있는 컨테이너를 사용하여 ConfigMap에 액세스하고 탑재할 수 있습니다.
ConfigMap은 Helm 및 Kubernetes Operator와 같은 다른 도구에서도 상태를 저장하고 읽는 데 널리 사용됩니다.
ConfigMap 업데이트
Pod 내에서 ‘볼륨으로 탑재된’ 모든 ConfigMaps는 값이 변경되면 자동으로 업데이트됩니다. 이 변경은 Kubelet 구성으로 인해 즉시 발생하지 않을 수 있지만 자동으로 수행되므로 Pod를 다시 시작할 필요가 없습니다.
ConfigMap이 환경 변수에 바인딩되면 자동으로 업데이트되지 않습니다. 이러한 경우 변경 사항을 적용하려면 Pod를 다시 시작해야 합니다.
ConfigMap 만들기 및 사용
Secret과 동일한 방법으로, 즉 YAML 파일을 사용하여 ConfigMap을 만들 수 있습니다. ConfigMap 사양은 다음과 같습니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: configmap-name
namespace: default
data:
key-name: "value as key"
key.name: |
multi line
property, called "file-like" values
다음 예제처럼 Pod 또는 배포 사양에서 하나 이상의 키로 ConfigMap을 참조할 수 있습니다.
apiVersion: v1
kind: Pod
metadata:
name: configmap-as-env
namespace: default
spec:
containers:
- name: configmap-env
image: alpine
command: ["sleep", "3600"]
env:
- name: ENVIRONMENT_VARIABLE_NAME
valueFrom:
configMapKeyRef:
name: configmap-name
key: key-name
다음 예제와 같이 읽기 전용 볼륨을 사용하여 Pod 내에 파일로 탑재할 수도 있습니다.
apiVersion: v1
kind: Pod
metadata:
name: configmap-as-env
namespace: default
spec:
containers:
- name: configmap-env
image: alpine
command: ["sleep", "3600"]
volumeMounts:
- name: volume-name
mountPath: "/path/to/mount"
readOnly: true
volumes:
- name: volume-name
configMap:
name: configmap-name
items:
- key: "key-name"
path: "path/to/mount/the/key"