เชนเซ‡เชฒเซเชฎ เชธเชพเชฅเซ‡ เช•เซ‡เชจเซ‡เชฐเซ€ เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸเชจเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชเช• เชธเชฐเชณ เช…เชจเซ‡ เชธเซเชฐเช•เซเชทเชฟเชค เชฐเซ€เชค

เชนเซ‡เชฒเซเชฎ เชธเชพเชฅเซ‡ เช•เซ‡เชจเซ‡เชฐเซ€ เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸเชจเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชเช• เชธเชฐเชณ เช…เชจเซ‡ เชธเซเชฐเช•เซเชทเชฟเชค เชฐเซ€เชค

เช•เซ‡เชจเซ‡เชฐเซ€ เชœเชฎเชพเชตเชŸ เช เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเชพ เชธเชฌเชธเซ‡เชŸ เชชเชฐ เชจเชตเชพ เช•เซ‹เชกเชจเซ‡ เชšเช•เชพเชธเชตเชพเชจเซ€ เช–เซ‚เชฌ เช…เชธเชฐเช•เชพเชฐเช• เชฐเซ€เชค เช›เซ‡. เชคเซ‡ เชŸเซเชฐเชพเชซเชฟเช• เชฒเซ‹เชกเชจเซ‡ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชฐเซ€เชคเซ‡ เช˜เชŸเชพเชกเซ‡ เช›เซ‡ เชœเซ‡ เชœเชฎเชพเชตเชŸ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชธเชฎเชธเซเชฏเชพเชฐเซ‚เชช เชฌเชจเซ€ เชถเช•เซ‡ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เชฎเชพเชคเซเชฐ เชšเซ‹เช•เซเช•เชธ เชธเชฌเชธเซ‡เชŸเชฎเชพเช‚ เชœ เชฅเชพเชฏ เช›เซ‡. เช† เชจเซ‹เช‚เชง เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เช…เชจเซ‡ เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸ เช“เชŸเซ‹เชฎเซ‡เชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช†เชตเซ€ เชœเชฎเชพเชตเชŸ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช—เซ‹เช เชตเชตเซ€ เชคเซ‡ เชฎเชพเชŸเซ‡ เชธเชฎเชฐเซเชชเชฟเชค เช›เซ‡. เช…เชฎเซ‡ เชงเชพเชฐเซ€เช เช›เซ€เช เช•เซ‡ เชคเชฎเซ‡ เชนเซ‡เชฒเซเชฎ เช…เชจเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชธเช‚เชธเชพเชงเชจเซ‹ เชตเชฟเชถเซ‡ เช•เช‚เชˆเช• เชœเชพเชฃเซ‹ เช›เซ‹.

เชนเซ‡เชฒเซเชฎ เชธเชพเชฅเซ‡ เช•เซ‡เชจเซ‡เชฐเซ€ เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸเชจเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชเช• เชธเชฐเชณ เช…เชจเซ‡ เชธเซเชฐเช•เซเชทเชฟเชค เชฐเซ€เชค

เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชฎเชพเชŸเซ‡ เชเช• เชธเชฐเชณ เช•เซ‡เชจเซ‡เชฐเซ€ เชœเชฎเชพเชตเชŸเชฎเชพเช‚ เชฌเซ‡ เชฎเซเช–เซเชฏ เชธเช‚เชธเชพเชงเชจเซ‹ เชถเชพเชฎเซ‡เชฒ เช›เซ‡: เชธเซ‡เชตเชพ เชชเซ‹เชคเซ‡ เช…เชจเซ‡ เชœเชฎเชพเชตเชŸ เชธเชพเชงเชจ. เช•เซ‡เชจเซ‡เชฐเซ€ เชœเชฎเชพเชตเชŸ เชเช• เชœ เชธเซ‡เชตเชพ เชฆเซเชตเชพเชฐเชพ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡ เช…เชชเชกเซ‡เชŸ เชŸเซเชฐเชพเชซเชฟเช•เชจเซ‡ เชธเซ‡เชตเชพ เช†เชชเชคเชพ เชฌเซ‡ เช…เชฒเช—-เช…เชฒเช— เชธเช‚เชธเชพเชงเชจเซ‹ เชธเชพเชฅเซ‡ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เช•เชฐเซ‡ เช›เซ‡. เช†เชฎเชพเช‚เชฅเซ€ เชเช• เชธเช‚เชธเชพเชงเชจเซ‹ "เช•เซ‡เชจเซ‡เชฐเซ€" เชธเช‚เชธเซเช•เชฐเชฃ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชถเซ‡, เช…เชจเซ‡ เชฌเซ€เชœเซเช‚ เชธเซเชฅเชฟเชฐ เชธเช‚เชธเซเช•เชฐเชฃ เชธเชพเชฅเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเชถเซ‡. เช† เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚, เชธเซ‡เชตเชพ เช†เชชเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เชŸเซเชฐเชพเชซเชฟเช•เชจเซ€ เชฎเชพเชคเซเชฐเชพ เช˜เชŸเชพเชกเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เช•เซ‡เชจเซ‡เชฐเซ€ เชธเช‚เชธเซเช•เชฐเชฃเซ‹เชจเซ€ เชธเช‚เช–เซเชฏเชพเชจเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช. เชœเซ‹, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชคเชฎเซ‡ เชฏเชฎเชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซเช‚ เชชเชธเช‚เชฆ เช•เชฐเซ‹ เช›เซ‹, เชคเซ‹ เชคเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชฎเชพเช‚ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฆเซ‡เช–เชพเชถเซ‡:

