๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
[DevOps]/Kubernetes

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฐฐํฌ ์ „๋žต ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด๊ธฐ

by ํŒกํŽ‘ํ 2023. 12. 15.
728x90

๐Ÿ“Œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฐฐํฌ ์ „๋žต ๊ด€๋ จ ์šฉ์–ด ์ •๋ฆฌ

๋กค๋ง ์—…๋ฐ์ดํŠธ(Rolling Update)

  • ๋กค๋ง ์—…๋ฐ์ดํŠธ๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฐํฌ ์ „๋žต ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
    • ๋‹ค๋ฅธ ๋ฐฐํฌ ์ „๋žต์ธ ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ์ด๋‚˜ ์นด๋‚˜๋ฆฌ์•„ ๋ฐฐํฌ๋„ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ด์ „ ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ ์ง„์ ์œผ๋กœ ์ œ๊ฑฐํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ๋กค๋ง ์—…๋ฐ์ดํŠธ๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐ€์šฉ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์•ˆ์ •์ ์ธ ์—…๋ฐ์ดํŠธ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ๋Š” ReplicaSet ๋˜๋Š” Deployment ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กค๋ง ์—…๋ฐ์ดํŠธ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • yaml ํŒŒ์ผ์— ์ง์ ‘ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜ ์„ค๋ช…์— ์žˆ๋‹ค.

๋กค์•„์›ƒ(Rollout)

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์—…๋ฐ์ดํŠธ๋‚˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค.
  • ๋กค์•„์›ƒ์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฐํฌ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ์ด์ „ ๋ฒ„์ „๊ณผ ์ƒˆ๋กœ์šด ๋ฒ„์ „ ๊ฐ„์˜ ์ „ํ™˜์„ ์›ํ™œํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์˜ˆ์‹œ yaml ํŒŒ์ผ

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    tier: backend 
  name: my-deployment
spec:
  replicas: 4
  selector:
    matchLabels:
      tier: backend
  strategy: # ์•„๋ž˜ ์„ค๋ช…
    type: RollingUpdate # ์•„๋ž˜ ์„ค๋ช…
    rollingUpdate: # ์•„๋ž˜ ์„ค๋ช…
      maxUnavailiable: 1 # ์•„๋ž˜ ์„ค๋ช…
      maxSurge: 2 # ์•„๋ž˜ ์„ค๋ช…
  template:
    metadata:
      labels:
        tier: backend
    spec:
      containers:
        - image: my-springboot:0.1
          name: my-springboot
          ports:
           - containerPort: 8080

strategy

  •  strategy ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ Deployment์˜ ๋ฐฐํฌ ์ „๋žต์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

type

  • ๋ฐฐํฌ ์ „๋žต์˜ ์ข…๋ฅ˜๋ฅผ ์ง€์ •ํ•œ๋‹ค.
  • ์ฃผ๋กœ "Recreate"์™€ "RollingUpdate" ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์ด ์‚ฌ์šฉ๋œ๋‹ค.
  • Recreate
    • ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด ์ด์ „ ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ชจ๋‘ ์‚ญ์ œํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ์ƒ์„ฑํ•œ๋‹ค.
  • RollingUpdate
    • ๋กค๋ง ์—…๋ฐ์ดํŠธ ์ „๋žต์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ ์ง„์ ์œผ๋กœ ๋ฐฐํฌํ•œ๋‹ค.
    • ์ด์ „ ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ๊ฑฐํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜์—ฌ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

rollingUpdate

  • "RollingUpdate" ์ „๋žต์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ ์ด ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กค๋ง ์—…๋ฐ์ดํŠธ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

maxUnavailable

  • ์—…๋ฐ์ดํŠธ ์ค‘ ์ œ๊ฑฐํ•  Pod์˜ ์ตœ๋Œ€ ์ˆ˜๋ฅผ ์ง€์ •ํ•œ๋‹ค.
  • %๋กœ ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

maxSurge

  • ์—…๋ฐ์ดํŠธ ์ค‘ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” Pod์˜ ์ตœ๋Œ€ ์ˆ˜๋ฅผ ์ง€์ •ํ•œ๋‹ค.
  • %๋กœ ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๐Ÿ› ๏ธ ๋ช…๋ น์–ด๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ

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

kubectl create -f <yaml ํŒŒ์ผ๋ช…>.yml
  • ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ตœ์ดˆ๋กœ ์ƒ์„ฑํ•œ๋‹ค.

 

๋ช…๋ นํ˜• ์ ‘๊ทผ์œผ๋กœ ์ด๋ฏธ์ง€ ์—…๋ฐ์ดํŠธ

kubectl set image deployment <deployment name> <containder name>=<image name>:<version>
  • ์ด๋ฏธ ๋„์›Œ์ ธ ์žˆ๋Š” deployment ์ด๋ฏธ์ง€๋ฅผ ๊ต์ฒดํ•œ๋‹ค. 
  • ์ตœ์ดˆ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•œ yml ํŒŒ์ผ์—๋Š” ์–ด๋– ํ•œ ๋ณ€ํ™”๋„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

 

์„ ์–ธํ˜• ์ ‘๊ทผ์œผ๋กœ ์ด๋ฏธ์ง€ ์—…๋ฐ์ดํŠธ

kubectl apply -f <yaml ํŒŒ์ผ๋ช…>.yml
  • ์ง์ ‘ yml ํŒŒ์ผ์—์„œ ๋ณ€๊ฒฝ๋œ ์ด๋ฏธ์ง€์˜ ๋ฒ„์ „ ํƒœ๊ทธ๋กœ ์ˆ˜์ • ํ›„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

 

์—…๋ฐ์ดํŠธ ์—ฌ๋ถ€ ํ™•์ธํ•˜๊ธฐ

kubectl rollout status deployment/<yaml ํŒŒ์ผ์— ๋ช…์‹œํ•œ Deployment Name>
kubectl rollout status deployment/my-deployment # example ์•„๋ž˜ ๋ช…๋ น์–ด๋„ ๋™์ผ
  • ํ•ด๋‹น ๋””ํ”Œ๋กœ์ด๋จผํŠธ ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜์—ฌ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ง„ํ–‰๋˜์—ˆ๋Š”์ง€ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

kubectl rollout history deployment/my-deployment
  • ํ•ด๋‹น ๋””ํ”Œ๋กœ์ด๋จผํŠธ ๊ฐ์ฒด์˜ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณด๋Š” ๊ฒƒ์ด๋‹ค.

 

์—…๋ฐ์ดํŠธ ๋กค๋ฐฑํ•˜๊ธฐ

kubectl rollout undo deployment/my-deployment --to-revision=2
  • ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑ๋œ๋‹ค.
  • --to-revision์„ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์ฐธ๊ณ 

๋คผํŠผ

Udemy - Certified Kubernetes Administrator (CKA) with Practice Tests

https://velog.io/@_zero_/์ฟ ๋ฒ„๋„คํ‹ฐ์Šค-๋ฐฐํฌ-์ „๋žตRollingUpdate-BlueGreen-Canary-๋ฐ-๋กค๋ฐฑRollback-๊ฐœ๋…๊ณผ-์„ค์ •

728x90