개요
k8s에서 Evrionment Variables들이 어떻게 관리되는지 또 어떻게 사용하는지 알아보겠습니다.
: how to set environment and use environment in k8s
Evironment Variables의 종류
1. Environment Variables in Application
2. ConfigMaps in Application
3. secretkey in Application
Environment Variables in Application
yaml 파일에 Environment Variables를 정의하여 container 내부에서 사용하는 방법입니다.
사용법
env: 필드를 사용하여
name : value 형식으로 Environment Variables를 넘겨서 사용가능 합니다.
apiVersion: v1
kind: Pod
metadata:
labels:
run: env-ubuntu
name: env-ubuntu
spec:
containers:
- image: ubuntu
name: env-ubuntu
env:
- name: APP_COLOR
value: pink
command: ["sleep"]
args: ["infinity"]
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
검증
#kubectl exec -it <pod_name> -c <container_name> --namespace=<namespace> -- /bin/bash
Ex) kubectl exec -it env-ubuntu env-ubuntu --namespace=default -- /bin/bash
ConfigMap in Application
정의
ConfigMap이란 Yaml 파일에 정의해 놓은 env 설정을 밖으로 빼서 만든 설정 파일 Map입니다.
ConfigMap 만들기
명령어로 만들기
key=value 형식으로 config map설정하기
# Create a new config map named my-config with key1=config1 and key2=config2
kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2
configmap 확인
kubectl describe configmap my-config
Name: my-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
key1:
----
config1
key2:
----
config2
BinaryData
====
Events: <none>
Config yaml로 만들기
출처 : https://kubernetes.io/docs/concepts/configuration/configmap/
configmap을 만들 때 data는 2가지 형태로 만들 수 있습니다
1. key: value 형식
2. file: key=value
apiVersion: v1
kind: ConfigMap
metadata:
name: my-configmap
data:
# 환경 변수를 만들어서 사용
APP_COLOR: blue
env_string: hahahah lol
# file을 만들어서 안에 값을 넣어사용 keys
game.properties: |
enemy.types=aliens,monsters
player.maximum-lives=5
user-interface.properties: |
color.good=purple
color.bad=yellow
allow.textmode=true
3가지의 사용 방법
1. envFrom 이용
configMap을 전체 참조하는 방식입니다.
my-configmap의 data를 모두 접근할 수 있습니다.
apiVersion: v1
kind: Pod
metadata:
labels:
run: env-ubuntu
name: env-ubuntu
spec:
containers:
- image: ubuntu
name: env-ubuntu
envFrom:
- configMapRef:
name: my-configmap
2. env 이용
configMap에서 원하는 key를 하나만 참조하는 방식입니다.
아래 예제에서는 my-configmap의 APP_COLOR값을 CHANGE_COLOR에 세팅하였습니다.
apiVersion: v1
kind: Pod
metadata:
labels:
run: env-ubuntu
name: env-ubuntu
spec:
containers:
- image: ubuntu
name: env-ubuntu
env:
- name: CHANGE_COLOR
valueFrom:
configMapKeyRef:
name: my-configmap
key: APP_COLOR
3. volumes 이용
configmap 자체를 volume을 사용하여 mount 한 다음에 사용합니다.
아래 yaml을 실행하여 pod를 생성하게 되면 /config 하위에 key값들이 file 형태로 생성이 됩니다.
Pod Yaml 파일
apiVersion: v1
kind: Pod
metadata:
labels:
run: env-ubuntu
name: env-ubuntu
spec:
containers:
- image: ubuntu
name: env-ubuntu
command: ["sleep"]
args: ["infinity"]
volumeMounts:
- name: app-config-volume
mountPath: "/config"
readOnly: true
volumes:
- name: app-config-volume
configMap:
name: my-configmap
/config에 파일 생성 결과
secretkey in Application
configMap은 환경 변수를 plain-text로 관리 합니다 .그렇기 때문에 누구나 주요 data를 쉽게 볼수 있습니다.
그래서 이를 보완하고자 나온것이 secret이란 object입니다.
secret이란 무엇인가?
환경 변수를 plain-text가 아닌 base64로 저장하여 관리하는 방식입니다.
사용방식을 configMap과 유사합니다.
https://kubernetes.io/docs/concepts/configuration/secret/
secret 생성
command 사용
kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2
yaml파일 사용
아래는 간단한 예제 yaml 파일이고, data는 모두 base64로 encoding 되어 있습니다.
참고: 다양한 type이 존재합니다.
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
MY_NAME: cm9vdA==
my_pwd: cGFzc3dk
secret yaml 사용법
configMap관 사용방식은 유사하며 다만 secret으로 명령이 변경이 됩니다.
etcd secret 암호화방법
https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/
정리
k8s에서 pod의 environment value를 pod에서 직접 설정하고 외부에서 관리할 수 있는 confmap을 제공합니다.
configmap을 pod에서 3가지 형태로 사용이 가능합니다.
1. configmap을 통째로 참조하여 사용
2. configmap의 일부 값만 사용
3. configmap를 통째로 mount 하여 사용
추가적으로 evironment를 좀더 안전하게 사용하기위한 방식으로 secret을 제공합니다.
Next Post
'Cloud > k8s-CKA' 카테고리의 다른 글
[CKA] 20. node operating system update (0) | 2023.04.24 |
---|---|
[CKA] 19. multi container pods (0) | 2023.04.20 |
[CKA] 17. command and argument (0) | 2023.03.25 |
[CKA] 16. k8s Rolling update and Rollback (2) | 2023.03.23 |
[CKA] 15. k8s Monitoring (METRIC SERVER) and log (0) | 2023.03.19 |