쿠버네티스 패턴 중 3부(구조패턴), 4부(설정패턴), 5부(고급패턴)을 다룬다.
애플리케이션 설정을 위한 이미지 변경을 최소화 하고 싶다. 어떻게 할 수 있을까?
애플리케이션의 설정을 위해서 하드 코딩하지 않고 환경 변수를 사용하는 것.
apiVersion: v1
kind: Pod
metadata:
name: random-generator
spec:
containers:
- image: k8spatterns/random-generator:1.0
name: random-generator
env:
- name: LOG_FILE
value: /tmp/random.log
- name: PATTERN
valueFrom:
configMapKeyRef:
name: random-generator-config
key: pattern
- name: SEED
valueFrom:
secretKeyRef:
name: random-generator-secret
key: seed
환경 변수로 사용되거나 볼륨의 형태로 마운트되어 사용될 수 있음
apiVersion: v1
kind: ConfigMap
metadata:
name: random-generator-config
data:
PATTERN: Configuration Resource
application.properties: |
# Random Generator config
log.file=/tmp/generator.log
server.port=7070
EXTRA_OPTIONS: "high-secure,native"
SEED: "432576345
---
apiVersion: v1
kind: Pod
metadata:
name: random-generator
spec:
containers:
envFrom:
- configMapRef:
name: random-generator-config
prefix: CONFIG_
---
apiVersion: v1
kind: Pod
metadata:
name: random-generator
spec:
containers:
- image: k8spatterns/random-generator:1.0
name: random-generator
volumeMounts:
- name: config-volume
mountPath: /config
volumes:
- name: config-volume
configMap:
name: random-generator-config
컨피그를 이미지로 관리한다
FROM busybox
ADD dev.properties /config-src/demo.properties
ENTRYPOINT [ "sh", "-c", "cp /config-src/* $1", "--" ]
initContainers:
- image: k8spatterns/config-dev:1
name: init
args:
- "/config"
volumeMounts:
- mountPath: "/config"
name: config-directory
containers:
- image: k8spatterns/demo:1
name: demo
ports:
- containerPort: 8080
name: http
protocol: TCP
volumeMounts:
- mountPath: "/config"
name: config-directory
volumes:
- name: config-directory
emptyDir: {}
대규모 설정파일이 있고 실행환경에 따라 큰 차이가 없을 때, 컨피그 맵을 사용할 경우 반복/중복 문제가 생기는 것을 피할 수 있음.