kind: Deployment
metadata:
  name: app-canary
  labels:
    app: app
spec:
  replicas: 1
  ...
    image: myapp:canary
---
kind: Deployment
metadata:
  name: app
  labels:
    app: app
spec:
  replicas: 5
  ...
    image: myapp:stable
---
kind: Service
selector:
  app: app # Selector will route traffic to both deployments.

kubectl เช…เชจเซ‡ in เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช† เชตเชฟเช•เชฒเซเชชเชจเซ€ เช•เชฒเซเชชเชจเชพ เช•เชฐเชตเซ€ เชตเชงเซ เชธเชฐเชณ เช›เซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เช† เชฆเซƒเชถเซเชฏ เชชเชฐ เชธเช‚เชชเซ‚เชฐเซเชฃ เชŸเซเชฏเซเชŸเซ‹เชฐเซ€เชฏเชฒ เชชเชฃ เช›เซ‡. เชชเชฐเช‚เชคเซ เช† เชชเซ‹เชธเซเชŸเชจเซ‹ เชฎเซเช–เซเชฏ เชชเซเชฐเชถเซเชจ เช เช›เซ‡ เช•เซ‡ เช†เชชเชฃเซ‡ เชนเซ‡เชฒเซเชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช† เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เช•เชฐเซ€เชถเซเช‚.

เช•เซ‡เชจเซ‡เชฐเซ€ เชœเชฎเชพเชตเชŸเชจเซเช‚ เช“เชŸเซ‹เชฎเซ‡เชถเชจ

เชธเซŒ เชชเซเชฐเชฅเชฎ, เช…เชฎเชจเซ‡ เชนเซ‡เชฒเซเชฎ เชšเชพเชฐเซเชŸ เชจเช•เชถเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชœเซ‡เชฎเชพเช‚ เช†เชชเชฃเซ‡ เช‰เชชเชฐ เชšเชฐเซเชšเชพ เช•เชฐเซ‡เชฒ เชธเช‚เชธเชพเชงเชจเซ‹ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชธเชฎเชพเชตเชฟเชทเซเชŸ เช›เซ‡. เชคเซ‡ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เช•เช‚เชˆเช• เชฆเซ‡เช–เชพเชตเซเช‚ เชœเซ‹เชˆเช:

~/charts/app
โ”œโ”€โ”€ Chart.yaml
โ”œโ”€โ”€ README.md
โ”œโ”€โ”€ templates
โ”‚   โ”œโ”€โ”€ NOTES.txt
โ”‚   โ”œโ”€โ”€ _helpers.tpl
โ”‚   โ”œโ”€โ”€ deployment.yaml
โ”‚   โ””โ”€โ”€ service.yaml
โ””โ”€โ”€ values.yaml

