1. ConfigMap
1.1. 정의
컨피그맵은 키-값 쌍으로 기밀이 아닌 데이터를 저장하는 데 사용하는 API
오브젝트이다. 파드는 볼륨에서 환경 변수, 커맨드-라인 인수 또는 구성 파일로
컨피그맵을 사용할 수 있다. 컨피그맵을 사용하면 컨테이너 이미지에서 환경별
구성을 분리하여, 애플리케이션을 쉽게 이식할 수 있다.
컨피그맵은 보안 또는 암호화를 제공하지 않는다. 저장하려는 데이터가 기밀인 경우, 컨피그맵 대신 시크릿(Secret) 또는 추가(써드파티) 도구를 사용해야 한다.
1.2. 사용 이유
애플리케이션 코드와 별도로 구성 데이터를 설정하려면 컨피그맵을 사용한다.
컨피그맵은 많은 양의 데이터를 보유하도록 설계되지 않았다. 컨피그맵에 저장된
데이터는 1MiB를 초과할 수 있다.
이 제한보다 큰 설정을 저장해야 하는 경우, 볼륨을 마운트하는 것을 고려하거나 별도의 데이터베이스 또는 파일 서비스를 사용할 수 있다.
1.3. 컨피그맵 오브젝트
컨피그맵은 다른 오브젝트가 사용할 구성을 저장할 수 있는 API 오브젝트이다.
spec이 있는 대부분의 쿠버네티스 오브젝트와 달리, 컨피그맵에는 data 및 binaryData 필드가 있다. 이러한 필드는 키-값 쌍을 값으로 허용한다. data 필드와 binary Data는 모두 선택 사항이다. data 필드는 UTF-8 문자열을 포함하도록 설계되어 있다. binaryData 필드는 바이너리 데이터를 base64로 인코딩된 문자열로 포함하도록 설계되었다.
1.4. 생성 방식
1.4.1. Literal
Kubectl create configmap <configmap name> --from-literal=<key>=<value> |
1.4.2. 파일
kubectl create configmap <configmap name> --from-file=<파일 위치> |
1.5. 예시
● configmap 생성
[asd@ubu22-01 ~ (kubernetes-admin@cluster.local:happy)]$ k create configmap env-test --from-literal=my_emotion=happy configmap/env-test created # neat 모듈로 코드 최소화 [asd@ubu22-01 ~ (kubernetes-admin@cluster.local:happy)]$ k run webserver --image=nginx --dry-run=client -o yaml | k neat > confnginx.yml # 생성된 파일을 확인 [asd@ubu22-01 ~ (kubernetes-admin@cluster.local:happy)]$ vi confnginx.yml apiVersion: v1 kind: Pod metadata: labels: run: webserver name: webserver spec: containers: - image: nginx name: webserver env: - name: EMOTION valueFrom: configMapKeyRef: name: env-test key: my_emotion |
# 생성한 파일 적용 [asd@ubu22-01 ~ (kubernetes-admin@cluster.local:happy)]$ k apply -f confnginx.yml pod/webserver created # 생성된 webserver 확인 [asd@ubu22-01 ~ (kubernetes-admin@cluster.local:happy)]$ kgp -w NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 9m44s 10.233.88.70 ubu22-02 <none> <none> webserver 1/1 Running 0 8s 10.233.88.66 ubu22-02 <none> <none> # 상세 확인 [asd@ubu22-01 ~ (kubernetes-admin@cluster.local:happy)]$ k describe pod webserver Name: webserver Namespace: happy . . . Environment: EMOTION: <set to the key 'my_emotion' of config map 'env-test'> Optional: false . . . [asd@ubu22-01 ~ (kubernetes-admin@cluster.local:happy)]$ k exec -it webserver -- bash root@webserver:/# env KUBERNETES_SERVICE_PORT_HTTPS=443 KUBERNETES_SERVICE_PORT=443 HOSTNAME=webserver EMOTION=happy PWD=/ PKG_RELEASE=1~bookworm HOME=/root KUBERNETES_PORT_443_TCP=tcp://10.233.0.1:443 NJS_VERSION=0.7.12 TERM=xterm SHLVL=1 KUBERNETES_PORT_443_TCP_PROTO=tcp KUBERNETES_PORT_443_TCP_ADDR=10.233.0.1 KUBERNETES_SERVICE_HOST=10.233.0.1 KUBERNETES_PORT=tcp://10.233.0.1:443 KUBERNETES_PORT_443_TCP_PORT=443 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin NGINX_VERSION=1.25.1 _=/usr/bin/env |