๐ ๋ค์ด๊ฐ๋ฉฐ
์ด๋ฒ ๊ธ์์๋ ํ๋๋ฅผ ์์ ํ๊ฒ ๊ต์ฒดํ๋ Rollout(๋กค๋ง ์
๋ฐ์ดํธ) ๋ฉ์ปค๋์ฆ๊ณผ, Pod ์ฌ์์ vs ์ปจํ
์ด๋ ์ฌ์์์ ์ฐจ์ด๋ฅผ ์ ๋ฆฌํ๋ค. RESTARTSยทAGE๊ฐ ์ ๋ฐ๋๋์ง, ๊ทธ๋ฆฌ๊ณ OOMKilled ๊ฐ์ ์ฌ์์ ์์ธ์ ์ด๋ป๊ฒ ์ง๋จํ๋์ง ์ดํด๋ณธ๋ค.
ํต์ฌ ๊ตฌ๋ถ โ Pod ์ฌ์์์ ํ๋๋ฅผ ์ญ์ ํ ์ฌ์์ฑ(IPยทAGE ์ด๊ธฐํ)์ด๊ณ , ์ปจํ
์ด๋ ์ฌ์์์ ํ๋๋ ์ ์งํ ์ฑ ์ปจํ
์ด๋๋ง ๋ค์ ๋จ๋ ๊ฒ(RESTARTS ์ฆ๊ฐ)์ด๋ค. ์์ธ๊ณผ ์ฆ์์ด ์์ ํ ๋ค๋ฅด๋ค.
1. Pod ์ฌ์์ vs ์ปจํ
์ด๋ ์ฌ์์
flowchart TB
subgraph PodR["Pod ์ฌ์์"]
A["Pod ์ญ์ โ ์ฌ์์ฑ"] --> B["IPยทAGE ์ด๊ธฐํ<br/>RESTARTS=0"]
end
subgraph CtnR["์ปจํ
์ด๋ ์ฌ์์"]
C["์ปจํ
์ด๋๋ง ์ฌ์์"] --> D["IPยทAGE ์ ์ง<br/>RESTARTS ๋์ โ"]
end
| ํญ๋ชฉ | Pod ์ฌ์์ | ์ปจํ
์ด๋ ์ฌ์์ |
|---|
| AGE | ์ด๊ธฐํ | ์ ์ง |
| IP | ๋ณ๊ฒฝ | ์ ์ง |
| RESTARTS | 0์ผ๋ก ์ด๊ธฐํ | ๋์ ์ฆ๊ฐ |
| ์์ธ | kubectl deleteยท๋
ธ๋ ์ฅ์ ยทrollout | OOMKillยทCrashยทProbe ์คํจ |
๐ก ๋๋ฒ๊น
์ฒซ ๋จ์ถ๋ kubectl get pods์ ๋ ์ปฌ๋ผ์ด๋ค. AGE๊ฐ ์งง์์ก์ผ๋ฉด Pod ์ฌ์์, RESTARTS๋ง ์ฌ๋์ผ๋ฉด ์ปจํ
์ด๋ ์ฌ์์์ด๋ค. ์ด๊ฒ๋ง ๋ด๋ โํ๋๊ฐ ์๋ก ๋ด๋์ง vs ์ปจํ
์ด๋๊ฐ ์ฃฝ๋ค ์ด์๋์งโ๋ฅผ ๊ตฌ๋ถํ ์ ์๋ค.
2. Rollout ๋ฉ์ปค๋์ฆ
spec ๋ณ๊ฒฝ(์ด๋ฏธ์งยทannotation ๋ฑ)์ ๊ฐ์งํ๋ฉด updateStrategy์ ๋ฐ๋ผ ํ๋๋ฅผ ์์ฐจ ๊ต์ฒดํ๋ค.
1
| spec ๋ณ๊ฒฝ โ ์ Pod ์์ฑ โ Running ํ์ธ โ ๊ธฐ์กด Pod ์ญ์ โ ๋ฐ๋ณต
|
kubectl rollout restart๋ ํ๋ spec์ ์ง์ ์ ๋ฐ๊พธ๊ณ annotation์ ์ฌ์์ ์๊ฐ์ ์ฌ์ด ๋กค๋ง ์
๋ฐ์ดํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ค.
1
2
| kubectl rollout restart daemonset calico-node -n kube-system
# annotation: kubectl.kubernetes.io/restartedAt: "..." โ Rolling Update ํธ๋ฆฌ๊ฑฐ
|
3. updateStrategy
Deployment (RollingUpdate)
1
2
3
4
5
6
7
| spec:
replicas: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1 # ๋์์ ๋ด๋ฆด ์ ์๋ Pod ์
maxSurge: 1 # ์ถ๊ฐ๋ก ์ฌ๋ฆด ์ ์๋ Pod ์
|
1
| ์ Pod +1(maxSurge) โ ์ด 6๊ฐ โ Running ํ์ธ โ ๊ธฐ์กด -1(maxUnavailable) โ 5๊ฐ โ ๋ฐ๋ณต
|
DaemonSet (๋
ธ๋๋น 1๊ฐ)
1
2
3
4
5
6
| spec:
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1 # ํ ๋ฒ์ 1๊ฐ ๋
ธ๋์ฉ
maxSurge: 0 # ๋
ธ๋๋น 1๊ฐ๋ผ Surge ๋ถ๊ฐ
|
| type | ๋์ | ์ฌ์ฉ |
|---|
| RollingUpdate | ์์ฐจ ๊ต์ฒด(๊ธฐ๋ณธ) | ์ผ๋ฐ ์
๋ฐ์ดํธ |
| OnDelete | ์๋ ์ญ์ ์๋ง ๊ต์ฒด | ์๋ ์ ์ด |
๐ก DaemonSet์ ๋
ธ๋๋น ํ๋ 1๊ฐ๋ผ maxSurge๊ฐ 0์ด๋ค(์ถ๊ฐ๋ก ๋์ธ ์๋ฆฌ๊ฐ ์์). ๊ทธ๋์ ๋ฐ๋์ maxUnavailable: 1๋ก ํ ๋
ธ๋์ฉ ๊ต์ฒดํด์ผ ํ๋ฉฐ, calico-node ๊ฐ์ ๋คํธ์ํฌ DaemonSet์ ์ด ์ค์ ์ ์ด๊ธฐ๋ฉด ํด๋ฌ์คํฐ ๋คํธ์ํฌ๊ฐ ํต์งธ๋ก ํ๋ค๋ฆฐ๋ค.
4. Rollout ๋ช
๋ น์ด
1
2
3
4
5
6
| kubectl rollout restart deployment web-app -n default # ์ฌ์์
kubectl rollout status deployment web-app -n default # ์งํ ์ํฉ
kubectl rollout pause/resume deployment web-app # ์ค์ง/์ฌ๊ฐ
kubectl rollout history deployment web-app # ์ด๋ ฅ
kubectl rollout undo deployment web-app # ๋กค๋ฐฑ
kubectl rollout undo deployment web-app --to-revision=1 # ํน์ ๋ฒ์
|
5. ์ปจํ
์ด๋ ์ฌ์์ ์์ธ ๋ถ์
1
2
3
4
5
| # ์ฌ์์ ์์ธ(Last State)
kubectl describe pod <pod> -n <ns> | grep -A 10 "Last State"
# Reason: OOMKilled / Exit Code: 137 ...
kubectl logs <pod> -n <ns> --previous # ์ด์ ์ปจํ
์ด๋ ๋ก๊ทธ
|
| ์์ธ | ์ฆ์ | ์กฐ์น |
|---|
| OOMKilled | Exit Code 137 | Memory Limit ์ฆ๊ฐ |
| CrashLoopBackOff | Exit Code 1 | ๋ก๊ทธ ํ์ธยท์ฝ๋ ์์ |
| Liveness Probe ์คํจ | probe failed | Probe ์ค์ ์ ๊ฒ |
| ๋
ธ๋ ๋ฆฌ์์ค ๋ถ์กฑ | ๋ค์ Pod ๋์ ์ฌ์์ | kubectl top nodes |
โ ๏ธ Exit Code 137 = OOMKilled(๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ ๊ฐ์ ์ข
๋ฃ)๋ค. RESTARTS๊ฐ ๊ณ์ ์ค๋ฅด๋ฉด ์ญ์คํ๊ตฌ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ด๋, kubectl top pod๋ก ์ฌ์ฉ๋์ ๋ณด๊ณ limits.memory๋ฅผ ์ฌ๋ฆฐ๋ค.
6. ์์ ์ค์ ์ฃผ์์ฌํญ
โ ๏ธ maxUnavailable์ ํฌ๊ฒ ์ก์ง ๋ง ๊ฒ. replicas 5์ maxUnavailable: 5๋ฉด ์ ๋ถ ๋์์ ๋ด๋ ค๊ฐ ์๋น์ค๊ฐ ์ค๋จ๋๋ค. maxUnavailable: 1๋ก ์ต์ ๊ฐ์ฉ์ฑ์ ์งํจ๋ค.
โ ๏ธ readinessProbe๋ ํ์. Probe๊ฐ ์์ผ๋ฉด ์ ํ๋๊ฐ ์ค๋น๋ ์ ๋ ์ํ๋ก ํธ๋ํฝ์ ๋ฐ์ ๋กค๋ง ์ค ์๋ฌ๊ฐ ๋๋ค. /health ๊ฐ์ ์ค๋น ์ํ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋์ ๋๋ค.
1
2
3
4
5
6
| readinessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
|
๐ ์ ๋ฆฌ
1
2
3
4
5
6
| Rollout & ์ฌ์์
โโ ๊ตฌ๋ถ Pod ์ฌ์์(IPยทAGE ์ด๊ธฐํ) vs ์ปจํ
์ด๋ ์ฌ์์(RESTARTSโ)
โโ ๋์ spec ๋ณ๊ฒฝ โ updateStrategy ์์ฐจ ๊ต์ฒด
โโ ์ ๋ต maxUnavailable:1 / DaemonSet์ maxSurge:0
โโ ์ง๋จ describe(Last State) ยท logs --previous
โโ ์์ readinessProbe ํ์
|
| ๊ฐ๋
| ํ ์ค ์ ์ |
|---|
| Rollout | ์์ฐจ ๋ฌด์ค๋จ ๊ต์ฒด |
| RESTARTS 137 | OOMKilled(๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ) |
| maxUnavailable | ๋์ ์ค๋จ ํ์ฉ ์ |
Rollout์ ํต์ฌ์ ์ ํ๋๋ฅผ ํ์ธํ๋ฉฐ ๊ธฐ์กด ํ๋๋ฅผ ํ๋์ฉ ๊ต์ฒดํ๋ ๊ฒ์ด๊ณ , ์์ ์ ํต์ฌ์ maxUnavailable: 1 + readinessProbe๋ค. ์ฌ์์ ๋ฌธ์ ๋ AGE/RESTARTS ๋ ์ปฌ๋ผ๊ณผ Last State๋ก ๋น ๋ฅด๊ฒ ์ง๋จํ ์ ์๋ค.
๐ ์ฐธ๊ณ
Comments powered by Disqus.