๊ฐ์
์ด์ ์ ์ฟ ๋ฒ๋คํฐ์ค์ ์ค๋ธ์ ํธ์ ๋ํด ํ์ตํ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค๋ ํฌ๊ฒ ์ค๋ธ์ ํธ์ ์ค๋ธ์ ํธ๋ฅผ ๊ด๋ฆฌํ๋ ์ปจํธ๋กค๋ฌ๋ก ๋๋๋ค๊ณ ํ์๋๋ฐ ์ด๋ฒ์ ์ปจํธ๋กค๋ฌ์ ๋ํด ์ ๋ฆฌํ๊ณ ์ ํ๋ค.
https://dgjinsu.tistory.com/68
์ปจํธ๋กค๋ฌ๋?
์ฟ ๋ฒ๋คํฐ์ค์ ์ปจํธ๋กค๋ฌ๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ํ๋ ์ํ๋ก ์ ์งํ๊ธฐ ์ํ ์ค์ํ ๊ตฌ์ฑ ์์์ด๋ค. ํ์ฌ ํด๋ฌ์คํฐ์ ์ํ๋ฅผ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ , ์ฌ์ฉ์๊ฐ ์ํ๋ ์ํ์ ๋น๊ตํ์ฌ ์ฐจ์ด๋ฅผ ์กฐ์ ํ๋ค.
์ปจํธ๋กค๋ฌ์ ๊ธฐ๋ฅ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
- Autho Healing
- Software Update
- Auto Sacling
- Job
์ปจํธ๋กค๋ฌ์๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ง๋ง ์ด๋ค ์ค 4๊ฐ์ง๋ง ์์๋ณผ ์์ ์ด๋ค.
- ReplicaSet
- Deployment
- DaemonSet
- Job / CronJob
1. ReplicaSet
๋ ํ๋ฆฌ์นด์ (ReplicaSet)์ ํ๋(Pod) ์งํฉ์ ์คํ์ ์์ ์ ์ผ๋ก ์ ์งํ๋๋ฐ ๋ชฉ์ ์ ๊ฐ์ถ ์ฟ ๋ฒ๋คํฐ์ค ์ํฌ๋ก๋์ด๋ค. ๋ ํ๋ฆฌ์นด์ ์ ์ฌ์ฉ์๊ฐ ์ง์ ํ ๊ฐ์๋งํผ ๋ณต์ ํ๋๋ฅผ ์์ฑํด์ฃผ๊ณ ์ปจํธ๋กค๋ฌ๋ฅผ ์ด์ฉํด ํด๋น ๊ฐ์์ ๋ณต์ ํ๋๊ฐ ์ ์ ์คํ ์ค์ธ์ง ํญ์ ๊ฐ์ํ๋ค. ํ๋ ํ๋์ ๋ฌธ์ ๊ฐ ์๊ฒจ ๋ค์ด๋๋ฉด ์ด๋ฅผ ๊ฐ์งํด ์ ํ๋๋ฅผ ๋ฐ๋ก ์์ฑํด๋ค.
์ฆ, Pod์ ๋ณต์ ๋ณธ ์๋ฅผ ์ ์งํ๊ณ ๊ด๋ฆฌํ๋ ์ปจํธ๋กค๋ฌ์ด๋ค. ์ง์ ๋ ์์ Pod ๋ณธ์ ๋ณธ์ ์ ์งํ๊ณ , Pod๊ฐ ์ญ์ ๋๊ฑฐ๋ ์ฅ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์๋ก์ด Pod๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ค.
ReplicaSet์ด ํด์ฃผ๋ ๋ช ๊ฐ์ง ๊ธฐ๋ฅ๋ค์ด๋ค.
๋จผ์ Pod๊ฐ ์ฃฝ์ผ๋ฉด ์ด๋ฅผ ๊ฐ์งํ๊ณ Pod๋ฅผ ์ฌ์์ฑ ํด์ค๋ค.
์ด๋ฅผ ํ์ฉํ์ฌ ๋ง์ฝ Pod์ Version Upgrade๋ฅผ ํ๊ณ ์ถ๋ค๋ฉด Pod์ Template์ ์์ ํ๊ณ ๊ธฐ์กด์ ๋ ์๋ Pod๋ฅผ ์ ๊ฑฐํ๋ค๋ฉด ์ฌ์์ฑํ ๋ ์ ๋ฒ์ ์ Pod๋ฅผ ๋์ธ ์ ์๋ค.
ReplicaSet์ replicas์ ์ ๋งํผ Pod๋ฅผ ์ ์งํ๋ ค๊ณ ํ๋ค.
๋ฐ๋ผ์ ๋จ์ํ replicas์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒ ๋ง์ผ๋ก๋ Sacle Out์ ์งํํ ์ ์๋ค.
๋ณดํต ๋ฐ๋ก controller์ Pod๋ฅผ ๋ง๋ค์ง replicas๋ฅผ ์ด์ฉํด Controller๋ง ๋ง๋ค๊ณค ํ๋ค.
์๋๋ ์์ yml์ด๋ค.
apiVersion: v1
kind: ReplicationController
metadata:
name: replication-1
spec:
replicas: 1
selector:
type: web
template:
metadata:
name: pod-1
labels:
type: web
spec:
containers:
- name: container
image: tmkube/app:v2
ReplicaSet์์ Pod๋ฅผ Selectํ ๋ matchExpressions ๋ํ ๊ฐ๋ฅํ๋ค.
๋ณดํต Selector์ key์ value๋ชจ๋ ๋์ผํ ๋ Pod๋ฅผ ์ ํํ๋๋ฐ matchExpressions๋ฅผ ์ฌ์ฉํ๋ฉด ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ต์ ์ ์ง์ ํ์ฌ ์กฐ๊ธ ๋ ์ ์ฐํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
์๋์ ๊ฐ์ด yml์ ์์ฑํ๋ฉด์ selector๋ฅผ ์ง์ ํ ์ ์๋ค.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replica-1
spec:
replicas: 3
selector:
matchLabels:
type: web
matchExpressions:
- {key: ver, operator: Exists}
template:
metadata:
name: pod
...
์ ์์ yml์์ operator ๊ฐ์ผ๋ก Exists๋ฅผ ์ง์ ํ๋๋ฐ ์ด๋ key๊ฐ ver์ ๊ฐ์ง๋ Label์ ๊ฐ์ง Pod๋ค์ ์ ๋ถ ์ ํํ๊ฒ ๋ค๋ ๋ป์ด๋ค.
operator์ ์ข ๋ฅ๋ ์๋์ ๊ฐ๋ค.
2. Deployment
ํ๋ก๋์ ํ๊ฒฝ์์๋ ์ ํ์ ๊ฐ๋ฐํด ๋ฐฐํฌํ๊ณ ๋ฐฉ์นํด๋๊ณ ๋ง ์์ง๋ ์๋๋ค. ๊ณ ๊ฐ์ ๋์ฆ์ ๋ฐ๋ผ, ๋ฒ๊ทธ์ ๊ฐ์ ์๋ก์ด ์ด์๊ฐ ๋ฐ ๋๋ง๋ค ์ ํ์ ์ ๋ฐ์ดํธํ๋๋ฐ, ์ด๋ฅผ ์ฌ๋ฐฐํฌํ๊ธฐ ์ํด ์๋ฒ๋ฅผ ์ค๋จํ๋ ๊ฒ์ ํฐ ๋ฐ๋ฐ์ ๊ฐ์ ธ์จ๋ค.
๋ํ๋ก์ด๋จผํธ(Deployment)๋ ํ๋ ๋๋ ๋ ํ๋ฆฌ์นด์ ์ ์ ์ธ์ ์ ๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ๋ ์ํฌ๋ก๋์ด๋ค.
๋ฐฐํฌ ์ ๋ต์๋ Recreate, Rolling Update, Blue/Green, Canary ์ ๋๊ฐ ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค์ ๋ํ๋ก์ด๋จผํธ์์ ๊ธฐ๋ณธ์ ์ผ๋ก Rolling Update ๋ฐฉ์์ ์ ๋ต์ ๊ฐ๋๋ค.
Recreate
Recreate๋ ๊ธฐ์กด ๋ฒ์ ์ Pod๋ค์ ๋ด๋ฆฌ๊ณ ์๋ก์ด ๋ฒ์ ์ Pod๋ค์ ์ฌ๋ฆฌ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ๋ค์ดํ์์ด ๋ฐ์ํ๋ค.
๊ทธ๋ฆผ๊ณผ ๊ฐ์ด Deployment์ template์ ์ ๋ฐ์ดํธ ํ๊ฒ๋๋ฉด ๋จผ์ ๊ธฐ์กด์ ReplicaSet(์ผ์ชฝ)์ replicas๊ฐ์ 0์ผ๋ก ๋ณ๊ฒฝํ๊ฒ ๋๋ค. ์ดํ ์๋ก์ด ReplicaSet์ ๋ง๋ค๊ณ ์ฌ๊ธฐ์ ์๋กญ๊ฒ ๋ณ๊ฒฝ๋ V2์ Pod Template์ด ๋ค์ด๊ฐ๊ฒ ๋๋ค.
์ ๊ทธ๋ฆผ์ ํด๋นํ๋ yml ํ์ผ์ ์๋์ ๊ฐ๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-1
spec:
selector:
matchLabels:
type: app
replicas: 2
strategy:
type: Recreate
revisionHistoryLimit: 1
template:
metadata:
labels:
type: app
spec:
containers:
- name: container
image: tmkube/app:v1
Rolling Update (Default)
๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ฐ์ ReplicaSet์ ๋ง๋๋๋ฐ ์ฒ์์ replicas์ ๊ฐ์ 1์ด๋ค. ์ด ์ํฉ์์ v1 2๊ฐ์ v2 1๊ฐ์ Pod๋ก ํธ๋ํฝ์ด ๋ถ์ฐ๋๋ค.
v2 1๊ฐ ์๋กญ๊ฒ ์ ๋ด๋ค๋ฉด v1์ replica๋ 1๋ก ์ค๊ฒ ๋๊ณ ์ ๊ณผ์ ์ ๊ณ์ ๋ฐ๋ณตํด ํ๋์ฉ ํ๋์ฉ ์ ๋ฒ์ ์ผ๋ก updateํด๋๊ฐ๋ค.
์ ๊ทธ๋ฆผ์ ํด๋นํ๋ yml ํ์ผ์ ์๋์ ๊ฐ๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-2
spec:
selector:
matchLabels:
type: app
replicas: 2
strategy:
type: RollingUpdate
minReadySeconds: 10
template:
metadata:
labels:
type: app
spec:
containers:
- name: container
image: tmkube/app:v1
3. DaemonSet
DaemonSet์ ํด๋ฌ์คํฐ ๋ด์ ๊ฐ ๋ ธ๋์์ ํน์ ํ๋๊ฐ ์คํ๋๋๋ก ๋ณด์ฅํ๋ ๋ฆฌ์์ค์ด๋ค.
์ด๋ ๋ก๊ทธ ์์ง, ๋ชจ๋ํฐ๋ง ์์ด์ ํธ, ๋คํธ์ํฌ ํ๋ฌ๊ทธ์ธ ๋ฑ ์์คํ ์์ค์ ์๋น์ค๋ฅผ ๋ฐฐํฌํ ๋ ์ ์ฉํ๋ค.
DaemonSet์ ํด๋ฌ์คํฐ์ ๋ชจ๋ (๋๋ ์ ํ๋) ๋ ธ๋์ ํ๋๋ฅผ ๋ฐฐํฌํ๊ณ , ์๋ก์ด ๋ ธ๋๊ฐ ํด๋ฌ์คํฐ์ ์ถ๊ฐ๋ ๋๋ง๋ค ์๋์ผ๋ก ํ๋๋ฅผ ์์ฑํ๋ค.
DaemonSet์ selector๋ก Node๋ฅผ ์ฐ๊ฒฐํ๋ค. ๋ง์ฝ centos์์๋ง ๋์๊ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ๋ํด์ผํ ๋ ubuntu os๋ฅผ ๊ฐ๊ณ ์๋ Node๋ ์ ์ธํ๊ณ ์ ํํด์ผ ํ๋ค.
๊ทธ๋ด๋ ์๋์ ๊ฐ์ด nodeSelector๋ฅผ ์ฌ์ฉํด์ Node1, Node2์ ๋ํด์๋ง Pod๋ฅผ ์์ฑํ ์ ์๋ค.
์๋ ์ฝ๋์์ hostPort๋ฅผ ๋ณด๋ฉด Pod๊ฐ ๋์๊ฐ๋ Host์ 18080์ผ๋ก ์ ๊ทผํ๋ฉด 8080 ์ปจํ ์ด๋๋ก ์ฐ๊ฒฐํด์ค๋ค.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemonset-1
spec:
selector:
matchLabels:
type: app
template:
metadata:
labels:
type: app
spec:
nodeSelector:
os: centos
containers:
- name: container
image: tmkube/app
ports:
- containerPort: 8080
hostPort: 18080
4. Job / CronJob
Job
Job์ ๋ด๋ถ์ ์ผ๋ก Pod๋ฅผ ์์ฑํ์ฌ ์์ ์ ์ํํ๊ฒ ๋๋๋ฐ, Pod์ ์ํ๊ฐ Running์ด ์๋ Completed๊ฐ ๋๋ ๊ฒ์ด ์ต์ข ์ํ์ด๋ค.
์คํจ ์ ์ฌ์์, ์์ ์ํ ํ์ ์ง์ , ๋์ ์คํ ์์ ์ ์ง์ ๋ฑ์ ์ธ๋ถ ์ต์ ๋ ์ ๊ณตํ๋ค.
Job์ ๋ช ๊ฐ์ง ์ต์ ์ ์ค ์ ์๋ค.
- completions:
- Job์ด ์๋ฃ๋๊ธฐ ์ํด ํ์ํ ํ๋์ ์ฑ๊ณต ํ์๋ฅผ ์ง์
- parallelism:
- ๋์์ ์คํํ ํ๋์ ์ต๋ ์๋ฅผ ์ง์
- activeDeadlineSeconds:
- Job์ด ์๋ฃ๋๊ธฐ ์ ๊น์ง์ ์ต๋ ์๊ฐ์ ์ด ๋จ์๋ก ์ง์
CronJob
CronJob์ ์ฃผ๊ธฐ์ ์ผ๋ก ํน์ ๋์์ ์ํํ๊ณ ์ข ๋ฃํ๋ ์์ (๋ฐฐ์น ์์ )์ ์ ์ํ๊ธฐ ์ํ ๋ฆฌ์์ค์ด๋ค.
๋ฆฌ๋ ์ค ํฌ๋ก (Cron) ์ค์ผ์ฅด๋ง ๋ฐฉ๋ฒ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค.
๋ด๋ถ์ ์ผ๋ก Job์ ์์ฑํ์ฌ ์์ ์ ์ํํ๋ค. (๊ทธ๋ฆฌ๊ณ Job์ ๋ด๋ถ์ ์ผ๋ก Pod๋ฅผ ๋ง๋ ๋ค.) ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐฑ์ ํ๊ฑฐ๋ ๋ฐ์ดํฐ ์ ๊ฒ ๋ฐ ์๋ฆผ ์ ์ก ๋ฑ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ค.
์ ์ฌ์ง์์ 1๋ถ ๋ง๋ค Job์ด ์์ฑ๋๊ณ Job๋ค์ ๊ฐ๊ฐ ์ ์๋ ๋์์ ์ํํ๋ค.
์๋๋ CronJob์ ์ ์ํ๋ yml ์์์ด๋ค.
apiVersion: batch/v1
kind: CronJob
metadata:
name: cron-job
spec:
schedule: "*/1 * * * *"
concurrencyPolicy: Allow
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
containers:
- name: container
image: tmkube/app
์ฌ๊ธฐ์ ์ดํด๋ณผ ๊ฑด concurrencyPolicy ์ต์ ์ธ๋ฐ ์ด๋ ์ค์ผ์ค๋ ์์ ์ด ์์ง ์คํ ์ค์ธ ์ํ์์ ์๋ก์ด ์์ ์ด ์์๋ ๋์ ๋์ ๋ฐฉ์์ ์ ์ํ๋ค.
concurrencyPolicy ์ต์ ์ 3๊ฐ์ง๊ฐ ์๋ค.
- Allow
- ๊ธฐ๋ณธ๊ฐ
- ๋์์ ์ฌ๋ฌ ์์ ์ด ์คํ๋ ์ ์๋๋ก ํ์ฉ
- ์ฆ, ์ด์ ์์ ์ด ์์ง ์ข ๋ฃ๋์ง ์์๋๋ผ๋ ์๋ก์ด ์์ ์ด ์์๋จ
- Forbid
- ์ด์ ์์ ์ด ์์ง ์คํ ์ค์ธ ๊ฒฝ์ฐ, ์๋ก์ด ์์ ์ด ์์๋์ง ์๋๋ค.
- ์ด์ ์์ ์ด ์๋ฃ๋ ํ์๋ง ์๋ก์ด ์์ ์ด ์์
- ์์ ์ด ๊ฒน์น์ง ์๋๋ก ๋ณด์ฅ
- Replace
- ์ด์ ์์ ์ด ์์ง ์คํ ์ค์ธ ๊ฒฝ์ฐ, ์คํ ์ค์ธ ์์ ์ ์ค๋จํ๊ณ ์๋ก์ด ์์ ์ผ๋ก ๊ต์ฒด