쿠버네티스 패턴 중 3부(구조패턴), 4부(설정패턴), 5부(고급패턴)을 다룬다.
쿠버네티스의 기본 단위인 Pod를 구조적으로 어떻게 구성할 수 있을까?
Pod의 컨테이너를 시작하기 전에 필요한 조건들을 갖추기 위해 Init container를 사용하는 패턴.
apiVersion: v1
kind: Pod
metadata:
name: www
labels:
app: www
spec:
initContainers:
- name: download
image: axeclbr/git
command:
- git
- clone
- https://github.com/mdn/beginner-html-site-scripted
- /var/lib/data
volumeMounts:
- mountPath: /var/lib/data
name: source
containers:
- name: run
image: docker.io/centos/httpd
ports:
- containerPort: 80
volumeMounts:
- mountPath: /var/www/html
name: source
volumes:
- emptyDir: {}
name: source
단일 목적을 갖는 여러 개의 컨테이너들이 서로 협력하도록 구성한다.
컨테이너들이 언어가 다르거나, 릴리즈 주기가 다른 팀들이 각자 개발할 수 있음
기본 컨테이너를 변경하지 않고 목적에 따라 사이드카 컨테이너를 교체할 수 있음.
분산 시스템에서 다른 기술로 만들어진 여러 종류의 컴포넌트(컨테이너)들이 다른 시스템에 이해 통일된 방식으로 처리되어야 할 때.
apiVersion: apps/v1
kind: Deployment
metadata:
name: random-generator
spec:
replicas: 1
selector:
matchLabels:
app: random-generator
template:
metadata:
labels:
app: random-generator
spec:
containers:
- image: k8spatterns/random-generator:1.0
name: random-generator
env:
- name: LOG_FILE
value: /logs/random.log
ports:
- containerPort: 8080
protocol: TCP
volumeMounts:
- mountPath: /logs
name: log-volume
# ---------------------------------------
- image: k8spatterns/random-generator-exporter
name: prometheus-adapter
env:
- name: LOG_FILE
value: /logs/random.log
ports:
- containerPort: 9889
protocol: TCP
volumeMounts:
- mountPath: /logs
name: log-volume
volumes:
- name: log-volume
emptyDir: {}
애플리케이션 컨테이너들이 외부 의존성에 직접 접근하지 않고, 앰배서더를 통해 접근하는 것.