여기 내용에서 보시면 configMapGenerator 에 여러분의 설정 파일을 넣으시고 다시 배포를 하시면 해당 파일을 자동으로 ConfigMap 으로 만들어서 실행하도록 되어있습니다.
현재 예시는 ConfigMap 의 이름(name) 파일의 위치 (files) 로 구성되어 있습니다. 여러분께 드린 예시에서는 nginx 설정과 sql 설정이 되어 있는 것으로 보시면 됩니다.
오브젝트를 작성해서 이용하는 방법
여러분이 직접 ConfigMap 오브젝트를 만들어보고 싶으시면, nginx.yaml 나 mariadb.yaml 처럼 직접 작성해서 만드실 수 있습니다. 다음 예시처럼 만들어주세요.
apiVersion:v1kind:ConfigMapmetadata:name:game-demodata:# 속성과 비슷한 키; 각 키는 간단한 값으로 매핑됨player_initial_lives:"3"ui_properties_file_name:"user-interface.properties"# 파일과 비슷한 키game.properties:| enemy.types=aliens,monsters player.maximum-lives=5 user-interface.properties:| color.good=purple color.bad=yellow allow.textmode=true
그리고 다음과 같이 k8s/kustomization.yaml 에서 불러와서 사용할 수 있습니다.
namespace:defaultresources:... - configMap.yaml
혹은 명령어로 바로 적용할 수 있습니다.
kubectlapply-f<configMap>
deployment로 가져와서 사용하는 방법
이제 config 를 만들었다면, 사용하는 방법에 대해서도 알아볼까요?
krampoline_step4 로 돌아와 보시면 다음과 같은 nginx 설정이 있습니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- name: nginx-config
# 실제로 마운트를 할 위치를 설정한다.
mountPath: /etc/nginx/conf.d
volumes:
# 파드 레벨에서 볼륨을 설정한 다음, 해당 파드 내의 컨테이너에 마운트한다.
- name: nginx-config
configMap:
# 마운트하려는 컨피그맵의 이름을 제공한다.
name: nginx
이런식으로 원하는 위치에 원하는 설정을 넣을 수 있습니다.
ConfigMap 관련 명령어
kubectlgetconfigmap# 전체 configmap 가져오기kubectldescribeconfigmap<configmap이름># 해당 configmap 내용 가져오기kubectleditconfigmap<configmap이름># 해당 configmap 내용 수정하기kubectldeleteconfigmap<configmap이름># 해당 configmap 내용 삭제하기
시크릿(Secret)
시크릿은 암호, 토큰 또는 키와 같은 소량의 중요한 데이터를 포함하는 오브젝트입니다.
특히나 깃허브 기반으로 하고 있는 크램폴린IDE 에서 비밀키나 api키 부분에 걱정이 많으실텐데요.
깃허브에 올리지 않고, Secret을 이용해서 IDE 안에서 쿠버네티스에 적용 시킬 수 있습니다.
kustomization을 이용해서 만드는법
ConfigMapGenerator 와 비슷한 방법을 사용하고 있는데요. 바로 kustomization 의 secretGenerator 입니다.
이번에 조금 다르게 value 로 해봅시다. 해당 오브젝트를 작성하고, configMap에서 처럼 k8s/kustomization.yaml 에서 불러와서 사용하거나 명령어로도 사용할 수 있습니다.
deployment로 가져와서 사용하는 방법
이번에는 해당 내용을 환경 변수로 불러오는 예시와 file 로 불러오는 예시를 보여드리도록 하겠습니다.
# Deployment를 생성하는 YAML 파일apiVersion:apps/v1kind:Deploymentmetadata:name:my-app-envspec:replicas:1selector:matchLabels:app:my-app-envtemplate:metadata:labels:app:my-app-envspec:containers: - name:my-app-container-envimage:my-app-image:latestenv: - name:MY_USERNAMEvalueFrom:secretKeyRef:name:my-secret-envkey:username# Secret의 "username" 필드를 환경 변수 MY_USERNAME으로 설정합니다. - name:MY_PASSWORDvalueFrom:secretKeyRef:name:my-secret-envkey:password# Secret의 "password" 필드를 환경 변수 MY_PASSWORD로 설정합니다.
# Deployment를 생성하는 YAML 파일apiVersion:apps/v1kind:Deploymentmetadata:name:my-app-envspec:replicas:1selector:matchLabels:app:my-app-envtemplate:metadata:labels:app:my-app-envspec:containers: - name:my-app-container-envimage:my-app-image:latestenv: - name:MY_USERNAMEvalueFrom:secretKeyRef:name:my-secret-envkey:username# Secret의 "username" 필드를 환경 변수 MY_USERNAME으로 설정합니다. - name:MY_PASSWORDvalueFrom:secretKeyRef:name:my-secret-envkey:password# Secret의 "password" 필드를 환경 변수 MY_PASSWORD로 설정합니다.
이런식으로 secret을 환경변수로도, 파일로도 사용할 수 있답니다.
Secret 관련 명령어
kubectlgetsecret# 전체 secret 가져오기kubectldescribesecret<configmap이름># 해당 secret 내용 가져오기kubectleditsecret<configmap이름># 해당 secret 내용 수정하기kubectldeletesecret<configmap이름># 해당 secret 내용 삭제하기