Information in this document may be out of date

This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Deployments

๋””ํ”Œ๋กœ์ด๋จผํŠธ

๋””ํ”Œ๋กœ์ด๋จผํŠธ(Deployment) ๋Š” ํŒŒ๋“œ์™€ ๋ ˆํ”Œ๋ฆฌ์นด์…‹(ReplicaSet)์— ๋Œ€ํ•œ ์„ ์–ธ์  ์—…๋ฐ์ดํŠธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

๋””ํ”Œ๋กœ์ด๋จผํŠธ์—์„œ ์˜๋„ํ•˜๋Š” ์ƒํƒœ ๋ฅผ ์„ค๋ช…ํ•˜๊ณ , ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ปจํŠธ๋กค๋Ÿฌ(Controller)๋Š” ํ˜„์žฌ ์ƒํƒœ์—์„œ ์˜๋„ํ•˜๋Š” ์ƒํƒœ๋กœ ๋น„์œจ์„ ์กฐ์ •ํ•˜๋ฉฐ ๋ณ€๊ฒฝํ•œ๋‹ค. ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์ƒ์„ฑํ•˜๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒˆ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ ์Šค์ผ€์ด์Šค

๋‹ค์Œ์€ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์ผ๋ฐ˜์ ์ธ ์œ ์Šค์ผ€์ด์Šค์ด๋‹ค.

๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ƒ์„ฑ

๋‹ค์Œ์€ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์˜ˆ์‹œ์ด๋‹ค. ์˜ˆ์‹œ๋Š” 3๊ฐœ์˜ nginx ํŒŒ๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•œ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์ƒ์„ฑํ•œ๋‹ค.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

์ด ์˜ˆ์‹œ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • .metadata.name ํ•„๋“œ์— ๋”ฐ๋ผ, nginx-deployment ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

  • .spec.replicas ํ•„๋“œ์— ๋”ฐ๋ผ, ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋Š” 3๊ฐœ์˜ ๋ ˆํ”Œ๋ฆฌ์นด ํŒŒ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์ƒ์„ฑํ•œ๋‹ค.

  • .spec.selector ํ•„๋“œ๋Š”, ์ƒ์„ฑ๋œ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด ๊ด€๋ฆฌํ•  ํŒŒ๋“œ๋ฅผ ์ฐพ์•„๋‚ด๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•œ๋‹ค. ์ด ์‚ฌ๋ก€์—์„œ๋Š” ํŒŒ๋“œ ํ…œํ”Œ๋ฆฟ์— ์ •์˜๋œ ๋ ˆ์ด๋ธ”(app: nginx)์„ ์„ ํƒํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํŒŒ๋“œ ํ…œํ”Œ๋ฆฟ ์ž์ฒด์˜ ๊ทœ์น™์ด ๋งŒ์กฑ๋˜๋Š” ํ•œ, ๋ณด๋‹ค ์ •๊ตํ•œ ์„ ํƒ ๊ทœ์น™์˜ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • .spec.template ํ•„๋“œ์—๋Š” ๋‹ค์Œ ํ•˜์œ„ ํ•„๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

    • ํŒŒ๋“œ๋Š” .metadata.labels ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ app: nginx ๋ผ๋Š” ๋ ˆ์ด๋ธ”์„ ๋ถ™์ธ๋‹ค.
    • ํŒŒ๋“œ ํ…œํ”Œ๋ฆฟ์˜ ์‚ฌ์–‘ ๋˜๋Š” .spec ํ•„๋“œ๋Š” ํŒŒ๋“œ๊ฐ€ ๋„์ปค ํ—ˆ๋ธŒ์˜ nginx 1.14.2 ๋ฒ„์ „ ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•˜๋Š” nginx ์ปจํ…Œ์ด๋„ˆ 1๊ฐœ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • ์ปจํ…Œ์ด๋„ˆ 1๊ฐœ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , .spec.containers[0].name ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ nginx ์ด๋ฆ„์„ ๋ถ™์ธ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์‹œ์ž‘๋˜๊ณ  ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•œ๋‹ค. ์œ„์˜ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

  1. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด์„œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
kubectl apply -f https://k8s.io/examples/controllers/nginx-deployment.yaml
  1. kubectl get deployments ์„ ์‹คํ–‰ํ•ด์„œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

๋งŒ์•ฝ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์—ฌ์ „ํžˆ ์ƒ์„ฑ ์ค‘์ด๋ฉด, ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   0/3     0            0           1s

ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ ๊ฒ€ํ•  ๋•Œ, ๋‹ค์Œ ํ•„๋“œ๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค.

  • NAME ์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์žˆ๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ด๋ฆ„์˜ ๋ชฉ๋ก์ด๋‹ค.
  • READY ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ ˆํ”Œ๋ฆฌ์นด์˜ ์ˆ˜๋ฅผ ํ‘œ์‹œํ•œ๋‹ค. ready/desired ํŒจํ„ด์„ ๋”ฐ๋ฅธ๋‹ค.
  • UP-TO-DATE ๋Š” ์˜๋„ํ•œ ์ƒํƒœ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ์—…๋ฐ์ดํŠธ๋œ ๋ ˆํ”Œ๋ฆฌ์นด์˜ ์ˆ˜๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.
  • AVAILABLE ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆํ”Œ๋ฆฌ์นด์˜ ์ˆ˜๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.
  • AGE ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰๋œ ์‹œ๊ฐ„์„ ํ‘œ์‹œํ•œ๋‹ค.

.spec.replicas ํ•„๋“œ์— ๋”ฐ๋ผ ์˜๋„ํ•œ ๋ ˆํ”Œ๋ฆฌ์นด์˜ ์ˆ˜๊ฐ€ 3๊ฐœ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  1. ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ๋กค์•„์›ƒ ์ƒํƒœ๋ฅผ ๋ณด๋ ค๋ฉด, kubectl rollout status deployment/nginx-deployment ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

    ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
    deployment "nginx-deployment" successfully rolled out
    
  2. ๋ช‡ ์ดˆ ํ›„ kubectl get deployments ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•œ๋‹ค. ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   3/3     3            3           18s
    

    ๋””ํ”Œ๋กœ์ด๋จผํŠธ์—์„œ 3๊ฐœ์˜ ๋ ˆํ”Œ๋ฆฌ์นด๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๊ณ , ๋ชจ๋“  ๋ ˆํ”Œ๋ฆฌ์นด๋Š” ์ตœ์‹  ์ƒํƒœ(์ตœ์‹  ํŒŒ๋“œ ํ…œํ”Œ๋ฆฟ์„ ํฌํ•จ)์ด๋ฉฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  3. ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋กœ ์ƒ์„ฑ๋œ ๋ ˆํ”Œ๋ฆฌ์นด์…‹(rs)์„ ๋ณด๋ ค๋ฉด, kubectl get rs ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    NAME                          DESIRED   CURRENT   READY   AGE
    nginx-deployment-75675f5897   3         3         3       18s
    

    ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ ์ถœ๋ ฅ์—๋Š” ๋‹ค์Œ ํ•„๋“œ๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค.

    • NAME ์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์žˆ๋Š” ๋ ˆํ”Œ๋ฆฌ์นด์…‹ ์ด๋ฆ„์˜ ๋ชฉ๋ก์ด๋‹ค.
    • DESIRED ๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์ƒ์„ฑ ์‹œ ์ •์˜๋œ ์˜๋„ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆํ”Œ๋ฆฌ์นด ์˜ ์ˆ˜๋ฅผ ํ‘œ์‹œํ•œ๋‹ค. ์ด๊ฒƒ์ด ์˜๋„ํ•œ ์ƒํƒœ ์ด๋‹ค.
    • CURRENT ๋Š” ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ๋ ˆํ”Œ๋ฆฌ์นด์˜ ์ˆ˜๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.
    • READY ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ ˆํ”Œ๋ฆฌ์นด์˜ ์ˆ˜๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.
    • AGE ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰๋œ ์‹œ๊ฐ„์„ ํ‘œ์‹œํ•œ๋‹ค.

    ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ ์ด๋ฆ„์€ ํ•ญ์ƒ [DEPLOYMENT-NAME]-[HASH] ํ˜•์‹์œผ๋กœ ๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. HASH ๋ฌธ์ž์—ด์€ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ pod-template-hash ๋ ˆ์ด๋ธ”๊ณผ ๊ฐ™๋‹ค.

  4. ๊ฐ ํŒŒ๋“œ์— ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ ๋ ˆ์ด๋ธ”์„ ๋ณด๋ ค๋ฉด, kubectl get pods --show-labels ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    NAME                                READY     STATUS    RESTARTS   AGE       LABELS
    nginx-deployment-75675f5897-7ci7o   1/1       Running   0          18s       app=nginx,pod-template-hash=3123191453
    nginx-deployment-75675f5897-kzszj   1/1       Running   0          18s       app=nginx,pod-template-hash=3123191453
    nginx-deployment-75675f5897-qqcnn   1/1       Running   0          18s       app=nginx,pod-template-hash=3123191453
    

    ๋งŒ๋“ค์–ด์ง„ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ ์‹คํ–‰ ์ค‘์ธ 3๊ฐœ์˜ nginx ํŒŒ๋“œ๋ฅผ ๋ณด์žฅํ•œ๋‹ค.

Pod-template-hash ๋ ˆ์ด๋ธ”

pod-template-hash ๋ ˆ์ด๋ธ”์€ ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ปจํŠธ๋กค๋Ÿฌ์— ์˜ํ•ด์„œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์ƒ์„ฑ ๋˜๋Š” ์ฑ„ํƒํ•œ ๋ชจ๋“  ๋ ˆํ”Œ๋ฆฌ์นด์…‹์— ์ถ”๊ฐ€๋œ๋‹ค.

์ด ๋ ˆ์ด๋ธ”์€ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์ž์‹ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด ๊ฒน์น˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•œ๋‹ค. ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ PodTemplate ์„ ํ•ด์‹ฑํ•˜๊ณ , ํ•ด์‹œ ๊ฒฐ๊ณผ๋ฅผ ๋ ˆํ”Œ๋ฆฌ์นด์…‹ ์…€๋ ‰ํ„ฐ, ํŒŒ๋“œ ํ…œํ”Œ๋ฆฟ ๋ ˆ์ด๋ธ” ๋ฐ ๋ ˆํ”Œ๋ฆฌ์นด์…‹ ์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ธฐ์กด์˜ ๋ชจ๋“  ํŒŒ๋“œ์— ๋ ˆ์ด๋ธ” ๊ฐ’์œผ๋กœ ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉํ•˜๋„๋ก ์ƒ์„ฑํ•œ๋‹ค.

๋””ํ”Œ๋กœ์ด๋จผํŠธ ์—…๋ฐ์ดํŠธ

