컨피그맵의 값을 환경변수로 사용

1. pod 정의 - YAML 파일 생성

vagrant@ubuntu:~$ vi all-env-from-configmap.yml

`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
`
# envFrom : 컨피그맵에 정의된 모든 키-값 쌍을 가져와서 환경변수로 설정
# configMapRef - name : my-container의 환경변수로 설정 위에선 두개 생성

pod 생성

vagrant@ubuntu:~$ kubectl apply -f all-env-from-configmap.yml
pod/container-env-example created

vagrant@ubuntu:~$ kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
container-env-example                  1/1     Running   0          30s
hostname-deployment-7dfd748479-7zdv7   1/1     Running   0          19h
hostname-deployment-7dfd748479-pp8x4   1/1     Running   0          19h
hostname-deployment-7dfd748479-rtgzv   1/1     Running   0          19h

컨테이너의 환경변수를 확인

k8s=kubernetes , LOG_LEVEL=DEBUG , container=docker 을 확인할 수 있다.

vagrant@ubuntu:~$ kubectl exec container-env-example -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=container-env-example
k8s=kubernetes
LOG_LEVEL=DEBUG
container=docker
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_PORT_443_TCP_PROTO=tcp
HOSTNAME_SVC_NODEPORT_PORT=tcp://10.111.29.91:8080
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
HOSTNAME_SVC_NODEPORT_SERVICE_HOST=10.111.29.91
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
HOSTNAME_SVC_NODEPORT_SERVICE_PORT_WEB_PORT=8080
HOSTNAME_SVC_NODEPORT_PORT_8080_TCP_PROTO=tcp
HOSTNAME_SVC_NODEPORT_PORT_8080_TCP_PORT=8080
HOSTNAME_SVC_NODEPORT_PORT_8080_TCP_ADDR=10.111.29.91
KUBERNETES_PORT_443_TCP_PORT=443
HOSTNAME_SVC_NODEPORT_SERVICE_PORT=8080
HOSTNAME_SVC_NODEPORT_PORT_8080_TCP=tcp://10.111.29.91:8080
HOME=/root

컨피그맵에 존재하는 키-값 쌍 중에서 원하는 데이터만 환경변수로 설정

vagrant@ubuntu:~$ cp all-env-from-configmap.yml selective-env-from-configmap.yml
vagrant@ubuntu:~$ vi selective-env-from-configmap.yml

`YAML
apiVersion: v1
kind: Pod
metadata:
  name: container-env-example
spec:
  containers:
    - name: my-container
      image: busybox
      args: ['tail', '-f', '/dev/null']
      env:
        - name: ENV_KEYNAME_1               ⇐ 새롭게 설정될 환경변수 이름 -------------+ ENV_KEYNAME_1=LOG_LEVEL값
          valueFrom:                                                                    | 
            configMapKeyRef:                                                               | 
              name: log-level-configmap     ⇐ 참조할 컨피그맵 이름                     |
              key: LOG_LEVEL                ⇐ 참조할 컨피그맵에서 가져올 데이터의 키 --+
        - name: ENV_KEYNAME_2
          valueFrom:
            configMapKeyRef:
              name: start-k8s
              key: k8s
`

pod 중복시 삭제

vagrant@ubuntu:~$ kubectl delete -f all-env-from-configmap.yml
pod "container-env-example" deleted

pod 생성

vagrant@ubuntu:~$ kubectl apply -f selective-env-from-configmap.yml
pod/container-env-example created

pod 생성 확인

vagrant@ubuntu:~$ kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
container-env-example                  1/1     Running   0          28s
hostname-deployment-7dfd748479-7zdv7   1/1     Running   0          19h
hostname-deployment-7dfd748479-pp8x4   1/1     Running   0          19h
hostname-deployment-7dfd748479-rtgzv   1/1     Running   0          19h

컨테이너 내부의 환경변수를 확인

ENV_KEYNAME_1=DEBUG 와 ENV_KEYNAME_2=kubernetes 를 확인 할 수 있다.

vagrant@ubuntu:~$ kubectl exec container-env-example -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=container-env-example
ENV_KEYNAME_1=DEBUG
ENV_KEYNAME_2=kubernetes
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PROTO=tcp
HOSTNAME_SVC_NODEPORT_SERVICE_PORT=8080
HOSTNAME_SVC_NODEPORT_SERVICE_PORT_WEB_PORT=8080
HOSTNAME_SVC_NODEPORT_PORT_8080_TCP=tcp://10.111.29.91:8080
HOSTNAME_SVC_NODEPORT_PORT_8080_TCP_PORT=8080
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
HOSTNAME_SVC_NODEPORT_SERVICE_HOST=10.111.29.91
HOSTNAME_SVC_NODEPORT_PORT=tcp://10.111.29.91:8080
HOSTNAME_SVC_NODEPORT_PORT_8080_TCP_PROTO=tcp
HOSTNAME_SVC_NODEPORT_PORT_8080_TCP_ADDR=10.111.29.91
KUBERNETES_SERVICE_PORT_HTTPS=443
HOME=/root

 

반응형

+ Recent posts