ื ืคึผืฉื•ื˜ ืื•ืŸ ื–ื™ื›ืขืจ ื•ื•ืขื’ ืฆื• ืึธื˜ืึทืžื™ื™ื˜ ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ ื ื™ืฆืŸ ื”ืขืœื

ื ืคึผืฉื•ื˜ ืื•ืŸ ื–ื™ื›ืขืจ ื•ื•ืขื’ ืฆื• ืึธื˜ืึทืžื™ื™ื˜ ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ ื ื™ืฆืŸ ื”ืขืœื

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ื– ืึท ื–ื™ื™ืขืจ ืขืคืขืงื˜ื™ื•ื• ื•ื•ืขื’ ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ื ื™ื™ึท ืงืึธื“ ืื•ื™ืฃ ืึท ืกืึทื‘ืกืขื˜ ืคื•ืŸ ื ื™ืฆืขืจืก. ืขืก ื‘ืื˜ื™ื™ื˜ื™ืง ืจืึทื“ื•ืกืึทื– ื“ื™ ืคืึทืจืงืขืจ ืžืึทืกืข ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืคึผืจืึธื‘ืœืขืžืึทื˜ื™ืง ื‘ืขืฉืึทืก ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ื•ื•ื™ื™ึทืœ ืขืก ืึทืงืขืจื– ื‘ืœื•ื™ื– ืื™ืŸ ืึท ืกืคึผืขืฆื™ืคื™ืฉ ืกืึทื‘ืกืขื˜. ื“ืขืจ ืฆืขื˜ืœ ืื™ื– ื“ืขื“ืึทืงื™ื™ื˜ืึทื“ ืฆื• ื•ื•ื™ ืฆื• ืึธืจื’ืึทื ื™ื–ื™ืจืŸ ืึทื–ืึท ืึท ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ื ื™ืฆืŸ Kubernetes ืื•ืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืึธื˜ืึทืžื™ื™ืฉืึทืŸ. ืžื™ืจ ื™ื‘ืขืจื ืขืžืขืŸ ืื™ืจ ื•ื•ื™ืกืŸ ืขืคึผืขืก ื•ื•ืขื’ืŸ ื”ืขืœื ืื•ืŸ ืงื•ื‘ืขืจื ืขื˜ืขืก ืจืขืกื•ืจืกืŸ.

ื ืคึผืฉื•ื˜ ืื•ืŸ ื–ื™ื›ืขืจ ื•ื•ืขื’ ืฆื• ืึธื˜ืึทืžื™ื™ื˜ ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ ื ื™ืฆืŸ ื”ืขืœื

ื ืคึผืฉื•ื˜ ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืฆื• Kubernetes ื›ื•ืœืœ ืฆื•ื•ื™ื™ ืฉืœื™ืกืœ ืจืขืกื•ืจืกืŸ: ื“ื™ ืกืขืจื•ื•ื™ืก ื–ื™ืš ืื•ืŸ ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ื’ืขืฆื™ื™ึทื’. ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืึทืจื‘ืขื˜ ื“ื•ืจืš ืึท ืื™ื™ืŸ ื“ื™ื ืกื˜ ื•ื•ืึธืก ื™ื ื˜ืขืจืึทืงืฅ ืžื™ื˜ ืฆื•ื•ื™ื™ ืคืึทืจืฉื™ื“ืขื ืข ืจืขืกื•ืจืกืŸ ืกืขืจื•ื•ื™ื ื’ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ืคืึทืจืงืขืจ. ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืจืขืกื•ืจืกืŸ ื•ื•ืขื˜ ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ ื“ื™ "ืงืึทื ืึทืจื™" ื•ื•ืขืจืกื™ืข, ืื•ืŸ ื“ื™ ืจื’ืข ื•ื•ืขื˜ ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ ื“ื™ ืกื˜ืึทื‘ื™ืœ ื•ื•ืขืจืกื™ืข. ืื™ืŸ ื“ืขื ืกื™ื˜ื•ืึทืฆื™ืข, ืžื™ืจ ืงืขื ืขืŸ ืจืขื’ื•ืœื™ืจืŸ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืงืึทื ืึทืจื™ ื•ื•ืขืจืกื™ืขืก ืฆื• ืจืขื“ื•ืฆื™ืจืŸ ื“ื™ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹ืคืึทืจืงืขืจ ืคืืจืœืื ื’ื˜ ืฆื• ื“ื™ื ืขืŸ. ืื•ื™ื‘, ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื™ืจ ื‘ืขืกืขืจ ื•ื•ืขืœืŸ ืฆื• ื ื•ืฆืŸ Yaml, ืขืก ื•ื•ืขื˜ ืงื•ืงืŸ ื•ื•ื™ ื“ืึธืก ืื™ืŸ Kubernetes:

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 ืื•ืŸ ืื™ืŸ Kubernetes ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืขืก ืื™ื– ืืคื™ืœื• ืึท ืคื•ืœ ื˜ื•ื˜ืึธืจื™ืึทืœ ืื•ื™ืฃ ื“ืขื ืกืฆืขื ืึทืจ. ืึธื‘ืขืจ ื“ื™ ื”ื•ื™ืคึผื˜ ืงืฉื™ื ืคื•ืŸ ื“ืขื ืคึผืึธืกื˜ืŸ ืื™ื– ื•ื•ื™ ืžื™ืจ ื•ื•ืขืœืŸ ืึธื˜ืึทืžื™ื™ื˜ ื“ืขื ืคึผืจืึธืฆืขืก ื ื™ืฆืŸ ื”ืขืœื.