๋‹ค์Œ ๋‹จ๊ณ„์— ๋”ฐ๋ผ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

  1. nginx:1.14.2 ์ด๋ฏธ์ง€ ๋Œ€์‹  nginx:1.16.1 ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก nginx ํŒŒ๋“œ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.

    kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1
    

    ๋˜๋Š” ๋‹ค์Œ์˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

    kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1
    

    ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    deployment.apps/nginx-deployment image updated
    

    ๋Œ€์•ˆ์œผ๋กœ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ edit ํ•ด์„œ .spec.template.spec.containers[0].image ๋ฅผ nginx:1.14.2 ์—์„œ nginx:1.16.1 ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

    kubectl edit deployment/nginx-deployment
    

    ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    deployment.apps/nginx-deployment edited
    
  2. ๋กค์•„์›ƒ ์ƒํƒœ๋ฅผ ๋ณด๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•œ๋‹ค.

    kubectl rollout status deployment/nginx-deployment
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
    

    ๋˜๋Š”

    deployment "nginx-deployment" successfully rolled out
    

์—…๋ฐ์ดํŠธ๋œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์— ๋Œ€ํ•ด ์ž์„ธํ•œ ์ •๋ณด ๋ณด๊ธฐ

  • ๋กค์•„์›ƒ์ด ์„ฑ๊ณตํ•˜๋ฉด kubectl get deployments ๋ฅผ ์‹คํ–‰ํ•ด์„œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   3/3     3            3           36s
    
  • kubectl get rs ๋ฅผ ์‹คํ–‰ํ•ด์„œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์ƒ์„ฑํ•ด์„œ ํŒŒ๋“œ๋ฅผ ์—…๋ฐ์ดํŠธ ํ–ˆ๋Š”์ง€ ๋ณผ ์ˆ˜ ์žˆ๊ณ , ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์ตœ๋Œ€ 3๊ฐœ์˜ ๋ ˆํ”Œ๋ฆฌ์นด๋กœ ์Šค์ผ€์ผ ์—…, ์ด์ „ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ 0๊ฐœ์˜ ๋ ˆํ”Œ๋ฆฌ์นด๋กœ ์Šค์ผ€์ผ ๋‹ค์šดํ•œ๋‹ค.

    kubectl get rs
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    NAME                          DESIRED   CURRENT   READY   AGE
    nginx-deployment-1564180365   3         3         3       6s
    nginx-deployment-2035384211   0         0         0       36s
    
  • get pods ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ƒˆ ํŒŒ๋“œ๋งŒ ํ‘œ์‹œ๋œ๋‹ค.

    kubectl get pods
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    NAME                                READY     STATUS    RESTARTS   AGE
    nginx-deployment-1564180365-khku8   1/1       Running   0          14s
    nginx-deployment-1564180365-nacti   1/1       Running   0          14s
    nginx-deployment-1564180365-z9gth   1/1       Running   0          14s
    

    ๋‹ค์Œ์— ์ด๋Ÿฌํ•œ ํŒŒ๋“œ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋ ค๋ฉด ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ํŒŒ๋“œ ํ…œํ”Œ๋ฆฟ๋งŒ ๋‹ค์‹œ ์—…๋ฐ์ดํŠธ ํ•˜๋ฉด ๋œ๋‹ค.

    ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋Š” ์—…๋ฐ์ดํŠธ๋˜๋Š” ๋™์•ˆ ์ผ์ •ํ•œ ์ˆ˜์˜ ํŒŒ๋“œ๋งŒ ์ค‘๋‹จ๋˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ ์–ด๋„ ์˜๋„ํ•œ ํŒŒ๋“œ ์ˆ˜์˜ 75% ์ด์ƒ์ด ๋™์ž‘ํ•˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค(์ตœ๋Œ€ 25% ๋ถˆ๊ฐ€).

    ๋˜ํ•œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋Š” ์˜๋„ํ•œ ํŒŒ๋“œ ์ˆ˜ ๋ณด๋‹ค ๋” ๋งŽ์ด ์ƒ์„ฑ๋˜๋Š” ํŒŒ๋“œ์˜ ์ˆ˜๋ฅผ ์ œํ•œํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ, ์˜๋„ํ•œ ํŒŒ๋“œ์˜ ์ˆ˜ ๊ธฐ์ค€ ์ตœ๋Œ€ 125%๊นŒ์ง€๋งŒ ์ถ”๊ฐ€ ํŒŒ๋“œ๊ฐ€ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œํ•œ๋‹ค(์ตœ๋Œ€ 25% ๊นŒ์ง€).

    ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด ๋จผ์ € ์ƒˆ๋กœ์šด ํŒŒ๋“œ๋ฅผ ์ƒ์„ฑํ•œ ๋‹ค์Œ, ์ด์ „ ํŒŒ๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ณ , ๋˜ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ํŒŒ๋“œ๋ฅผ ๋งŒ๋“  ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ถฉ๋ถ„ํ•œ ์ˆ˜์˜ ์ƒˆ๋กœ์šด ํŒŒ๋“œ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ์ด์ „ ํŒŒ๋“œ๋ฅผ ์ฃฝ์ด์ง€ ์•Š์œผ๋ฉฐ, ์ถฉ๋ถ„ํ•œ ์ˆ˜์˜ ์ด์ „ ํŒŒ๋“œ๋“ค์ด ์ฃฝ๊ธฐ ์ „๊นŒ์ง€ ์ƒˆ๋กœ์šด ํŒŒ๋“œ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค. ์ด๊ฒƒ์€ ์ตœ์†Œ 3๊ฐœ์˜ ํŒŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ณ , ์ตœ๋Œ€ 4๊ฐœ์˜ ํŒŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ๋ ˆํ”Œ๋ฆฌ์นด ํฌ๊ธฐ๊ฐ€ 4์ธ ๊ฒฝ์šฐ, ํŒŒ๋“œ ์ˆซ์ž๋Š” 3๊ฐœ์—์„œ 5๊ฐœ ์‚ฌ์ด์ด๋‹ค.

  • ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์„ธ๋ถ€ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ

    kubectl describe deployments
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    Name:                   nginx-deployment
    Namespace:              default
    CreationTimestamp:      Thu, 30 Nov 2017 10:56:25 +0000
    Labels:                 app=nginx
    Annotations:            deployment.kubernetes.io/revision=2
    Selector:               app=nginx
    Replicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailable
    StrategyType:           RollingUpdate
    MinReadySeconds:        0
    RollingUpdateStrategy:  25% max unavailable, 25% max surge
    Pod Template:
      Labels:  app=nginx
       Containers:
        nginx:
          Image:        nginx:1.16.1
          Port:         80/TCP
          Environment:  <none>
          Mounts:       <none>
        Volumes:        <none>
      Conditions:
        Type           Status  Reason
        ----           ------  ------
        Available      True    MinimumReplicasAvailable
        Progressing    True    NewReplicaSetAvailable
      OldReplicaSets:  <none>
      NewReplicaSet:   nginx-deployment-1564180365 (3/3 replicas created)
      Events:
        Type    Reason             Age   From                   Message
        ----    ------             ----  ----                   -------
        Normal  ScalingReplicaSet  2m    deployment-controller  Scaled up replica set nginx-deployment-2035384211 to 3
        Normal  ScalingReplicaSet  24s   deployment-controller  Scaled up replica set nginx-deployment-1564180365 to 1
        Normal  ScalingReplicaSet  22s   deployment-controller  Scaled down replica set nginx-deployment-2035384211 to 2
        Normal  ScalingReplicaSet  22s   deployment-controller  Scaled up replica set nginx-deployment-1564180365 to 2
        Normal  ScalingReplicaSet  19s   deployment-controller  Scaled down replica set nginx-deployment-2035384211 to 1
        Normal  ScalingReplicaSet  19s   deployment-controller  Scaled up replica set nginx-deployment-1564180365 to 3
        Normal  ScalingReplicaSet  14s   deployment-controller  Scaled down replica set nginx-deployment-2035384211 to 0
    

    ์ฒ˜์Œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ƒ์„ฑํ–ˆ์„ ๋•Œ, ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ๋ ˆํ”Œ๋ฆฌ์นด์…‹(nginx-deployment-2035384211)์„ ์ƒ์„ฑํ•˜๊ณ  3๊ฐœ์˜ ๋ ˆํ”Œ๋ฆฌ์นด๋กœ ์ง์ ‘ ์Šค์ผ€์ผ ์—…ํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์ž, ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹(nginx-deployment-1564180365)์„ ์ƒ์„ฑํ•˜๊ณ , 1๊ฐœ๋กœ ์Šค์ผ€์ผ ์—…ํ•œ ๋‹ค์Œ ๋ชจ๋‘ ์‹คํ–‰๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜์˜€๋‹ค. ๊ทธ ๋’ค ์ด์ „ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ 2๊ฐœ๋กœ ์Šค์ผ€์ผ ๋‹ค์šดํ•˜๊ณ  ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ 2๊ฐœ๋กœ ์Šค์ผ€์ผ ์—…ํ•˜์—ฌ ๋ชจ๋“  ์‹œ์ ์— ๋Œ€ํ•ด ์ตœ์†Œ 3๊ฐœ / ์ตœ๋Œ€ 3๊ฐœ์˜ ํŒŒ๋“œ๊ฐ€ ์กด์žฌํ•˜๋„๋ก ํ•˜์˜€๋‹ค. ์ดํ›„ ์ง€์†ํ•ด์„œ ๊ฐ™์€ ๋กค๋ง ์—…๋ฐ์ดํŠธ ์ •์ฑ…์œผ๋กœ ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ ์Šค์ผ€์ผ ์—…ํ•˜๊ณ  ์ด์ „ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ ์Šค์ผ€์ผ ๋‹ค์šดํ•œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ƒˆ๋กœ์šด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์— 3๊ฐœ์˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ ˆํ”Œ๋ฆฌ์นด๊ฐ€ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์ด์ „ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ 0๊ฐœ๋กœ ์Šค์ผ€์ผ ๋‹ค์šด๋œ๋‹ค.

๋กค์˜ค๋ฒ„(์ผ๋ช… ์ธ-ํ”Œ๋ผ์ดํŠธ ๋‹ค์ค‘ ์—…๋ฐ์ดํŠธ)

๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๊ฐ ์‹œ๊ฐ„๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋””ํ”Œ๋กœ์ด๋จผํŠธ์—์„œ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด ์˜๋„ํ•œ ํŒŒ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋„์šฐ๋Š” ๊ฒƒ์„ ์ฃผ์‹œํ•œ๋‹ค. ๋งŒ์•ฝ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋ฉด, ๊ธฐ์กด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์—์„œ .spec.selector ๋ ˆ์ด๋ธ”๊ณผ ์ผ์น˜ํ•˜๋Š” ํŒŒ๋“œ๋ฅผ ์ปจํŠธ๋กค ํ•˜์ง€๋งŒ, ํ…œํ”Œ๋ฆฟ๊ณผ .spec.template ์ด ๋ถˆ์ผ์น˜ํ•˜๋ฉด ์Šค์ผ€์ผ ๋‹ค์šด์ด ๋œ๋‹ค. ๊ฒฐ๊ตญ ์ƒˆ๋กœ์šด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ .spec.replicas ๋กœ ์Šค์ผ€์ผ๋˜๊ณ , ๋ชจ๋“  ๊ธฐ์กด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ 0๊ฐœ๋กœ ์Šค์ผ€์ผ๋œ๋‹ค.

