[kubenetes] 7-2-1. 컨피그맵

kubenetes
Author
chan2slo chan2slo
Date
2022-07-25 21:28
Views
1518

컨피그맵 생성하는법, --from-literal을 복수로 사용하여 설정할수도있다.

root@Kube-master1:~# kubectl create configmap log-level-configmap --from-literal LOG_LEVEL=DEBUG
configmap/log-level-configmap created
root@Kube-master1:~# kubectl create configmap start-k8s --from-literal k8s=kubernetes --from-literal container=docker
configmap/start-k8s created

다음의 명령들로 확인가능하다.

root@Kube-master1:~# kubectl get cm
root@Kube-master1:~# kubectl get configmap
NAME                  DATA   AGE
kube-root-ca.crt      1      7d15h
log-level-configmap   1      61s
start-k8s             2      18s
root@Kube-master1:~# kubectl describe configmap log-level-configmap
Name:         log-level-configmap
Namespace:    default
Labels:       
Annotations:  

Data
====
LOG_LEVEL:
----
DEBUG
Events:  
root@Kube-master1:~# kubectl get configmap log-level-configmap -o yaml
apiVersion: v1
data:
  LOG_LEVEL: DEBUG
kind: ConfigMap
metadata:
  creationTimestamp: "2021-04-27T10:48:46Z"
  name: log-level-configmap
  namespace: default
  resourceVersion: "1001762"
  uid: 1cfdf197-6434-4e5d-97bd-86c98ce4b40c

컨피그맵의 데이터를 컨테이너의 환경 변수로 가져오기

root@Kube-master1:~# cat all-env-from-configmap.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: container-env-example
spec:
  containers:
  - name: my-container
    image: busybox
    args: ['tail','-f','/dev/null']
    envFrom:
    - configMapRef:
        name: log-level-configmap
    - configMapRef:
        name: start-k8s

Pod 생성 후 환경변수 확인

root@Kube-master1:~# kubectl apply -f all-env-from-configmap.yaml 
pod/container-env-example created

root@Kube-master1:~# kubectl exec container-env-example env
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=container-env-example
LOG_LEVEL=DEBUG
container=docker
k8s=kubernetes
…

위는 키값쌍이 2개있는것도 전부 환경변수로 입력이되었다.

아래의 명령을 이용하면 key값마다 환경변수를 하나하나 대입이 가능하다.

root@Kube-master1:~# cat select-env-from-configmap.yaml   
apiVersion: v1
kind: Pod
metadata:
  name: container-selective-env-example
spec:
  containers:
  - name: my-container
    image: busybox
    args: ['tail','-f','/dev/null']
    env:
    - name: ENV_KEYNAME_1
      valueFrom:
        configMapKeyRef:
          name: log-level-configmap
          key: LOG_LEVEL
    - name: ENV_KEYNAME_2
      valueFrom:
        configMapKeyRef:
          name: start-k8s
          key: k8s

root@Kube-master1:~# kubectl apply -f select-env-from-configmap.yaml 
pod/container-selective-env-example created

root@Kube-master1:~# kubectl exec container-selective-env-example -- env | grep ENV
ENV_KEYNAME_2=kubernetes
ENV_KEYNAME_1=DEBUG

envFrom: 컨피그맵이 존재하는 모든 키-값 쌍을 가져옵니다.
valueFrom과 configMapKeyRef: 컨피그맵에 존재하는 키-값 쌍 중에서 원하는 데이터만 선택적으로 져옵니다.

컨피그맵의 내용을 파일로 포드 내부에 마운트하기

root@Kube-master1:~# cat volume-mount-configmap.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: configmap-volume-pod
spec:
  containers:
  - name: my-container
    image: busybox
    args: ["tail","-f","/dev/null"]
    volumeMounts:
    - name: configmap-volume
      mountPath: /etc/config
  volumes:
  - name: configmap-volume
    configMap:
      name: start-k8s


root@Kube-master1:~# kubectl apply -f volume-mount-configmap.yaml 
pod/configmap-volume-pod created
root@Kube-master1:~# kubectl exec configmap-volume-pod -- ls /etc/config
container
k8s
root@Kube-master1:~# kubectl exec configmap-volume-pod -- cat /etc/config/k8s
kubernetes

위의 환경변수로 만들기처럼 이것도 모든 키-값 쌍 데이터를 포드에 마운트하는것이 ㄴ아닌 원하는 키-값 쌍 데이터만 선택해서 포드에 파일로 가져올 수도 있다.

root@Kube-master1:~# cat selective-volume-configmap.yaml                                     
apiVersion: v1
kind: Pod
metadata:
  name: selective-cm-volume-pod
spec:
  containers:
  - name: my-container
    image: busybox
    args: ["tail","-f","/dev/null"]
    volumeMounts:
    - name: configmap-volume
      mountPath: /etc/config
  volumes:
  - name: configmap-volume
    configMap:
      name: start-k8s
      items:
      - key: k8s
        path: k8s_fullname

root@Kube-master1:~# kubectl apply -f selective-volume-configmap.yaml 
pod/selective-cm-volume-pod created
root@Kube-master1:~# kubectl exec selective-cm-volume-pod -- ls /etc/config
k8s_fullname
root@Kube-master1:~# kubectl exec selective-cm-volume-pod -- cat /etc/config/k8s_fullname
kubernetes

파일로부터 컨피그맵 생성하기

root@Kube-master1:~# echo Hello, world! >> index.html
root@Kube-master1:~# kubectl create cm index-file --from-file index.html
configmap/index-file created
root@Kube-master1:~# kubectl describe cm index-file
Name:         index-file
Namespace:    default
Labels:       
Annotations:  

Data
====
index.html:
----
Hello, world!

Events:  

또한 --from-env-file 옵션으로 여러 개의 키-값 형태의 내용으로 구성된 설정 파일을 한꺼번에 컨피그맵으로 가져올 수도 있다.

root@Kube-master1:~# cat multiple-keyvalue.env 
mykey1=myvalue1
mykey2=myvalue2
mykey3=myvalue3

root@Kube-master1:~# kubectl create configmap from-envfile --from-env-file multiple-keyvalue.env
configmap/from-envfile created

root@Kube-master1:~# kubectl get cm from-envfile -o yaml                                     apiVersion: v1
data:
  mykey1: myvalue1
  mykey2: myvalue2
  mykey3: myvalue3
kind: ConfigMap
metadata:
  creationTimestamp: "2021-04-27T12:14:58Z"
  name: from-envfile
  namespace: default
  resourceVersion: "1009945"
  uid: e55e3707-ac26-4742-9be9-27771ea6c16f

yaml 파일로 컨피그맵 정의하기
--dry-run, -o yaml을 이용해 yaml파일을 만들수있다.

root@Kube-master1:~# kubectl create cm my-configmap --from-literal mykey=myvalue --dry-run -o yaml       

apiVersion: v1
data:
  mykey: myvalue
kind: ConfigMap
metadata:
  creationTimestamp: null
  name: my-configmap
root@Kube-master1:~# kubectl create cm my-configmap --from-literal mykey=myvalue --dry-run -o yaml > my-configmap.yaml

root@Kube-master1:~# kubectl apply -f my-configmap.yaml 
configmap/my-configmap created

--dry-run이란 특정 작업의 실행가능 여부를 검토하는 명령어 또는 api를 의미한다..
실행가능 여부를 확인하며, 실제 리소스를 생산하지 않는다.

Total Reply 0