
ConfigMap은 설정값을 관리하는 Kubernetes 리소스.
환경변수, 설정파일, 명령줄 인자처럼 애플리케이션의 설정 데이터를 외부에서 분리해서 관리.
값을 가져오려고 사용.
ConfigMap
name : config
data:
password: 123
Depolyment
env:
configMapKeyRef:
name: config
key: password
...
볼륨 이름을 먼저 정의!
volumes:
- name: volum-config
configMap:
name: config (사용할 컨피그)
items:
- key: 컨피그 키
path: 컨테이너 내 경로
쿠버네티스에 추가할 컨피그 리소스.
apiVersion: v1
kind: ConfigMap
metadata:
name: backend-user-config
data:
application-dev.yml: |
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://k8s-external-user-mysql-service:3306/user?serverTimezone=UTC&useSSL=true&autoReconnect=true&useUnicode=true&characterEncoding=utf-8
username: user
password: 1234
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
connection-test-query: SELECT 1 # HikariCP 유효성 검사 추가
validation-timeout: 5000
jpa:
hibernate:
ddl-auto: create # 오직 테스트 환경에서만
generate-ddl: true # 오직 테스트 환경에서만 (spring.jpa.generate-ddl)
show-sql: true
open-in-view: false
kafka:
bootstrap-servers: k8s-external-kafka-service:9092
기존 비지니스 로직 쪽 dev.yml을 yaml 쪽으로 옮겼기 때문에 겹치는 부분을 수정해 주어야 한다.
spring:
config:
import: file:/etc/config/application-dev.yml
바뀐 코드 커밋 푸쉬.
volumes:
- name: backend-user-config-volume
configMap:
name: backend-user-config
items:
- key: application-dev.yml
path: application-dev.yml
-> volume은 container와 같은 뎁스!
---
volumeMounts:
- mountPath: /etc/config
name: backend-user-config-volume(볼륨이름)
-> 볼륨 마운트는 컨테이너 안에서!
민감한 정보(비밀번호, API 키, 인증서등)를 안전 저장, 관리하기 위한 오브젝트
ConfigMap과 유사
자동으로 평문 -> Base64로 변환
타입 : 환경변수, 볼륨 마운트
차이 :
configMap : name
Secret : secretName
apiVersion: v1
kind: Secret
metadata:
name: backend-user-secret
stringData:
application-secret.yml: |
spring:
datasource:
username: 아이디
password: 비밀번호
---
secret:
secretName: backend-user-secret
items:
- key: application-secret.yml
path: application-secret.yml
자동으로 롤링 업데이트 하는 오픈 소스 컨트롤러
설치
kubectl apply -f https://raw.githubusercontent.com/stakater/Reloader/master/deployments/kubernetes/reloader.yaml
Deployment 추가
annotations:
reloader.stakater.com/auto: "true"