1. ConfigMaps의 역할:
ConfigMap 은 Pod 의 Container 가 실행할 때 필요한 설정 정보들을 쿠버네티스에서 주입해주기 위해서 사용한다.
컨테이너로 주입할 수 있는 설정 정보들의 예시는 다음과 같다:
- command-line arguments
- environment variables
- port numbers
- other configuration artifacts (e.g 컨테이너에서 사용하는 File)
2. ConfigMaps의 UseCase:
ConfigMap 을 사용하면 좋은 UseCase 는 다음과 같다:
1. 환경별 구성 관리:
- 개발 환경과 프로덕션 환경마다 어플리케이션 설정 값이 달라져야 하는 경우.
- 환경마다 ConfigMap 을 만들어놓고 이를 사용하도록 하면 된다.
- Spring Boot 에서 각 환경마다 application.properties 를 구성하는 것과 유사하다.
다음은 개발 환경과 프로덕션 환경에서 ConfigMap 을 구성하는 예시를 보여준다.
apiVersion: v1
kind: ConfigMap
metadata:
name: myapp-config-dev
namespace: dev
data:
DATABASE_URL: dev-database.example.com
DEBUG_MODE: "true"
API_KEY: "dev-api-key"
apiVersion: v1
kind: ConfigMap
metadata:
name: myapp-config-prod
namespace: prod
data:
DATABASE_URL: prod-database.example.com
DEBUG_MODE: "false"
API_KEY: "prod-api-key"
2. 애플리케이션 코드와 설정을 분리하도록 사용할 수 있다:
- ConfigMap 설정 정보를 볼륨에 올려서 사용하고 있는 경우에는 어플리케이션 재시작 없이 동적으로 설정을 변경시킬 수 있다.
- ConfigMap 을 Pod 에서 볼륨으로 마운트 시켜서 사용하는 경우에는 ConfigMap 이 업데이트 되면 적용된 볼륨의 내용도 같이 업데이트 된다.
3. ConfigMaps 생성 방법:
첫 번째 방법은 직접 key-value 값을 명시하는 것이다.
kubectl create configMap [NAME]
을 통해서 생성할 ConfigMap 의 이름을 정했다.--from-literal
을 통해서 설정 정보를 명시했다.kubectl create configMap demo --from-literal=lab.difficulity=easy \ --from-literal=lab.resolution=high
두 번째 방법은 File 의 path 를 입력하는 것이다.
--from-file
을 통해서 File 의 Path 를 입력했다. 그러면 파일에 있는 내용으로 ConfigMap 이 생성된다.
세 번째 방법은 똑같이 File 의 Path 를 이용하지만 설정 정보에서 Key 이름을 별도로 셋팅하는 방법이다:
--from-file=[KEY_NAME]
으로 입력하면 해당 Key 이름을 가지고 설정 정보에 등록된다.
네 번째 방법은 디렉토리를 명시해서, 디렉토리 안의 Files 을 통해 설정 정보를 등록하는 방법이다:
다섯 번째 방법은 Yaml 파일을 통해서 등록하는 방법이다:
4. Pod 가 ConfigMaps 를 사용하는 방법:
Pod 가 ConfigMap 을 사용하는 방법은 3가지가 있다:
- As a Container environment variable
- In a Pod commands
- By creating a Volume
As a Container environment variable 예시:
- 컨테이너가 사용할 환경 변수를 ConfigMap 에서 가지고 오는 예시다.
spec.containers.env
에서 컨테이너가 사용할 환경 변수를 등록해야하고,valueFrom.configMapKeyRef
를 통해서 ConfigMap 에서 읽어온다.
In a Pod commands 예시:
- 컨테이너를 실행할 때 사용하는 명령어 (Command) 를 ConfigMap 에서 가지고와서 사용할 수 있다:
spec.container.command
에서${}
로 지정할 명령어를 넣으면 된다.
By creating a Volume:
- ConfigMap 데이터를 Pod 의 Ephemeral Volume 으로 등록해서 컨테이너에서 접근해서 사용할 수 있다.
volumeMounts
로 읽어온 ConfigMap 데이터를 어떤 디렉토리에 올릴지 정해야한다.volumes.configMap
을 통해서 지정한 configMap 을 읽어올 수 있다.- 중요한 건 Node 의 Kubelet 이 주기적으로 ConfigMap 의 업데이트 되었는지 확인하고 업데이트 되었다면 Volume 에도 업데이트 해준다. 근데 몇 분정도 걸릴 수 있다고 함.
- (Volume 은 Node 에 매핑된다. Ephemeral Volume 은 Pod 가 배치된 Node 의 Local Dist 를 사용함.)
'Kubernetes' 카테고리의 다른 글
Google Kubernetes Engine: Authentication and Authorization (0) | 2023.11.19 |
---|---|
Google Kubernetes Engine: kubectl (0) | 2023.11.18 |
Google Kubernetes Engine: Secret (0) | 2023.11.17 |
Google Kubernetes Engine: StatefulSets (0) | 2023.11.17 |
Google Kubernetes Engine: Volumes (0) | 2023.11.17 |