เชนเซ‡เชฒเซเชฎ เช•เชจเซเชธเซ‡เชชเซเชŸเชจเซ‹ เช†เชงเชพเชฐ เชฎเชฒเซเชŸเชฟ-เชตเชฐเซเชเชจ เชฐเชฟเชฒเซ€เชเชจเซเช‚ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ เช›เซ‡. เชธเซเชฅเชฟเชฐ เชธเช‚เชธเซเช•เชฐเชฃ เช เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช•เซ‹เชกเชจเซ€ เช…เชฎเชพเชฐเซ€ เชฎเซเช–เซเชฏ เชธเซเชฅเชฟเชฐ เชถเชพเช–เชพ เช›เซ‡. เชชเชฐเช‚เชคเซ เชนเซ‡เชฒเซเชฎ เชธเชพเชฅเซ‡ เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ เชชเซเชฐเชพเชฏเซ‹เช—เชฟเช• เช•เซ‹เชก เชธเชพเชฅเซ‡ เช•เซ‡เชจเซ‡เชฐเซ€ เชชเซเชฐเช•เชพเชถเชจ เชœเชฎเชพเชตเซ€ เชถเช•เซ€เช เช›เซ€เช. เชฎเซเช–เซเชฏ เชตเชธเซเชคเซ เชธเซเชฅเชฟเชฐ เชธเช‚เชธเซเช•เชฐเชฃ เช…เชจเซ‡ เช•เซ‡เชจเซ‡เชฐเซ€ เชชเซเชฐเช•เชพเชถเชจ เชตเชšเซเชšเซ‡ เชŸเซเชฐเชพเชซเชฟเช• เชตเชฟเชจเชฟเชฎเชฏ เชœเชพเชณเชตเชตเชพเชจเซเช‚ เช›เซ‡. เช…เชฎเซ‡ เชตเชฟเชถเซ‡เชท เชชเชธเช‚เชฆเช—เซ€เช•เชพเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช† เชฌเชงเซเช‚ เชฎเซ‡เชจเซ‡เชœ เช•เชฐเซ€เชถเซเช‚:

selector:
  app.kubernetes.io/name: myapp

เช…เชฎเชพเชฐเชพ "เช•เซ‡เชจเซ‡เชฐเซ€" เช…เชจเซ‡ เชธเซเชฅเชฟเชฐ เชœเชฎเชพเชตเชŸ เชธเช‚เชธเชพเชงเชจเซ‹ เช† เชฒเซ‡เชฌเชฒเชจเซ‡ เชฎเซ‹เชกเซเชฏเซเชฒเซ‹ เชชเชฐ เชธเซ‚เชšเชตเชถเซ‡. เชœเซ‹ เชฌเชงเซเช‚ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เช—เซ‹เช เชตเซ‡เชฒเซเช‚ เชนเซ‹เชฏ, เชคเซ‹ เชชเช›เซ€ เช…เชฎเชพเชฐเชพ เชนเซ‡เชฒเซเชฎ เชšเชพเชฐเซเชŸ เชจเช•เชถเชพเชจเชพ เช•เซ‡เชจเซ‡เชฐเซ€ เชธเช‚เชธเซเช•เชฐเชฃเชจเซ€ เชœเชฎเชพเชตเชŸ เชฆเชฐเชฎเชฟเชฏเชพเชจ เช†เชชเชฃเซ‡ เชœเซ‹เชถเซเช‚ เช•เซ‡ เชŸเซเชฐเชพเชซเชฟเช• เชจเชตเชพ เชœเชฎเชพเชตเชŸ เช•เชฐเซ‡เชฒเชพ เชฎเซ‹เชกเซเชฏเซเชฒเซ‹ เชคเชฐเชซ เชจเชฟเชฐเซเชฆเซ‡เชถเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เช† เช†เชฆเซ‡เชถเชจเซเช‚ เชธเซเชฅเชฟเชฐ เชธเช‚เชธเซเช•เชฐเชฃ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฆเซ‡เช–เชพเชถเซ‡:

helm upgrade
  --install myapp 
  --namespace default 
  --set app.name=myapp       # Goes into app.kubernetes.io/name
  --set app.version=v1       # Goes into app.kubernetes.io/version
  --set image.tag=stable 
  --set replicaCount=5