๋งŒ์•ฝ ๊ธฐ์กด ๋กค์•„์›ƒ์ด ์ง„ํ–‰๋˜๋Š” ์ค‘์— ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒฝ์šฐ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ์— ๋”ฐ๋ผ ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์ƒ์„ฑํ•˜๊ณ , ์Šค์ผ€์ผ ์—…ํ•˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด์ „์— ์Šค์ผ€์ผ ์—… ํ•˜๋˜ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์— ๋กค์˜ค๋ฒ„ ํ•œ๋‹ค. --์ด๊ฒƒ์€ ๊ธฐ์กด ๋ ˆํ”Œ๋ฆฌ์นด์…‹ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•˜๊ณ  ์Šค์ผ€์ผ ๋‹ค์šด์„ ํ•  ๊ฒƒ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋กœ nginx:1.14.2 ๋ ˆํ”Œ๋ฆฌ์นด๋ฅผ 5๊ฐœ ์ƒ์„ฑ์„ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ nginx:1.14.2 ๋ ˆํ”Œ๋ฆฌ์นด 3๊ฐœ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์„ ๋•Œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์„œ nginx:1.16.1 ๋ ˆํ”Œ๋ฆฌ์นด 5๊ฐœ๋ฅผ ์ƒ์„ฑ์„ฑํ•˜๋„๋ก ์—…๋ฐ์ดํŠธ๋ฅผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋Š” ์ฆ‰์‹œ ์ƒ์„ฑ๋œ 3๊ฐœ์˜ nginx:1.14.2 ํŒŒ๋“œ 3๊ฐœ๋ฅผ ์ฃฝ์ด๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  nginx:1.16.1 ํŒŒ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. ์ด๊ฒƒ์€ ๊ณผ์ •์ด ๋ณ€๊ฒฝ๋˜๊ธฐ ์ „ nginx:1.14.2 ๋ ˆํ”Œ๋ฆฌ์นด 5๊ฐœ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.

๋ ˆ์ด๋ธ” ์…€๋ ‰ํ„ฐ ์—…๋ฐ์ดํŠธ

์ผ๋ฐ˜์ ์œผ๋กœ ๋ ˆ์ด๋ธ” ์…€๋ ‰ํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š์œผ๋ฉฐ ์…€๋ ‰ํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„ํšํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ๋“  ๋ ˆ์ด๋ธ” ์…€๋ ‰ํ„ฐ์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ๋งค์šฐ ์ฃผ์˜ํ•˜๊ณ , ๋ชจ๋“  ์˜ํ–ฅ์„ ํŒŒ์•…ํ–ˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

  • ์…€๋ ‰ํ„ฐ ์ถ”๊ฐ€ ์‹œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์‚ฌ์–‘์— ์žˆ๋Š” ํŒŒ๋“œ ํ…œํ”Œ๋ฆฟ ๋ ˆ์ด๋ธ”๋„ ์ƒˆ ๋ ˆ์ด๋ธ”๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค. ์ด ๋ณ€๊ฒฝ์€ ๊ฒน์น˜์ง€ ์•Š๋Š” ๋ณ€๊ฒฝ์œผ๋กœ ์ƒˆ ์…€๋ ‰ํ„ฐ๊ฐ€ ์ด์ „ ์…€๋ ‰ํ„ฐ๋กœ ๋งŒ๋“  ๋ ˆํ”Œ๋ฆฌ์นด์…‹๊ณผ ํŒŒ๋“œ๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š๊ฒŒ ๋˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋กœ ๋ชจ๋“  ๊ธฐ์กด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ ๊ณ ์•„๊ฐ€ ๋˜๋ฉฐ, ์ƒˆ๋กœ์šด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.
  • ์…€๋ ‰ํ„ฐ ์—…๋ฐ์ดํŠธ๋Š” ๊ธฐ์กด ์…€๋ ‰ํ„ฐ ํ‚ค ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉฐ, ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ถ”๊ฐ€์™€ ๋™์ผํ•œ ๋™์ž‘์„ ํ•œ๋‹ค.
  • ์…€๋ ‰ํ„ฐ ์‚ญ์ œ๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์…€๋ ‰ํ„ฐ์˜ ๊ธฐ์กด ํ‚ค๋ฅผ ์‚ญ์ œํ•˜๋ฉฐ ํŒŒ๋“œ ํ…œํ”Œ๋ฆฟ ๋ ˆ์ด๋ธ”์˜ ๋ณ€๊ฒฝ์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ธฐ์กด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ ๊ณ ์•„๊ฐ€ ์•„๋‹ˆ๊ณ , ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ œ๊ฑฐ๋œ ๋ ˆ์ด๋ธ”์€ ๊ธฐ์กด ํŒŒ๋“œ์™€ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์— ์—ฌ์ „ํžˆ ์กด์žฌํ•œ๋‹ค๋Š” ์ ์„ ์ฐธ๊ณ ํ•ด์•ผ ํ•œ๋‹ค.

๋””ํ”Œ๋กœ์ด๋จผํŠธ ๋กค๋ฐฑ

๋•Œ๋•Œ๋กœ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ๋กค๋ฐฑ์„ ์›ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์ง€์†์ ์ธ ์ถฉ๋Œ๋กœ ์•ˆ์ •์ ์ด์ง€ ์•Š์€ ๊ฒฝ์šฐ. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ๋กค์•„์›ƒ ๊ธฐ๋ก์€ ์‹œ์Šคํ…œ์— ๋‚จ์•„์žˆ์–ด ์–ธ์ œ๋“ ์ง€ ์›ํ•  ๋•Œ ๋กค๋ฐฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค (์ด ์‚ฌํ•ญ์€ ์ˆ˜์ • ๊ธฐ๋ก์— ๋Œ€ํ•œ ์ƒํ•œ ์ˆ˜์ •์„ ํ†ตํ•ด์„œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค).

  • ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋™์•ˆ ์ด๋ฏธ์ง€ ์ด๋ฆ„์„ nginx:1.16.1 ์ด ์•„๋‹Œ nginx:1.161 ๋กœ ์ž…๋ ฅํ•ด์„œ ์˜คํƒ€๋ฅผ ๋ƒˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

    kubectl set image deployment/nginx-deployment nginx=nginx:1.161 
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    deployment.apps/nginx-deployment image updated
    
  • ๋กค์•„์›ƒ์ด ๊ณ ์ฐฉ ๋œ๋‹ค. ๊ณ ์ฐฉ๋œ ๋กค์•„์›ƒ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    kubectl rollout status deployment/nginx-deployment
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    Waiting for rollout to finish: 1 out of 3 new replicas have been updated...
    
  • Ctrl-C ๋ฅผ ๋ˆŒ๋Ÿฌ ์œ„์˜ ๋กค์•„์›ƒ ์ƒํƒœ ๋ณด๊ธฐ๋ฅผ ์ค‘์ง€ํ•œ๋‹ค. ๊ณ ์ฐฉ๋œ ๋กค์•„์›ƒ ์ƒํƒœ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋Š” ์ด ๊ฒƒ์„ ๋” ์ฝ์–ด๋ณธ๋‹ค.

  • ์ด์ „ ๋ ˆํ”Œ๋ฆฌ์นด๋Š” 2๊ฐœ(nginx-deployment-1564180365 ๊ณผ nginx-deployment-2035384211), ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด๋Š” 1๊ฐœ(nginx-deployment-3066724191)์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

    kubectl get rs
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    NAME                          DESIRED   CURRENT   READY   AGE
    nginx-deployment-1564180365   3         3         3       25s
    nginx-deployment-2035384211   0         0         0       36s
    nginx-deployment-3066724191   1         1         0       6s
    
  • ์ƒ์„ฑ๋œ ํŒŒ๋“œ๋ฅผ ๋ณด๋ฉด, ์ƒˆ๋กœ์šด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์— ์ƒ์„ฑ๋œ 1๊ฐœ์˜ ํŒŒ๋“œ๊ฐ€ ์ด๋ฏธ์ง€ ํ’€ ๋ฃจํ”„(pull loop)์—์„œ ๊ณ ์ฐฉ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    kubectl get pods
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    NAME                                READY     STATUS             RESTARTS   AGE
    nginx-deployment-1564180365-70iae   1/1       Running            0          25s
    nginx-deployment-1564180365-jbqqo   1/1       Running            0          25s
    nginx-deployment-1564180365-hysrc   1/1       Running            0          25s
    nginx-deployment-3066724191-08mng   0/1       ImagePullBackOff   0          6s
    
  • ๋””ํ”Œ๋กœ์ด๋จผํŠธ์— ๋Œ€ํ•œ ์„ค๋ช… ๋ณด๊ธฐ

    kubectl describe deployment
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    Name:           nginx-deployment
    Namespace:      default
    CreationTimestamp:  Tue, 15 Mar 2016 14:48:04 -0700
    Labels:         app=nginx
    Selector:       app=nginx
    Replicas:       3 desired | 1 updated | 4 total | 3 available | 1 unavailable
    StrategyType:       RollingUpdate
    MinReadySeconds:    0
    RollingUpdateStrategy:  25% max unavailable, 25% max surge
    Pod Template:
      Labels:  app=nginx
      Containers:
       nginx:
        Image:        nginx:1.161
        Port:         80/TCP
        Host Port:    0/TCP
        Environment:  <none>
        Mounts:       <none>
      Volumes:        <none>
    Conditions:
      Type           Status  Reason
      ----           ------  ------
      Available      True    MinimumReplicasAvailable
      Progressing    True    ReplicaSetUpdated
    OldReplicaSets:     nginx-deployment-1564180365 (3/3 replicas created)
    NewReplicaSet:      nginx-deployment-3066724191 (1/1 replicas created)
    Events:
      FirstSeen LastSeen    Count   From                    SubObjectPath   Type        Reason              Message
      --------- --------    -----   ----                    -------------   --------    ------              -------
      1m        1m          1       {deployment-controller }                Normal      ScalingReplicaSet   Scaled up replica set nginx-deployment-2035384211 to 3
      22s       22s         1       {deployment-controller }                Normal      ScalingReplicaSet   Scaled up replica set nginx-deployment-1564180365 to 1
      22s       22s         1       {deployment-controller }                Normal      ScalingReplicaSet   Scaled down replica set nginx-deployment-2035384211 to 2
      22s       22s         1       {deployment-controller }                Normal      ScalingReplicaSet   Scaled up replica set nginx-deployment-1564180365 to 2
      21s       21s         1       {deployment-controller }                Normal      ScalingReplicaSet   Scaled down replica set nginx-deployment-2035384211 to 1
      21s       21s         1       {deployment-controller }                Normal      ScalingReplicaSet   Scaled up replica set nginx-deployment-1564180365 to 3
      13s       13s         1       {deployment-controller }                Normal      ScalingReplicaSet   Scaled down replica set nginx-deployment-2035384211 to 0
      13s       13s         1       {deployment-controller }                Normal      ScalingReplicaSet   Scaled up replica set nginx-deployment-3066724191 to 1
    

    ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์•ˆ์ •์ ์ธ ์ด์ „ ์ˆ˜์ • ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑํ•ด์•ผ ํ•œ๋‹ค.

๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ๋กค์•„์›ƒ ๊ธฐ๋ก ํ™•์ธ

๋‹ค์Œ ์ˆœ์„œ์— ๋”ฐ๋ผ ๋กค์•„์›ƒ ๊ธฐ๋ก์„ ํ™•์ธํ•œ๋‹ค.

  1. ๋จผ์ € ์ด ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ™•์ธํ•œ๋‹ค.

    kubectl rollout history deployment/nginx-deployment
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    deployments "nginx-deployment"
    REVISION    CHANGE-CAUSE
    1           kubectl apply --filename=https://k8s.io/examples/controllers/nginx-deployment.yaml
    2           kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1
    3           kubectl set image deployment/nginx-deployment nginx=nginx:1.161
    

    CHANGE-CAUSE ๋Š” ์ˆ˜์ • ์ƒ์„ฑ์‹œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ฃผ์„์ธ kubernetes.io/change-cause ์—์„œ ๋ณต์‚ฌํ•œ๋‹ค. ๋‹ค์Œ์— ๋Œ€ํ•ด CHANGE-CAUSE ๋ฉ”์‹œ์ง€๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ๋””ํ”Œ๋กœ์ด๋จผํŠธ์— kubectl annotate deployment/nginx-deployment kubernetes.io/change-cause="image updated to 1.16.1" ๋กœ ์ฃผ์„์„ ๋‹จ๋‹ค.
    • ์ˆ˜๋™์œผ๋กœ ๋ฆฌ์†Œ์Šค ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŽธ์ง‘.
  2. ๊ฐ ์ˆ˜์ • ๋ฒ„์ „์˜ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๋ณด๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•œ๋‹ค.

    kubectl rollout history deployment/nginx-deployment --revision=2
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    deployments "nginx-deployment" revision 2
      Labels:       app=nginx
              pod-template-hash=1159050644
      Annotations:  kubernetes.io/change-cause=kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1
      Containers:
       nginx:
        Image:      nginx:1.16.1
        Port:       80/TCP
         QoS Tier:
            cpu:      BestEffort
            memory:   BestEffort
        Environment Variables:      <none>
      No volumes.
    

์ด์ „ ์ˆ˜์ • ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑ

๋‹ค์Œ ๋‹จ๊ณ„์— ๋”ฐ๋ผ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ํ˜„์žฌ ๋ฒ„์ „์—์„œ ์ด์ „ ๋ฒ„์ „์ธ ๋ฒ„์ „ 2๋กœ ๋กค๋ฐฑํ•œ๋‹ค.

  1. ์ด์ œ ํ˜„์žฌ ๋กค์•„์›ƒ์˜ ์‹คํ–‰ ์ทจ์†Œ ๋ฐ ์ด์ „ ์ˆ˜์ • ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑ ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

    kubectl rollout undo deployment/nginx-deployment
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    deployment.apps/nginx-deployment rolled back
    

    ๋˜๋Š” ํŠน์ • ์ˆ˜์ • ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑํ•˜๋ ค๋ฉด --to-revision ์˜ต์…˜์— ํ•ด๋‹น ์ˆ˜์ • ๋ฒ„์ „์„ ๋ช…์‹œํ•œ๋‹ค.

    kubectl rollout undo deployment/nginx-deployment --to-revision=2
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    deployment.apps/nginx-deployment rolled back
    

    ๋กค์•„์›ƒ ๊ด€๋ จ ๋ช…๋ น์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ kubectl rollout์„ ์ฐธ์กฐํ•œ๋‹ค.

    ์ด์ œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์ด์ „ ์•ˆ์ • ์ˆ˜์ • ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑ ๋œ๋‹ค. ๋ฒ„์ „ 2๋กœ ๋กค๋ฐฑํ•˜๊ธฐ ์œ„ํ•ด DeploymentRollback ์ด๋ฒคํŠธ๊ฐ€ ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  2. ๋งŒ์•ฝ ๋กค๋ฐฑ์— ์„ฑ๊ณตํ•˜๊ณ , ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•œ๋‹ค.

    kubectl get deployment nginx-deployment
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   3/3     3            3           30m
    
  3. ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์„ค๋ช… ๊ฐ€์ ธ์˜ค๊ธฐ.

    kubectl describe deployment nginx-deployment
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    Name:                   nginx-deployment
    Namespace:              default
    CreationTimestamp:      Sun, 02 Sep 2018 18:17:55 -0500
    Labels:                 app=nginx
    Annotations:            deployment.kubernetes.io/revision=4
                            kubernetes.io/change-cause=kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1
    Selector:               app=nginx
    Replicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailable
    StrategyType:           RollingUpdate
    MinReadySeconds:        0
    RollingUpdateStrategy:  25% max unavailable, 25% max surge
    Pod Template:
      Labels:  app=nginx
      Containers:
       nginx:
        Image:        nginx:1.16.1
        Port:         80/TCP
        Host Port:    0/TCP
        Environment:  <none>
        Mounts:       <none>
      Volumes:        <none>
    Conditions:
      Type           Status  Reason
      ----           ------  ------
      Available      True    MinimumReplicasAvailable
      Progressing    True    NewReplicaSetAvailable
    OldReplicaSets:  <none>
    NewReplicaSet:   nginx-deployment-c4747d96c (3/3 replicas created)
    Events:
      Type    Reason              Age   From                   Message
      ----    ------              ----  ----                   -------
      Normal  ScalingReplicaSet   12m   deployment-controller  Scaled up replica set nginx-deployment-75675f5897 to 3
      Normal  ScalingReplicaSet   11m   deployment-controller  Scaled up replica set nginx-deployment-c4747d96c to 1
      Normal  ScalingReplicaSet   11m   deployment-controller  Scaled down replica set nginx-deployment-75675f5897 to 2
      Normal  ScalingReplicaSet   11m   deployment-controller  Scaled up replica set nginx-deployment-c4747d96c to 2
      Normal  ScalingReplicaSet   11m   deployment-controller  Scaled down replica set nginx-deployment-75675f5897 to 1
      Normal  ScalingReplicaSet   11m   deployment-controller  Scaled up replica set nginx-deployment-c4747d96c to 3
      Normal  ScalingReplicaSet   11m   deployment-controller  Scaled down replica set nginx-deployment-75675f5897 to 0
      Normal  ScalingReplicaSet   11m   deployment-controller  Scaled up replica set nginx-deployment-595696685f to 1
      Normal  DeploymentRollback  15s   deployment-controller  Rolled back deployment "nginx-deployment" to revision 2
      Normal  ScalingReplicaSet   15s   deployment-controller  Scaled down replica set nginx-deployment-595696685f to 0
    

๋””ํ”Œ๋กœ์ด๋จผํŠธ ์Šค์ผ€์ผ๋ง

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์Šค์ผ€์ผ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

kubectl scale deployment/nginx-deployment --replicas=10

์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

deployment.apps/nginx-deployment scaled

๊ฐ€๋ น ํด๋Ÿฌ์Šคํ„ฐ์—์„œ horizontal Pod autoscaling๋ฅผ ์„ค์ • ํ•œ ๊ฒฝ์šฐ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์— ๋Œ€ํ•œ ์˜คํ† ์Šค์ผ€์ผ๋Ÿฌ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด ํŒŒ๋“œ์˜ CPU ์‚ฌ์šฉ๋ฅ ์„ ๊ธฐ์ค€์œผ๋กœ ์‹คํ–‰ํ•  ์ตœ์†Œ ํŒŒ๋“œ ๋ฐ ์ตœ๋Œ€ ํŒŒ๋“œ์˜ ์ˆ˜๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

kubectl autoscale deployment/nginx-deployment --min=10 --max=15 --cpu-percent=80

์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

deployment.apps/nginx-deployment scaled

๋น„๋ก€์  ์Šค์ผ€์ผ๋ง(Proportional Scaling)

๋””ํ”Œ๋กœ์ด๋จผํŠธ ๋กค๋ง์—…๋ฐ์ดํŠธ๋Š” ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค. ์‚ฌ์šฉ์ž ๋˜๋Š” ์˜คํ† ์Šค์ผ€์ผ๋Ÿฌ๊ฐ€ ๋กค์•„์›ƒ ์ค‘์— ์žˆ๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ ๋กค๋ง ์—…๋ฐ์ดํŠธ๋ฅผ ์Šค์ผ€์ผ๋ง ํ•˜๋Š” ๊ฒฝ์šฐ(์ง„ํ–‰์ค‘ ๋˜๋Š” ์ผ์‹œ ์ค‘์ง€ ์ค‘), ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์œ„ํ—˜์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๊ธฐ์กด ํ™œ์„ฑํ™”๋œ ๋ ˆํ”Œ๋ฆฌ์นด์…‹(ํŒŒ๋“œ์™€ ๋ ˆํ”Œ๋ฆฌ์นด์…‹)์˜ ์ถ”๊ฐ€ ๋ ˆํ”Œ๋ฆฌ์นด์˜ ๊ท ํ˜•์„ ์กฐ์ ˆ ํ•œ๋‹ค. ์ด๊ฒƒ์„ proportional scaling ๋ผ ๋ถ€๋ฅธ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 10๊ฐœ์˜ ๋ ˆํ”Œ๋ฆฌ์นด๋ฅผ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋กœ maxSurge=3, ๊ทธ๋ฆฌ๊ณ  maxUnavailable=2 ๋กœ ์‹คํ–‰ ํ•œ๋‹ค.

  • ๋””ํ”Œ๋กœ์ด๋จผํŠธ์— ์žˆ๋Š” 10๊ฐœ์˜ ๋ ˆํ”Œ๋ฆฌ์นด๊ฐ€ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

    kubectl get deploy
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    NAME                 DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment     10        10        10           10          50s
    
  • ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ์ƒˆ ์ด๋ฏธ์ง€๋กœ ์—…๋ฐ์ดํŠธ ๋œ๋‹ค.

    kubectl set image deployment/nginx-deployment nginx=nginx:sometag
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    deployment.apps/nginx-deployment image updated
    
  • ์ด๋ฏธ์ง€ ์—…๋ฐ์ดํŠธ๋Š” ๋ ˆํ”Œ๋ฆฌ์นด์…‹ nginx-deployment-1989198191 ์œผ๋กœ ์ƒˆ๋กœ์šด ๋กค ์•„์›ƒ์ด ์‹œ์ž‘ํ•˜์ง€๋งŒ, ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ maxUnavailable ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์œผ๋กœ ์ธํ•ด ์ฐจ๋‹จ๋œ๋‹ค. ๋กค์•„์›ƒ ์ƒํƒœ๋ฅผ ํ™•์ธํ•œ๋‹ค.

    kubectl get rs
    
    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.
    
    NAME                          DESIRED   CURRENT   READY     AGE
    nginx-deployment-1989198191   5         5         0         9s
    nginx-deployment-618515232    8         8         8         1m
    
  • ๊ทธ ๋‹ค์Œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์Šค์ผ€์ผ๋ง ์š”์ฒญ์ด ํ•จ๊ป˜ ๋”ฐ๋ผ์˜จ๋‹ค. ์˜คํ† ์Šค์ผ€์ผ๋Ÿฌ๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ ๋ ˆํ”Œ๋ฆฌ์นด๋ฅผ 15๋กœ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ƒˆ๋กœ์šด 5๊ฐœ์˜ ๋ ˆํ”Œ๋ฆฌ์นด์˜ ์ถ”๊ฐ€๋ฅผ ์œ„ํ•œ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ๋น„๋ก€์  ์Šค์ผ€์ผ๋ง์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด 5๊ฐœ ๋ชจ๋‘ ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์— ์ถ”๊ฐ€๋œ๋‹ค. ๋น„๋ก€์  ์Šค์ผ€์ผ๋ง์œผ๋กœ ์ถ”๊ฐ€ ๋ ˆํ”Œ๋ฆฌ์นด๋ฅผ ๋ชจ๋“  ๋ ˆํ”Œ๋ฆฌ์นด์…‹์— ๊ฑธ์ณ ๋ถ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๋น„์œจ์ด ๋†’์„์ˆ˜๋ก ๊ฐ€์žฅ ๋งŽ์€ ๋ ˆํ”Œ๋ฆฌ์นด๊ฐ€ ์žˆ๋Š” ๋ ˆํ”Œ๋ฆฌ์นด์…‹์œผ๋กœ ์ด๋™ํ•˜๊ณ , ๋น„์œจ์ด ๋‚ฎ์„ ์ˆ˜๋ก ์ ์€ ๋ ˆํ”Œ๋ฆฌ์นด๊ฐ€ ์žˆ๋Š” ๋ ˆํ”Œ๋ฆฌ์นด์…‹์œผ๋กœ ์ด๋™ํ•œ๋‹ค. ๋‚จ์€ ๊ฒƒ๋“ค์€ ๋Œ€๋ถ€๋ถ„์˜ ๋ ˆํ”Œ๋ฆฌ์นด๊ฐ€ ์žˆ๋Š” ๋ ˆํ”Œ๋ฆฌ์นด์…‹์— ์ถ”๊ฐ€๋œ๋‹ค. 0๊ฐœ์˜ ๋ ˆํ”Œ๋ฆฌ์นด๊ฐ€ ์žˆ๋Š” ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ ์Šค์ผ€์ผ ์—… ๋˜์ง€ ์•Š๋Š”๋‹ค.

