7.4 컨피그맵으로 설정 분리
- kubectl create configmap 명령어 사용
kubectl create configmap fortune-config --from-literal=sleep-interval=25
kubectl get configmap fortune-config -o yaml
...
apiVersion: v1
data:
sleep-interval: "25"
kind: ConfigMap
metadata:
creationTimestamp: "2024-10-01T14:04:20Z"
name: fortune-config
namespace: default
resourceVersion: "1459822"
uid: 9ebe8eea-8264-44a6-bb7c-9d804670abc9
...
- 파일 내용으로 컨피그맵 생성
kubectl create configmap my-config --from-file=config-file.conf
- 디렉터리에 있는 파일로 컨피그맵 생성
kubectl create configmap my-config --from-file=/path/to/dir
▶ 문서에 자세한 내용이 있으니 필요하다면 참고
https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/
- configmap과 yaml 연결
https://github.com/luksa/kubernetes-in-action/blob/master/Chapter07/fortune-pod-env-configmap.yaml
apiVersion: v1
kind: Pod
metadata:
name: fortune-env-from-configmap
spec:
containers:
- image: luksa/fortune:env
env:
- name: INTERVAL
valueFrom:
configMapKeyRef:
name: fortune-config
key: sleep-interval
name: html-generator
volumeMounts:
- name: html
mountPath: /var/htdocs
- image: nginx:alpine
name: web-server
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
readOnly: true
ports:
- containerPort: 80
protocol: TCP
volumes:
- name: html
emptyDir: {}
valueFrom으로 연결할 수 있다.
- 컨피그맵 생성
https://github.com/luksa/kubernetes-in-action/tree/master/Chapter07/configmap-files
kubectl create configmap fortune-config --from-file=configmap-files
apiVersion: v1
kind: Pod
metadata:
name: fortune-configmap-volume
spec:
containers:
- image: luksa/fortune:env
env:
- name: INTERVAL
valueFrom:
configMapKeyRef:
name: fortune-config
key: sleep-interval
name: html-generator
volumeMounts:
- name: html
mountPath: /var/htdocs
- image: nginx:alpine
name: web-server
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
readOnly: true
- name: config
mountPath: /etc/nginx/conf.d
readOnly: true
ports:
- containerPort: 80
name: http
protocol: TCP
volumes:
- name: html
emptyDir: {}
- name: config
configMap:
name: fortune-config
*volumeMount에 subPath 속성으로 디렉터리 안에 파일을 추가할 수 있음.
▶ 주의할 점은, 컨피그맵 변경을 실행하면 모든 인스턴스에 걸쳐 동기적으로 업데이트되지 않기 때문에, 개별 파드의 파일이 최대 1분동안 동기화되지 않은 상태로 있는 것을 알고 있어야 한다.
7.5 시크릿으로 민감한 데이터 컨테이너 전달
- 쿠버네티스는 시크릿에 접근해야 하는 파드가 실행되고 있는 노드에만 개별 시크릿을 배포해 시크릿을 안전하게 유지한다.
- 노드 자체적으로 시크릿을 항상 메모리에만 저장되게 하고 물리 저장소에 기록되지 않도록 한다.
> 물리 저장소는 시크릿 삭제한 후에도 디스크를 완전히 삭제하는 작업이 필요하기 때문이다.
- 시크릿 생성
kubectl create secret generic fortune-https --from-file=https.key
- 파드에서 시크릿 사용
https://github.com/luksa/kubernetes-in-action/blob/master/Chapter07/fortune-pod-https.yaml
apiVersion: v1
kind: Pod
metadata:
name: fortune-https
spec:
containers:
- image: luksa/fortune:env
name: html-generator
env:
- name: INTERVAL
valueFrom:
configMapKeyRef:
name: fortune-config
key: sleep-interval
volumeMounts:
- name: html
mountPath: /var/htdocs
- image: nginx:alpine
name: web-server
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
readOnly: true
- name: config
mountPath: /etc/nginx/conf.d
readOnly: true
- name: certs
mountPath: /etc/nginx/certs/
readOnly: true
ports:
- containerPort: 80
- containerPort: 443
volumes:
- name: html
emptyDir: {}
- name: config
configMap:
name: fortune-config
items:
- key: my-nginx-config.conf
path: https.conf
- name: certs
secret:
secretName: fortune-https
-쿠버네티스에 자격증명을 전달하는 것이 필요할때
> 도커 허브에서 프라이빗 이미지 사용
> 도커 레지스토리 인증을 위한 시크릿 생성
kubectl create secret docker-registry mydockerhubsecret
-- docker-username=...
+ 참고영상
https://www.youtube.com/watch?v=xyGTvkKzrB4
'스터디 > [쿠버네티스 인 액션] (2024.8)' 카테고리의 다른 글
[쿠버네티스 인 액션] 8장. 앰베서더 컨테이너, 쿠버네티스 API client (0) | 2024.10.10 |
---|---|
[쿠버네티스 인 액션] 8장. 애플리케이션 파드 메타데이터와 그 외의 리소스에 엑세스하기 (6) | 2024.10.09 |
[쿠버네티스 인 액션] 7장. 컨피그맵과 시크릿 - 컨테이너에 명령어 인수 전달, 각 컨테이너에 사용자 정의 환경변수 지정 (0) | 2024.10.02 |
[쿠버네티스 인 액션] 6장.볼륨 - 퍼시스턴트볼륨과 퍼시스턴트볼륨클레임 +참고영상 (2) | 2024.09.29 |
[쿠버네티스 인 액션] 6장.볼륨 (2) | 2024.09.28 |