เชนเชตเซ‡ เชšเชพเชฒเซ‹ เช†เชชเชฃเซ€ เช•เซ‡เชจเซ‡เชฐเซ€ เชฐเซ€เชฒเซ€เช เชคเชชเชพเชธเซ€เช. เช•เซ‡เชจเซ‡เชฐเซ€ เชธเช‚เชธเซเช•เชฐเชฃเชจเซ‡ เชœเชฎเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เช†เชชเชฃเซ‡ เชฌเซ‡ เชฌเชพเชฌเชคเซ‹ เชฏเชพเชฆ เชฐเชพเช–เชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชชเซเชฐเช•เชพเชถเชจเชจเซเช‚ เชจเชพเชฎ เช…เชฒเช— เชนเซ‹เชตเซเช‚ เชœเซ‹เชˆเช เชœเซ‡เชฅเซ€ เช•เชฐเซ€เชจเซ‡ เช…เชฎเซ‡ เชตเชฐเซเชคเชฎเชพเชจ เชธเซเชฅเชฟเชฐ เชตเชฐเซเชเชจเชฎเชพเช‚ เช…เชชเชกเซ‡เชŸ เชฐเซ‹เชฒ เช†เช‰เชŸ เชจ เช•เชฐเซ€เช. เชตเชฐเซเชเชจ เช…เชจเซ‡ เชŸเซ…เช— เชชเชฃ เช…เชฒเช— เชนเซ‹เชตเชพ เชœเซ‹เชˆเช เชœเซ‡เชฅเซ€ เช•เชฐเซ€เชจเซ‡ เช…เชฎเซ‡ เช…เชจเซเชฏ เช•เซ‹เชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ€เช เช…เชจเซ‡ เชฐเชฟเชธเซ‹เชฐเซเชธ เชŸเซ…เช—เซเชธ เชฆเซเชตเชพเชฐเชพ เชคเชซเชพเชตเชคเซ‹ เช“เชณเช–เซ€ เชถเช•เซ€เช.

helm upgrade
  --install myapp-canary 
  --namespace default 
  --set app.name=myapp       # Goes into app.kubernetes.io/name
  --set app.version=v2       # Goes into app.kubernetes.io/version
  --set image.tag=canary 
  --set replicaCount=1

เชฌเชธ เชเชŸเชฒเซเช‚ เชœ! เชœเซ‹ เชคเชฎเซ‡ เชธเซ‡เชตเชพเชจเซ‡ เชชเชฟเช‚เช— เช•เชฐเซ‹ เช›เซ‹, เชคเซ‹ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹ เช•เซ‡ เช•เซ‡เชจเซ‡เชฐเซ€ เช…เชชเชกเซ‡เชŸ เชธเชฎเชฏเชจเชพ เช…เชฎเซเช• เชญเชพเช—เชฎเชพเช‚ เชœ เชŸเซเชฐเชพเชซเชฟเช•เชจเซ‡ เชฐเซ‚เชŸ เช•เชฐเซ‡ เช›เซ‡.

เชœเซ‹ เชคเชฎเซ‡ เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸ เช“เชŸเซ‹เชฎเซ‡เชถเชจ เชŸเซ‚เชฒเซเชธ เชถเซ‹เชงเซ€ เชฐเชนเซเชฏเชพ เช›เซ‹ เชœเซ‡เชฎเชพเช‚ เชตเชฐเซเชฃเชตเซ‡เชฒ เชคเชฐเซเช• เชถเชพเชฎเซ‡เชฒ เช›เซ‡, เชคเซ‹ เชคเซ‡เชจเชพ เชชเชฐ เชงเซเชฏเชพเชจ เช†เชชเซ‹ เชกเชฟเชฒเชฟเชตเชฐเซ€เชฌเซ‹เชŸ เช…เชจเซ‡ เชชเชฐ GitHub เชชเชฐ เชนเซ‡เชฒเซเชฎ เช“เชŸเซ‹เชฎเซ‡เชถเชจ เชŸเซ‚เชฒเซเชธ. เช‰เชชเชฐ เชตเชฐเซเชฃเชตเซ‡เชฒ เชชเชฆเซเชงเชคเชฟเชจเซ‹ เช…เชฎเชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเชพ เชนเซ‡เชฒเซเชฎ เชšเชพเชฐเซเชŸเซเชธ Github เชชเชฐ เช›เซ‡, เช…เชนเซ€เช‚ เชœ. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เช† เชšเซ‹เช•เซเช•เชธ เช–เซเชฏเชพเชฒเซ‹ เช…เชจเซ‡ เช‰เชฆเชพเชนเชฐเชฃเซ‹ เชธเชพเชฅเซ‡ เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช‚ เช•เซ‡เชจเซ‡เชฐเซ€ เชตเชฐเซเชเชจเชจเซ€ เชœเชฎเชพเชตเชŸเชจเชพ เช“เชŸเซ‹เชฎเซ‡เชถเชจเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเซเช‚ เชคเซ‡เชจเซ€ เชธเซˆเชฆเซเชงเชพเช‚เชคเชฟเช• เชเชพเช‚เช–เซ€ เชนเชคเซ€.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