์œ„์˜ ์˜ˆ์‹œ์—์„œ ๊ธฐ์กด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์— 3๊ฐœ์˜ ๋ ˆํ”Œ๋ฆฌ์นด๊ฐ€ ์ถ”๊ฐ€๋˜๊ณ , 2๊ฐœ์˜ ๋ ˆํ”Œ๋ฆฌ์นด๋Š” ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์— ์ถ”๊ฐ€๋œ๋‹ค. ๊ฒฐ๊ตญ ๋กค์•„์›ƒ ํ”„๋กœ์„ธ์Šค๋Š” ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด๊ฐ€ ์ •์ƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ๋ชจ๋“  ๋ ˆํ”Œ๋ฆฌ์นด๋ฅผ ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค. ์ด๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•œ๋‹ค.

kubectl get deploy

์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

NAME                 DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment     15        18        7            8           7m

๋กค์•„์›ƒ ์ƒํƒœ๋Š” ๋ ˆํ”Œ๋ฆฌ์นด๊ฐ€ ๊ฐ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์— ์–ด๋–ป๊ฒŒ ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

kubectl get rs

์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

NAME                          DESIRED   CURRENT   READY     AGE
nginx-deployment-1989198191   7         7         0         7m
nginx-deployment-618515232    11        11        11        7m

๋””ํ”Œ๋กœ์ด๋จผํŠธ ๋กค์•„์›ƒ ์ผ์‹œ ์ค‘์ง€์™€ ์žฌ๊ฐœ

๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ (๋˜๋Š” ๊ณ„ํšํ•  ๋•Œ), ํ•˜๋‚˜ ์ด์ƒ์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ๋””ํ”Œ๋กœ์ด๋จผํŠธ์— ๋Œ€ํ•œ ๋กค์•„์›ƒ์„ ์ผ์‹œ ์ค‘์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•  ์ค€๋น„๊ฐ€ ๋˜๋ฉด, ๋””ํ”Œ๋กœ์ด๋จผํŠธ ๋กค์•„์›ƒ์„ ์žฌ๊ฐœํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ, ๋ถˆํ•„์š”ํ•œ ๋กค์•„์›ƒ์„ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š๊ณ  ๋กค์•„์›ƒ ์ผ์‹œ ์ค‘์ง€์™€ ์žฌ๊ฐœ ์‚ฌ์ด์— ์—ฌ๋Ÿฌ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒ์„ฑ๋œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ๊ฒฝ์šฐ

    ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ƒ์„ธ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

    kubectl get deploy
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    nginx     3         3         3            3           1m
    

    ๋กค์•„์›ƒ ์ƒํƒœ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

    kubectl get rs
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    NAME               DESIRED   CURRENT   READY     AGE
    nginx-2142116321   3         3         3         1m
    
  • ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•ด์„œ ์ผ์‹œ ์ค‘์ง€ํ•œ๋‹ค.

    kubectl rollout pause deployment/nginx-deployment
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    deployment.apps/nginx-deployment paused
    
  • ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์ด๋ฏธ์ง€๋ฅผ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.

    kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    deployment.apps/nginx-deployment image updated
    
  • ์ƒˆ๋กœ์šด ๋กค์•„์›ƒ์ด ์‹œ์ž‘๋˜์ง€ ์•Š๋Š”๋‹ค.

    kubectl rollout history deployment/nginx-deployment
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    deployments "nginx"
    REVISION  CHANGE-CAUSE
    1   <none>
    
  • ๊ธฐ์กด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋กค์•„์›ƒ ์ƒํƒœ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

    kubectl get rs
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    NAME               DESIRED   CURRENT   READY     AGE
    nginx-2142116321   3         3         3         2m
    
  • ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉํ•  ๋ฆฌ์†Œ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์›ํ•˜๋Š” ๋งŒํผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.

    kubectl set resources deployment/nginx-deployment -c=nginx --limits=cpu=200m,memory=512Mi
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    deployment.apps/nginx-deployment resource requirements updated
    

    ๋””ํ”Œ๋กœ์ด๋จผํŠธ ๋กค์•„์›ƒ์„ ์ผ์‹œ ์ค‘์ง€ํ•˜๊ธฐ ์ „ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์ดˆ๊ธฐ ์ƒํƒœ๋Š” ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ง€์†ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋””ํ”Œ๋กœ์ด๋จผํŠธ ๋กค์•„์›ƒ์ด ์ผ์‹œ ์ค‘์ง€ํ•œ ์ƒํƒœ์—์„œ๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์ƒˆ ์—…๋ฐ์ดํŠธ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

  • ๊ฒฐ๊ตญ, ๋””ํ”Œ๋กœ์ด๋จผํŠธ ๋กค์•„์›ƒ์„ ์žฌ๊ฐœํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด ์ƒˆ๋กœ์šด ์—…๋ฐ์ดํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๊ด€์ฐฐํ•œ๋‹ค.

    kubectl rollout resume deployment/nginx-deployment
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    deployment.apps/nginx-deployment resumed
    
  • ๋กค์•„์›ƒ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ƒํƒœ๋ฅผ ๊ด€์ฐฐํ•œ๋‹ค.

    kubectl get rs -w
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    NAME               DESIRED   CURRENT   READY     AGE
    nginx-2142116321   2         2         2         2m
    nginx-3926361531   2         2         0         6s
    nginx-3926361531   2         2         1         18s
    nginx-2142116321   1         2         2         2m
    nginx-2142116321   1         2         2         2m
    nginx-3926361531   3         2         1         18s
    nginx-3926361531   3         2         1         18s
    nginx-2142116321   1         1         1         2m
    nginx-3926361531   3         3         1         18s
    nginx-3926361531   3         3         2         19s
    nginx-2142116321   0         1         1         2m
    nginx-2142116321   0         1         1         2m
    nginx-2142116321   0         0         0         2m
    nginx-3926361531   3         3         3         20s
    
  • ๋กค์•„์›ƒ ์ตœ์‹  ์ƒํƒœ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

    kubectl get rs
    

    ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

    NAME               DESIRED   CURRENT   READY     AGE
    nginx-2142116321   0         0         0         2m
    nginx-3926361531   3         3         3         28s
    

๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ƒํƒœ

๋””ํ”Œ๋กœ์ด๋จผํŠธ๋Š” ๋ผ์ดํ”„์‚ฌ์ดํด ๋™์•ˆ ๋‹ค์–‘ํ•œ ์ƒํƒœ๋กœ ์ „ํ™˜๋œ๋‹ค. ์ด๋Š” ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ๋กค์•„์›ƒํ•˜๋Š” ๋™์•ˆ ์ง„ํ–‰ ์ค‘์ด ๋  ์ˆ˜ ์žˆ๊ณ , ์™„๋ฃŒ์ด๊ฑฐ๋‚˜ ์ง„ํ–‰ ์‹คํŒจ์ผ ์ˆ˜ ์žˆ๋‹ค.

๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ง„ํ–‰ ์ค‘

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ๋‹ค์Œ ์ž‘์—…์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ง„ํ–‰ ์ค‘ ์œผ๋กœ ํ‘œ์‹œํ•œ๋‹ค.

  • ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋กœ ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์ƒ์„ฑ.
  • ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋กœ ์ƒˆ๋กœ์šด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์Šค์ผ€์ผ ์—….
  • ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋กœ ๊ธฐ์กด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์Šค์ผ€์ผ ๋‹ค์šด.
  • ์ƒˆ ํŒŒ๋“œ๊ฐ€ ์ค€๋น„๋˜๊ฑฐ๋‚˜ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Œ(์ตœ์†Œ ์ค€๋น„ ์‹œ๊ฐ„(์ดˆ) ๋™์•ˆ ์ค€๋น„๋จ).

๋กค์•„์›ƒ์ด "์ง„ํ–‰ ์ค‘" ์ƒํƒœ๊ฐ€ ๋˜๋ฉด, ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ .status.conditions์— ๋‹ค์Œ ์†์„ฑ์„ ํฌํ•จํ•˜๋Š” ์ปจ๋””์…˜์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

  • type: Progressing
  • status: "True"
  • reason: NewReplicaSetCreated | reason: FoundNewReplicaSet | reason: ReplicaSetUpdated

