ConfigMap, Secret
개발환경과 운영환경이 다르다면 이미지를 만들 때 들어가는 설정들이 조금씩 다른 경우가 있다.
- 예를 들어, 개발환경에서는 SSH 접속을 가능하게 하고, 접근 유저와 키 값을 세팅할 수 있다. 반면 운영 환경에서는 SSH 접속을 불가능하게 해야한다.
Service의 이미지로 만들어서 배포한다고 하면 이 정보만 수정하기 위해 이미지를 운영환경과 개발환경에서 각각 2개를 만들어 하고, 이는 관리의 어려움과 번거로움이 생길 수 있다.
이러한 설정 정보들을 따로 관리해 주는 것이 ConfigMap과 Secret이다. 컨테이너를 만들 때 ENV값에 넣어준다. Secret은 Base64 인코딩을 해서 저장해야 하고, 이를 파드에 배포하면 알아서 디코딩 해준다.
-
secret에 Base64 적용함의 차이
# Base64 인코딩을 하지 않고, 배포한 경우 HELLO_SVC_SERVICE_HOST=10.0.157.34 SVC_2_PORT=tcp://10.0.187.187:9000 HOSTNAME=pod-2 . . SVC_3_PORT_9000_TCP=tcp://10.0.169.32:9000 Key=�m� SVC_3_PORT=tcp://10.0.169.32:9000 SVC_2_SERVICE_HOST=10.0.187.187 SVC_3_SERVICE_PORT=9000 # Base64 인코딩을 하고 배포한 경우 [root@pod-2 /]#env HELLO_SVC_SERVICE_HOST=10.0.157.34 SVC_2_PORT=tcp://10.0.187.187:9000 HOSTNAME=pod-2 . . SVC_3_PORT_9000_TCP=tcp://10.0.169.32:9000 Key=1234 SVC_3_PORT=tcp://10.0.169.32:9000
Env에는 상수값(Literal) 또는 파일 형태로 값이 들어갈 수 있다.
- Env - Literal
- kind를 ConfigMap으로 해서 하나 만든다. 들어가는 값은 상수 값으로 한다.
- yaml 작성시 만들어 놓은 ConfigMap을 Container에서 불러온다.
- Env - File
- 파일에 환경변수를 넣어놓는 방법
- 파일의 이름이 key가 되고, 그 안의 내용이 value가 된다.
- kubectl 명령어로 직접 해줘야 한다. 이 때, Secret의 경우 알아서 Base64로 인코딩 된다.
VolumeMount는 file을 마운트 걸 수 있다.
- VolumeMount : Pod를 정의할 때 container 내부에 mount path를 걸어 놓는다.
- Secret에는 인증서, 비밀번호를 담는다. 값이 메모리에 저장이 된다. 최대 1MB까지만 저장가능
- Pod를 만들 때 mount path를 설정하고, mount할 볼륨에 configmap을 담는다.
Env에 File로 저장하는 것과 Volume에 File로 저장하는 것의 차이점
- Env
- ConfigMap의 값이 바뀌어도 배포된 Pod의 값은 바뀌지 않는다.
- Pod를 죽이고 다시 실행시켜야 ConfigMap의 변경된 값을 받아온다.
- Volume mount
- 원본과 연결시킨다는 개념이므로 ConfigMap의 값이 바뀌면 배포된 Pod값도 같이 바뀐다.
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes] 오브젝트 종류에 따른 apiVersion 정리 (0) | 2021.02.19 |
---|---|
[Kubernetes Study - 08] Namespace, ResourceQuota, LimitRange (0) | 2021.02.12 |
[Kubernetes Study - 06] Volume - emptyDir, hostPath, PV/PVC (0) | 2021.02.09 |
Kubernetes 명령어 정리 (0) | 2021.02.03 |
[Kubernetes Study - 05] 기본 실습 (3) - AKS를 이용한 내부 클러스터 통신 (0) | 2021.01.22 |