컨피그맵의 값을 환경변수로 사용
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
반응형