kubectl rollout status ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์ง„ํ–‰์‚ฌํ™ฉ์„ ๋ชจ๋‹ˆํ„ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋””ํ”Œ๋กœ์ด๋จผํŠธ ์™„๋ฃŒ

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋ฉด ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์™„๋ฃŒ ๋กœ ํ‘œ์‹œํ•œ๋‹ค.

  • ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ๋ ˆํ”Œ๋ฆฌ์นด๊ฐ€ ์ง€์ •๋œ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋˜์—ˆ์„ ๋•Œ. ์ฆ‰, ์š”์ฒญํ•œ ๋ชจ๋“  ์—…๋ฐ์ดํŠธ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ.
  • ๋””ํ”Œ๋กœ์ด๋จผํŠธ์™€ ๊ด€๋ จํ•œ ๋ชจ๋“  ๋ ˆํ”Œ๋ฆฌ์นด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋•Œ.
  • ๋””ํ”Œ๋กœ์ด๋จผํŠธ์— ๋Œ€ํ•ด ์ด์ „ ๋ณต์ œ๋ณธ์ด ์‹คํ–‰๋˜๊ณ  ์žˆ์ง€ ์•Š์„ ๋•Œ.

๋กค์•„์›ƒ์ด "์™„๋ฃŒ" ์ƒํƒœ๊ฐ€ ๋˜๋ฉด, ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ .status.conditions์— ๋‹ค์Œ ์†์„ฑ์„ ํฌํ•จํ•˜๋Š” ์ปจ๋””์…˜์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

  • type: Progressing
  • status: "True"
  • reason: NewReplicaSetAvailable

์ด Progressing ์ปจ๋””์…˜์€ ์ƒˆ๋กœ์šด ๋กค์•„์›ƒ์ด ์‹œ์ž‘๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” "True" ์ƒํƒœ๊ฐ’์„ ์œ ์ง€ํ•  ๊ฒƒ์ด๋‹ค. ๋ ˆํ”Œ๋ฆฌ์นด์˜ ๊ฐ€์šฉ์„ฑ์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ์—๋„(์ด ๊ฒฝ์šฐ Available ์ปจ๋””์…˜์— ์˜ํ–ฅ์„ ๋ฏธ์นจ) ์ปจ๋””์…˜์€ ์œ ์ง€๋œ๋‹ค.

kubectl rollout status ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ๋กค์•„์›ƒ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด kubectl rollout status ๋Š” ์ข…๋ฃŒ ์ฝ”๋“œ๋กœ 0์ด ๋ฐ˜ํ™˜๋œ๋‹ค.

kubectl rollout status deployment/nginx-deployment

์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

Waiting for rollout to finish: 2 of 3 updated replicas are available...
deployment "nginx-deployment" successfully rolled out

๊ทธ๋ฆฌ๊ณ  kubectl rollout ์˜ ์ข…๋ฃŒ ์ƒํƒœ๋Š” 0(success)์ด๋‹ค.

echo $?
0

๋””ํ”Œ๋กœ์ด๋จผํŠธ ์‹คํŒจ

๋””ํ”Œ๋กœ์ด๋จผํŠธ์‹œ ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ธ ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ๋Š” ๋ฐฐํฌ๋ฅผ ์‹œ๋„ํ•˜๋ฉด ๊ณ ์ฐฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ๋‹ค์Œ ๋ช‡ ๊ฐ€์ง€ ์š”์ธ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•œ๋‹ค.

  • ํ• ๋‹น๋Ÿ‰ ๋ถ€์กฑ
  • ์ค€๋น„์„ฑ ํ”„๋กœ๋ธŒ(readiness probe)์˜ ์‹คํŒจ
  • ์ด๋ฏธ์ง€ ํ’€ ์—๋Ÿฌ
  • ๊ถŒํ•œ ๋ถ€์กฑ
  • ๋ฒ”์œ„ ์ œํ•œ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋Ÿฐํƒ€์ž„์˜ ์ž˜๋ชป๋œ ๊ตฌ์„ฑ

์ด ์กฐ๊ฑด์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ŠคํŽ™์—์„œ ๋ฐ๋“œ๋ผ์ธ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค (.spec.progressDeadlineSeconds). .spec.progressDeadlineSeconds ๋Š” (๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ƒํƒœ์—์„œ) ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์ง„ํ–‰์ด ์ •์ง€๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋Œ€๊ธฐํ•˜๋Š” ์‹œ๊ฐ„(์ดˆ)๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

๋‹ค์Œ kubectl ๋ช…๋ น์–ด๋กœ progressDeadlineSeconds ๋ฅผ ์„ค์ •ํ•ด์„œ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ 10๋ถ„ ํ›„ ๋””ํ”Œ๋กœ์ด๋จผํŠธ ๋กค์•„์›ƒ์— ๋Œ€ํ•œ ์ง„ํ–‰ ์ƒํƒœ์˜ ๋ถ€์กฑ์— ๋Œ€ํ•œ ๋ฆฌํฌํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•œ๋‹ค.

kubectl patch deployment/nginx-deployment -p '{"spec":{"progressDeadlineSeconds":600}}'

์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

deployment.apps/nginx-deployment patched

๋งŒ์•ฝ ๋ฐ๋“œ๋ผ์ธ์„ ๋„˜์–ด์„œ๋ฉด ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ .status.conditions ์†์„ฑ์— ๋‹ค์Œ์˜ ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ปจ๋””์…˜(DeploymentCondition)์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

  • type: Progressing
  • status: "False"
  • reason: ProgressDeadlineExceeded

์ด ์ปจ๋””์…˜์€ ์ผ์ฐ ์‹คํŒจํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ReplicaSetCreateError๋ฅผ ์ด์œ ๋กœ ์ƒํƒœ๊ฐ’์„ "False"๋กœ ์„ค์ •ํ•œ๋‹ค. ๋˜ํ•œ, ๋””ํ”Œ๋กœ์ด๋จผํŠธ ๋กค์•„์›ƒ์ด ์™„๋ฃŒ๋˜๋ฉด ๋ฐ๋“œ๋ผ์ธ์€ ๋” ์ด์ƒ ๊ณ ๋ ค๋˜์ง€ ์•Š๋Š”๋‹ค.

์ปจ๋””์…˜ ์ƒํƒœ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API ๊ทœ์น™์„ ์ฐธ๊ณ ํ•œ๋‹ค.

์„ค์ •ํ•œ ํƒ€์ž„์•„์›ƒ์ด ๋‚ฎ๊ฑฐ๋‚˜ ์ผ์‹œ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์ข…๋ฃŒ์˜ ์—๋Ÿฌ๋กœ ์ธํ•ด ๋””ํ”Œ๋กœ์ด๋จผํŠธ์— ์ผ์‹œ์ ์ธ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ• ๋‹น๋Ÿ‰์ด ๋ถ€์กฑํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๋งŒ์•ฝ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์„ค๋ช…ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์„น์…˜์„ ํ™•์ธํ•œ๋‹ค.

kubectl describe deployment nginx-deployment

์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

<...>
Conditions:
  Type            Status  Reason
  ----            ------  ------
  Available       True    MinimumReplicasAvailable
  Progressing     True    ReplicaSetUpdated
  ReplicaFailure  True    FailedCreate
<...>

๋งŒ์•ฝ kubectl get deployment nginx-deployment -o yaml ์„ ์‹คํ–‰ํ•˜๋ฉด ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ƒํƒœ๋Š” ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•˜๋‹ค.

status:
  availableReplicas: 2
  conditions:
  - lastTransitionTime: 2016-10-04T12:25:39Z
    lastUpdateTime: 2016-10-04T12:25:39Z
    message: Replica set "nginx-deployment-4262182780" is progressing.
    reason: ReplicaSetUpdated
    status: "True"
    type: Progressing
  - lastTransitionTime: 2016-10-04T12:25:42Z
    lastUpdateTime: 2016-10-04T12:25:42Z
    message: Deployment has minimum availability.
    reason: MinimumReplicasAvailable
    status: "True"
    type: Available
  - lastTransitionTime: 2016-10-04T12:25:39Z
    lastUpdateTime: 2016-10-04T12:25:39Z
    message: 'Error creating: pods "nginx-deployment-4262182780-" is forbidden: exceeded quota:
      object-counts, requested: pods=1, used: pods=3, limited: pods=2'
    reason: FailedCreate
    status: "True"
    type: ReplicaFailure
  observedGeneration: 3
  replicas: 2
  unavailableReplicas: 2

๊ฒฐ๊ตญ, ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ง„ํ–‰ ๋ฐ๋“œ๋ผ์ธ์„ ๋„˜์–ด์„œ๋ฉด, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์ง„ํ–‰ ์ปจ๋””์…˜์˜ ์ƒํƒœ์™€ ์ด์œ ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

Conditions:
  Type            Status  Reason
  ----            ------  ------
  Available       True    MinimumReplicasAvailable
  Progressing     False   ProgressDeadlineExceeded
  ReplicaFailure  True    FailedCreate

๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์Šค์ผ€์ผ ๋‹ค์šดํ•˜๊ฑฐ๋‚˜, ์‹คํ–‰ ์ค‘์ธ ๋‹ค๋ฅธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์Šค์ผ€์ผ ๋‹ค์šดํ•˜๊ฑฐ๋‚˜, ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ํ• ๋‹น๋Ÿ‰์„ ๋Š˜๋ ค์„œ ํ• ๋‹น๋Ÿ‰์ด ๋ถ€์กฑํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ํ• ๋‹น๋Ÿ‰ ์ปจ๋””์…˜๊ณผ ๋””ํ”Œ๋กœ์ด๋จผํŠธ ๋กค์•„์›ƒ์ด ์™„๋ฃŒ๋˜์–ด ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ์กฑํ•œ๋‹ค๋ฉด ์„ฑ๊ณตํ•œ ์ปจ๋””์…˜์˜ ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ƒํƒœ๊ฐ€ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค(status: "True" ์™€ reason: NewReplicaSetAvailable).

Conditions:
  Type          Status  Reason
  ----          ------  ------
  Available     True    MinimumReplicasAvailable
  Progressing   True    NewReplicaSetAvailable

type: Available ๊ณผ status: "True" ๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์ตœ์†Œํ•œ์˜ ๊ฐ€์šฉ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ตœ์†Œํ•œ์˜ ๊ฐ€์šฉ์„ฑ์€ ๋””ํ”Œ๋กœ์ด๋จผํŠธ ๊ณ„ํš์— ๋ช…์‹œ๋œ ํŒŒ๋ผ๋ฏธํ„ฐ์— ์˜ํ•ด ๊ฒฐ์ •๋œ๋‹ค. type: Progressing ๊ณผ status: "True" ๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ๋กค์•„์›ƒ ๋„์ค‘์— ์ง„ํ–‰ ์ค‘ ์ด๊ฑฐ๋‚˜, ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฉฐ, ์ง„ํ–‰ ์ค‘ ์ตœ์†Œํ•œ์œผ๋กœ ํ•„์š”ํ•œ ์ƒˆ๋กœ์šด ๋ ˆํ”Œ๋ฆฌ์นด๋ฅผ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. (์ž์„ธํ•œ ๋‚ด์šฉ์€ ํŠน์ • ์กฐ๊ฑด์˜ ์ด์œ ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ reason: NewReplicaSetAvailable ๋Š” ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.)