ืึธื˜ืึทืžื™ื™ืฉืึทืŸ ืคื•ืŸ ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜

ืขืจืฉื˜ืขืจ ืคื•ืŸ ืึทืœืข, ืžื™ืจ ื“ืึทืจืคึฟืŸ ืึท ื”ืขืœื ื˜ืฉืึทืจื˜ ืžืึทืคึผืข, ื•ื•ืึธืก ืฉื•ื™ืŸ ื›ื•ืœืœ ื“ื™ ืจืขืกื•ืจืกืŸ ื•ื•ืึธืก ืžื™ืจ ื“ื™ืกืงืึทืกื˜ ืื•ื™ื‘ืŸ. ืขืก ื–ืึธืœ ืงื•ืงืŸ ืขืคึผืขืก ื•ื•ื™ ื“ืึธืก:

~/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

ืึทื– ืก ืึทืœืข! ืื•ื™ื‘ ืื™ืจ ืคึผื™ื ื’ ื“ื™ ืกืขืจื•ื•ื™ืก, ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ ืึทื– ื“ื™ ืงืึทื ืึทืจื™ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ืจื•ืฅ ื‘ืœื•ื™ื– ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ืฆื™ื™ื˜.

ืื•ื™ื‘ ืื™ืจ ื–ื•ื›ื˜ ืคึฟืึทืจ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืึธื˜ืึทืžื™ื™ืฉืึทืŸ ืžื›ืฉื™ืจื™ื ื•ื•ืึธืก ืึทืจื™ื™ึทื ื ืขืžืขืŸ ื“ื™ ื“ื™ืกืงืจื™ื™ื‘ื“ ืœืึธื’ื™ืง, ื‘ืึทืฆืึธืœืŸ ื•ืคืžืขืจืงื–ืึทืžืงื™ื™ึทื˜ ืฆื• Deliverybot ืื•ืŸ ื”ืขืœื ืึธื˜ืึทืžื™ื™ืฉืึทืŸ ืžื›ืฉื™ืจื™ื ืื•ื™ืฃ GitHub. ื“ื™ ื”ืขืœื ื˜ืฉืึทืจืฅ ื’ืขื ื™ืฆื˜ ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ ื“ืขื ืื•ืคึฟืŸ ื“ื™ืกืงืจื™ื™ื‘ื“ ืื•ื™ื‘ืŸ ื–ืขื ืขืŸ ืื•ื™ืฃ Github, ื“ืึธ. ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, ื“ืึธืก ืื™ื– ื’ืขื•ื•ืขืŸ ืึท ื˜ืขืึธืจืขื˜ื™ืฉ ืื™ื‘ืขืจื‘ืœื™ืง ืคื•ืŸ ื•ื•ื™ ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ ืึธื˜ืึทืžื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืคื•ืŸ ืงืึทื ืึทืจื™ ื•ื•ืขืจืกื™ืขืก ืื™ืŸ ืคื™ืจ, ืžื™ื˜ ืกืคึผืขืฆื™ืคื™ืฉ ืงืึทื ืกืขืคึผืก ืื•ืŸ ื‘ื™ื™ืฉืคื™ืœืŸ.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’