kubectl rollout status ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์ง„ํ–‰์ด ์‹คํŒจ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. kubectl rollout status ๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์ง„ํ–‰ ๋ฐ๋“œ๋ผ์ธ์„ ์ดˆ๊ณผํ•˜๋ฉด 0์ด ์•„๋‹Œ ์ข…๋ฃŒ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

kubectl rollout status deployment/nginx-deployment

์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
error: deployment "nginx" exceeded its progress deadline

๊ทธ๋ฆฌ๊ณ  kubectl rollout ์˜ ์ข…๋ฃŒ ์ƒํƒœ๋Š” 1(error๋ฅผ ์˜๋ฏธํ•จ)์ด๋‹ค.

echo $?
1

์‹คํŒจํ•œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์—์„œ์˜ ์šด์˜

์™„๋ฃŒ๋œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์— ์ ์šฉ๋˜๋Š” ๋ชจ๋“  ํ–‰๋™์€ ์‹คํŒจํ•œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์—๋„ ์ ์šฉ๋œ๋‹ค. ๋””ํ”Œ๋กœ์ด๋จผํŠธ ํŒŒ๋“œ ํ…œํ”Œ๋ฆฟ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ˆ˜์ •์‚ฌํ•ญ์„ ์ ์šฉํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ์Šค์ผ€์ผ ์—…/๋‹ค์šด ํ•˜๊ฑฐ๋‚˜, ์ด์ „ ์ˆ˜์ • ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑํ•˜๊ฑฐ๋‚˜, ์ผ์‹œ ์ค‘์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ •์ฑ… ์ดˆ๊ธฐํ™”

๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ .spec.revisionHistoryLimit ํ•„๋“œ๋ฅผ ์„ค์ •ํ•ด์„œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์—์„œ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ์ด์ „ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ ์ˆ˜๋ฅผ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‚˜๋จธ์ง€๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๊ฐ€๋น„์ง€-์ˆ˜์ง‘์ด ์ง„ํ–‰๋œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ 10์œผ๋กœ ๋˜์–ด ์žˆ๋‹ค.

์นด๋‚˜๋ฆฌ ๋””ํ”Œ๋กœ์ด๋จผํŠธ

๋งŒ์•ฝ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ์ผ๋ถ€ ์‚ฌ์šฉ์ž ๋˜๋Š” ์„œ๋ฒ„์— ๋ฆด๋ฆฌ์Šค๋ฅผ ๋กค์•„์›ƒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ์— ์„ค๋ช…๋œ ์นด๋‚˜๋ฆฌ ํŒจ๋˜์— ๋”ฐ๋ผ ๊ฐ ๋ฆด๋ฆฌ์Šค ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์—ฌ๋Ÿฌ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๋””ํ”Œ๋กœ์ด๋จผํŠธ ์‚ฌ์–‘ ์ž‘์„ฑ

๋‹ค๋ฅธ ๋ชจ๋“  ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„ค์ •๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์—๋Š” .apiVersion, .kind ๊ทธ๋ฆฌ๊ณ  .metadata ํ•„๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์„ค์ • ํŒŒ์ผ ์ž‘์—…์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ๋‚ด์šฉ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌํ•˜๊ธฐ, ์ปจํ…Œ์ด๋„ˆ ๊ตฌ์„ฑํ•˜๊ธฐ ๊ทธ๋ฆฌ๊ณ  kubectl์„ ์‚ฌ์šฉํ•ด์„œ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌํ•˜๊ธฐ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค. ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์˜ค๋ธŒ์ ํŠธ์˜ ์ด๋ฆ„์€ ์œ ํšจํ•œ DNS ์„œ๋ธŒ๋„๋ฉ”์ธ ์ด๋ฆ„์ด์–ด์•ผ ํ•œ๋‹ค.

๋””ํ”Œ๋กœ์ด๋จผํŠธ์—๋Š” .spec ์„น์…˜๋„ ํ•„์š”ํ•˜๋‹ค.

ํŒŒ๋“œ ํ…œํ”Œ๋ฆฟ

.spec.template ๊ณผ .spec.selector ์€ .spec ์—์„œ ์œ ์ผํ•œ ํ•„์ˆ˜ ํ•„๋“œ์ด๋‹ค.

.spec.template ๋Š” ํŒŒ๋“œ ํ…œํ”Œ๋ฆฟ์ด๋‹ค. ์ด๊ฒƒ์€ ํŒŒ๋“œ์™€ ์ •ํ™•ํ•˜๊ฒŒ ๋™์ผํ•œ ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์ค‘์ฒฉ๋œ ๊ฒƒ์„ ์ œ์™ธํ•˜๋ฉด apiVersion ๊ณผ kind ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋Š”๋‹ค.

ํŒŒ๋“œ์— ํ•„์š”ํ•œ ํ•„๋“œ ์™ธ์— ๋””ํ”Œ๋กœ์ด๋จผํŠธ ํŒŒ๋“œ ํ…œํ”Œ๋ฆฟ์€ ์ ์ ˆํ•œ ๋ ˆ์ด๋ธ”๊ณผ ์ ์ ˆํ•œ ์žฌ์‹œ์ž‘ ์ •์ฑ…์„ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค. ๋ ˆ์ด๋ธ”์˜ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์ปจํŠธ๋กค๋Ÿฌ์™€ ๊ฒน์น˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค. ์ž์„ธํ•œ ๊ฒƒ์€ ์…€๋ ‰ํ„ฐ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

.spec.template.spec.restartPolicy ์—๋Š” ์˜ค์ง Always ๋งŒ ํ—ˆ์šฉ๋˜๊ณ , ๋ช…์‹œ๋˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์ด ๋œ๋‹ค.

๋ ˆํ”Œ๋ฆฌ์นด

.spec.replicas ์€ ํ•„์š”ํ•œ ํŒŒ๋“œ์˜ ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ์„ ํƒ์  ํ•„๋“œ์ด๋‹ค. ์ด๊ฒƒ์˜ ๊ธฐ๋ณธ๊ฐ’์€ 1์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด kubectl scale deployment deployment --replicas=X ๋ช…๋ น์œผ๋กœ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ํฌ๊ธฐ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์กฐ์ •ํ•œ ๋’ค, ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด(์˜ˆ: kubectl apply -f deployment.yaml ์‹คํ–‰), ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ–ˆ๋˜ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ํฌ๊ธฐ๊ฐ€ ์˜ค๋ฒ„๋ผ์ด๋“œ๋œ๋‹ค.

HorizontalPodAutoscaler(๋˜๋Š” ์ˆ˜ํ‰ ์Šค์ผ€์ผ๋ง์„ ์œ„ํ•œ ์œ ์‚ฌ API)๊ฐ€ ๋””ํ”Œ๋กœ์ด๋จผํŠธ ํฌ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, .spec.replicas ๋ฅผ ์„ค์ •ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.

๋Œ€์‹ , ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์ด .spec.replicas ํ•„๋“œ๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.

์…€๋ ‰ํ„ฐ

.spec.selector ๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ํŒŒ๋“œ์— ๋Œ€ํ•ด ๋ ˆ์ด๋ธ” ์…€๋ ‰ํ„ฐ๋ฅผ ์ง€์ •ํ•˜๋Š” ํ•„์ˆ˜ ํ•„๋“œ์ด๋‹ค.

.spec.selector ๋Š” .spec.template.metadata.labels ๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•˜๋ฉฐ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด API์— ์˜ํ•ด ๊ฑฐ๋ถ€๋œ๋‹ค.

API ๋ฒ„์ „ apps/v1 ์—์„œ๋Š” .spec.selector ์™€ .metadata.labels ์ด ์„ค์ •๋˜์ง€ ์•Š์œผ๋ฉด .spec.template.metadata.labels ์€ ๊ธฐ๋ณธ ์„ค์ •๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜์„œ ์ด๊ฒƒ๋“ค์€ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ apps/v1 ์—์„œ๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•œ ํ›„์—๋Š” .spec.selector ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ์ ์„ ์ฐธ๊ณ ํ•œ๋‹ค.

๋””ํ”Œ๋กœ์ด๋จผํŠธ๋Š” ํ…œํ”Œ๋ฆฟ์˜ .spec.template ์™€ ๋‹ค๋ฅด๊ฑฐ๋‚˜ ํŒŒ๋“œ์˜ ์ˆ˜๊ฐ€ .spec.replicas ๋ฅผ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ ์…€๋ ‰ํ„ฐ์™€ ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ด๋ธ”์„ ๊ฐ€์ง„ ํŒŒ๋“œ๋ฅผ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค. ํŒŒ๋“œ์˜ ์ˆ˜๊ฐ€ ์˜๋„ํ•œ ์ˆ˜๋Ÿ‰๋ณด๋‹ค ์ ์„ ๊ฒฝ์šฐ .spec.template ์— ๋งž๋Š” ์ƒˆ ํŒŒ๋“œ๋ฅผ ๋„์šด๋‹ค.

๋งŒ์•ฝ ์…€๋ ‰ํ„ฐ๊ฐ€ ๊ฒน์น˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์–ด๋Ÿฌ ๊ฐœ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์„œ๋กœ ์‹ธ์šฐ๊ณ  ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ „๋žต

.spec.strategy ๋Š” ์ด์ „ ํŒŒ๋“œ๋ฅผ ์ƒˆ๋กœ์šด ํŒŒ๋“œ๋กœ ๋Œ€์ฒดํ•˜๋Š” ์ „๋žต์„ ๋ช…์‹œํ•œ๋‹ค. .spec.strategy.type ์€ "์žฌ์ƒ์„ฑ" ๋˜๋Š” "๋กค๋ง์—…๋ฐ์ดํŠธ"๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. "๋กค๋ง์—…๋ฐ์ดํŠธ"๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค.

๋””ํ”Œ๋กœ์ด๋จผํŠธ ์žฌ์ƒ์„ฑ

๊ธฐ์กด์˜ ๋ชจ๋“  ํŒŒ๋“œ๋Š” .spec.strategy.type==Recreate ์ด๋ฉด ์ƒˆ ํŒŒ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ์ „์— ์ฃฝ๋Š”๋‹ค.

๋””ํ”Œ๋กœ์ด๋จผํŠธ ๋กค๋ง ์—…๋ฐ์ดํŠธ

๋””ํ”Œ๋กœ์ด๋จผํŠธ๋Š” .spec.strategy.type==RollingUpdate ์ด๋ฉด ํŒŒ๋“œ๋ฅผ ๋กค๋ง ์—…๋ฐ์ดํŠธ ๋ฐฉ์‹์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค. maxUnavailable ์™€ maxSurge ๋ฅผ ๋ช…์‹œํ•ด์„œ ๋กค๋ง ์—…๋ฐ์ดํŠธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.

์ตœ๋Œ€ ๋ถˆ๊ฐ€(Max Unavailable)

.spec.strategy.rollingUpdate.maxUnavailable ์€ ์—…๋ฐ์ดํŠธ ํ”„๋กœ์„ธ์Šค ์ค‘์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ตœ๋Œ€ ํŒŒ๋“œ์˜ ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ์„ ํƒ์  ํ•„๋“œ์ด๋‹ค. ์ด ๊ฐ’์€ ์ ˆ๋Œ€ ์ˆซ์ž(์˜ˆ: 5) ๋˜๋Š” ์˜๋„ํ•œ ํŒŒ๋“œ ๋น„์œจ(์˜ˆ: 10%)์ด ๋  ์ˆ˜ ์žˆ๋‹ค. ์ ˆ๋Œ€ ๊ฐ’์€ ๋‚ด๋ฆผํ•ด์„œ ๋ฐฑ๋ถ„์œจ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค. ๋งŒ์•ฝ .spec.strategy.rollingUpdate.maxSurge ๊ฐ€ 0์ด๋ฉด ๊ฐ’์ด 0์ด ๋  ์ˆ˜ ์—†๋‹ค. ๊ธฐ๋ณธ ๊ฐ’์€ 25% ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ด ๊ฐ’์„ 30%๋กœ ์„ค์ •ํ•˜๋ฉด ๋กค๋ง์—…๋ฐ์ดํŠธ ์‹œ์ž‘์‹œ ์ฆ‰๊ฐ ์ด์ „ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ ํฌ๊ธฐ๋ฅผ ์˜๋„ํ•œ ํŒŒ๋“œ ์ค‘ 70%๋ฅผ ์Šค์ผ€์ผ ๋‹ค์šดํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒˆ ํŒŒ๋“œ๊ฐ€ ์ค€๋น„๋˜๋ฉด ๊ธฐ์กด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์Šค์ผ€์ผ ๋‹ค์šดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์—…๋ฐ์ดํŠธ ์ค‘์— ํ•ญ์ƒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ „์ฒด ํŒŒ๋“œ์˜ ์ˆ˜๋Š” ์˜๋„ํ•œ ํŒŒ๋“œ์˜ ์ˆ˜์˜ 70% ์ด์ƒ์ด ๋˜๋„๋ก ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์Šค์ผ€์ผ ์—…ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ตœ๋Œ€ ์„œ์ง€(Max Surge)

.spec.strategy.rollingUpdate.maxSurge ๋Š” ์˜๋„ํ•œ ํŒŒ๋“œ์˜ ์ˆ˜์— ๋Œ€ํ•ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํŒŒ๋“œ์˜ ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ์„ ํƒ์  ํ•„๋“œ์ด๋‹ค. ์ด ๊ฐ’์€ ์ ˆ๋Œ€ ์ˆซ์ž(์˜ˆ: 5) ๋˜๋Š” ์˜๋„ํ•œ ํŒŒ๋“œ ๋น„์œจ(์˜ˆ: 10%)์ด ๋  ์ˆ˜ ์žˆ๋‹ค. MaxUnavailable ๊ฐ’์ด 0์ด๋ฉด ์ด ๊ฐ’์€ 0์ด ๋  ์ˆ˜ ์—†๋‹ค. ์ ˆ๋Œ€ ๊ฐ’์€ ์˜ฌ๋ฆผํ•ด์„œ ๋ฐฑ๋ถ„์œจ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค. ๊ธฐ๋ณธ ๊ฐ’์€ 25% ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ด ๊ฐ’์„ 30%๋กœ ์„ค์ •ํ•˜๋ฉด ๋กค๋ง์—…๋ฐ์ดํŠธ ์‹œ์ž‘์‹œ ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ ํฌ๊ธฐ๋ฅผ ์ฆ‰์‹œ ์กฐ์ •ํ•ด์„œ ๊ธฐ์กด ๋ฐ ์ƒˆ ํŒŒ๋“œ์˜ ์ „์ฒด ๊ฐฏ์ˆ˜๋ฅผ ์˜๋„ํ•œ ํŒŒ๋“œ์˜ 130%๋ฅผ ๋„˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค. ๊ธฐ์กด ํŒŒ๋“œ๊ฐ€ ์ฃฝ์œผ๋ฉด ์ƒˆ๋กœ์šด ๋ž˜ํ”Œ๋ฆฌ์นด์…‹์€ ์Šค์ผ€์ผ ์—…ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋™์•ˆ ํ•ญ์ƒ ์‹คํ–‰ํ•˜๋Š” ์ด ํŒŒ๋“œ์˜ ์ˆ˜๋Š” ์ตœ๋Œ€ ์˜๋„ํ•œ ํŒŒ๋“œ์˜ ์ˆ˜์˜ 130%๊ฐ€ ๋˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค.

์ง„ํ–‰ ๊ธฐํ•œ ์‹œ๊ฐ„(์ดˆ)

.spec.progressDeadlineSeconds ๋Š” ๋””ํ”Œ๋กœ์–ด๋จผํŠธ๊ฐ€ ํ‘œ๋ฉด์ ์œผ๋กœ type: Progressing, status: "False"์˜ ์ƒํƒœ ๊ทธ๋ฆฌ๊ณ  ๋ฆฌ์†Œ์Šค๊ฐ€ reason: ProgressDeadlineExceeded ์ƒํƒœ๋กœ ์ง„ํ–‰ ์‹คํŒจ๋ฅผ ๋ณด๊ณ ํ•˜๊ธฐ ์ „์— ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์ง„ํ–‰๋˜๋Š” ๊ฒƒ์„ ๋Œ€๊ธฐ์‹œํ‚ค๋Š” ์‹œ๊ฐ„(์ดˆ)๋ฅผ ๋ช…์‹œํ•˜๋Š” ์„ ํƒ์  ํ•„๋“œ์ด๋‹ค. ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ๊ณ„์† ์žฌ์‹œ๋„ ํ•œ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 600(์ดˆ)์ด๋‹ค. ๋ฏธ๋ž˜์— ์ž๋™ํ™”๋œ ๋กค๋ฐฑ์ด ๊ตฌํ˜„๋œ๋‹ค๋ฉด ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ƒํƒœ๋ฅผ ๊ด€์ฐฐํ•˜๊ณ , ๊ทธ ์ฆ‰์‹œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ๋กค๋ฐฑํ•  ๊ฒƒ์ด๋‹ค.

๋งŒ์•ฝ ๋ช…์‹œ๋œ๋‹ค๋ฉด ์ด ํ•„๋“œ๋Š” .spec.minReadySeconds ๋ณด๋‹ค ์ปค์•ผ ํ•œ๋‹ค.

์ตœ์†Œ ๋Œ€๊ธฐ ์‹œ๊ฐ„(์ดˆ)

.spec.minReadySeconds ๋Š” ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ํŒŒ๋“œ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์–ด๋–ค ๊ฒƒ๊ณผ๋„ ์ถฉ๋Œํ•˜์ง€ ์•Š๊ณ  ์‚ฌ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ค€๋น„๋˜์–ด์•ผ ํ•˜๋Š” ์ตœ์†Œ ์‹œ๊ฐ„(์ดˆ)์„ ์ง€์ •ํ•˜๋Š” ์„ ํƒ์  ํ•„๋“œ์ด๋‹ค. ์ด ๊ธฐ๋ณธ ๊ฐ’์€ 0์ด๋‹ค(ํŒŒ๋“œ๋Š” ์ค€๋น„๋˜๋Š” ์ฆ‰์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋จ). ํŒŒ๋“œ๊ฐ€ ์ค€๋น„๋˜์—ˆ๋‹ค๊ณ  ๊ฐ„์ฃผ๋˜๋Š” ์‹œ๊ธฐ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ปจํ…Œ์ด๋„ˆ ํ”„๋กœ๋ธŒ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

์ˆ˜์ • ๋ฒ„์ „ ๊ธฐ๋ก ์ œํ•œ

๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์ˆ˜์ • ๋ฒ„์ „ ๊ธฐ๋ก์€ ์ž์‹ ์ด ์ปจํŠธ๋กคํ•˜๋Š” ๋ ˆํ”Œ๋ฆฌ์นด์…‹์— ์ €์žฅ๋œ๋‹ค.

.spec.revisionHistoryLimit ์€ ๋กค๋ฐฑ์„ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ณด์กดํ•  ์ด์ „ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ์„ ํƒ์  ํ•„๋“œ์ด๋‹ค. ์ด ์ด์ „ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ etcd ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋น„ํ•˜๊ณ , kubectl get rs ์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€๋“์ฐจ๊ฒŒ ๋งŒ๋“ ๋‹ค. ๊ฐ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ๊ตฌ์„ฑ์€ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์— ์ €์žฅ๋œ๋‹ค. ์ด์ „ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด ์‚ญ์ œ๋˜๋ฉด ํ•ด๋‹น ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ˆ˜์ • ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์‚ฌ๋ผ์ง„๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ 10๊ฐœ์˜ ๊ธฐ์กด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด ์œ ์ง€๋˜์ง€๋งŒ ์ด์ƒ์ ์ธ ๊ฐ’์€ ์ƒˆ๋กœ์šด ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ๋นˆ๋„์™€ ์•ˆ์ •์„ฑ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.

๋”์šฑ ๊ตฌ์ฒด์ ์œผ๋กœ ์ด ํ•„๋“œ๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ๋ ˆํ”Œ๋ฆฌ์นด๊ฐ€ 0์ด ๋˜๋ฉฐ ์ด์ „ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด ์ •๋ฆฌ๋œ๋‹ค. ์ด ๊ฒฝ์šฐ, ์ƒˆ๋กœ์šด ๋””ํ”Œ๋กœ์ด๋จผํŠธ ๋กค์•„์›ƒ์„ ์ทจ์†Œํ•  ์ˆ˜ ์—†๋‹ค. ์ƒˆ๋กœ์šด ๋””ํ”Œ๋กœ์ด๋จผํŠธ ๋กค์•„์›ƒ์€ ์ˆ˜์ • ๋ฒ„์ „ ์ด๋ ฅ์ด ์ •๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ผ์‹œ ์ •์ง€

.spec.paused ๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ผ์‹œ ์ค‘์ง€๋‚˜ ์žฌ๊ฐœํ•˜๊ธฐ ์œ„ํ•œ ์„ ํƒ์  ๋ถ€์šธ ํ•„๋“œ์ด๋‹ค. ์ผ์‹œ ์ค‘์ง€ ๋œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์™€ ์ผ์‹œ ์ค‘์ง€ ๋˜์ง€ ์•Š์€ ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์‚ฌ์ด์˜ ์œ ์ผํ•œ ์ฐจ์ด์ ์€ ์ผ์‹œ ์ค‘์ง€๋œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋Š” PodTemplateSpec์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ผ์‹œ์ค‘์ง€ ๋œ ๊ฒฝ์šฐ ์ƒˆ ๋กค์•„์›ƒ์„ ํŠธ๋ฆฌ๊ฑฐ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋Š” ์ƒ์„ฑ์‹œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ผ์‹œ ์ค‘์ง€๋˜์ง€ ์•Š๋Š”๋‹ค.

๋‹ค์Œ ๋‚ด์šฉ

์ตœ์ข… ์ˆ˜์ • March 03, 2025 at 12:54 AM PST: [ko] fix: code block typo in deployment.md (2a87c79827)