เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #2: เด†เตผเด—เต‹ เดฑเต‹เตพเด”เดŸเตเดŸเตเด•เตพ

Kubernetes-เดฒเต‡เด•เตเด•เต เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด™เตเด™เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดžเด™เตเด™เตพ k8s-native Argo Rollouts เดตเดฟเดจเตเดฏเดพเดธ เด•เตบเดŸเตเดฐเต‹เดณเดฑเตเด‚ GitlabCI เด‰เด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚.

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #2: เด†เตผเด—เต‹ เดฑเต‹เตพเด”เดŸเตเดŸเตเด•เตพ

https://unsplash.com/photos/V41PulGL1z0

เดˆ เดชเดฐเดฎเตเดชเดฐเดฏเดฟเดฒเต† เดฒเต‡เด–เดจเด™เตเด™เตพ

เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚

เดจเดฟเด™เตเด™เตพ เดตเดพเดฏเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดžเด™เตเด™เตพ เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต เด†เดฆเตเดฏ เดญเดพเด—เด‚, เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด™เตเด™เตพ เดŽเดจเตเดคเดพเดฃเต†เดจเตเดจเต เดžเด™เตเด™เตพ เดšเตเดฐเตเด•เตเด•เดฎเดพเดฏเดฟ เดตเดฟเดถเดฆเต€เด•เดฐเดฟเดšเตเดšเต. เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด‡เดคเต เดŽเด™เตเด™เดจเต† เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเดฎเต†เดจเตเดจเตเด‚ เดžเด™เตเด™เตพ เด•เดพเดฃเดฟเดšเตเดšเตเดคเดจเตเดจเต.

เด†เตผเด—เต‹ เดฑเต‹เตพเด”เดŸเตเดŸเตเด•เตพ

เด’เดฐเต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เดจเต‡เดฑเตเดฑเต€เดตเต เดกเดฟเดชเตเดฒเต‹เดฏเตโ€Œเดฎเต†เดจเตเดฑเต เด•เตบเดŸเตเดฐเต‹เดณเดฑเดพเดฃเต เด†เตผเด—เต‹ เดฑเต‹เตพเด”เดŸเตเดŸเตเดธเต. เด‡เดคเต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเตเด•เตพเด•เตเด•เต เด’เดฐเต CRD (เด•เดธเตเดฑเตเดฑเด‚ เดฑเดฟเดธเต‹เดดเตเดธเต เดกเต†เดซเดจเดฟเดทเตป) เดจเตฝเด•เตเดจเตเดจเต. เด‡เดคเดฟเดจเต เดจเดจเตเดฆเดฟ, เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดชเตเดคเดฟเดฏ เดŽเดจเตเดฑเดฟเดฑเตเดฑเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚: Rollout, เดตเดฟเดตเดฟเดง เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด“เดชเตเดทเดจเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเต€เดฒ-เดชเดšเตเดš, เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด™เตเด™เตพ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เด’เดฐเต เด‡เดทเตโ€ŒเดŸเดพเดจเตเดธเตƒเดค เด‰เดฑเดตเดฟเดŸเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ Argo Rollouts เด•เตบเดŸเตเดฐเต‹เดณเตผ Rollout, เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเดฟเดจเดพเดฏเดฟ เดฌเตเดฒเต‚-เด—เตเดฐเต€เตป, เด•เดพเดจเดฑเดฟ เดคเตเดŸเด™เตเด™เดฟเดฏ เด…เดงเดฟเด• เดตเดฟเดจเตเดฏเดพเดธ เดคเดจเตเดคเตเดฐเด™เตเด™เตพ เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เดตเดฟเดญเดตเด‚ Rollout เดคเตเดฒเตเดฏเดฎเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดค เดจเตฝเด•เตเดจเตเดจเต Deployment, เด…เดงเดฟเด• เดตเดฟเดจเตเดฏเดพเดธ เดคเดจเตเดคเตเดฐเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฎเดพเดคเตเดฐเด‚.
เดตเดฟเดญเดตเด‚ Deployments เดตเดฟเดจเตเดฏเดพเดธเดคเตเดคเดฟเดจเต เดฐเดฃเตเดŸเต เดคเดจเตเดคเตเดฐเด™เตเด™เดณเตเดฃเตเดŸเต: RollingUpdate ะธ Recreate. เดˆ เดคเดจเตเดคเตเดฐเด™เตเด™เตพ เดฎเดฟเด•เตเด• เด•เต‡เดธเตเด•เดณเดฟเดฒเตเด‚ เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฃเต†เด™เตเด•เดฟเดฒเตเด‚, เดธเต†เตผเดตเดฑเตเด•เดณเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดตเดฟเดจเตเดฏเดพเดธเด‚ เดตเดฒเดฟเดฏ เดคเต‹เดคเดฟเตฝ เดตเดฟเดจเดฟเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดฌเตเดฒเต‚-เด—เตเดฐเต€เตป เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด•เดพเดจเดฑเดฟ เดชเต‹เดฒเตเดณเตเดณ เด…เดงเดฟเด• เดคเดจเตเดคเตเดฐเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด…เดต เดตเดฟเดจเตเดฏเดพเดธ เด•เตบเดŸเตเดฐเต‹เดณเดฑเดฟเตฝ เดฒเดญเตเดฏเดฎเดฒเตเดฒ. เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเตฝ เดˆ เดคเดจเตเดคเตเดฐเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพ เด…เดตเดฐเตเดŸเต† เดตเดฟเดจเตเดฏเดพเดธเด™เตเด™เตพเด•เตเด•เต เดฎเตเด•เดณเดฟเตฝ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ เดŽเดดเตเดคเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. Argo Rollouts เด•เตบเดŸเตเดฐเต‹เดณเตผ เดˆ เดคเดจเตเดคเตเดฐเด™เตเด™เดณเต† เดฒเดณเดฟเดคเดตเตเด‚ เดกเดฟเด•เตเดฒเดฑเต‡เดฑเตเดฑเต€เดตเต, เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจเดคเตเดฎเดพเดฏ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเดพเดฏเดฟ เดคเตเดฑเดจเตเดจเตเด•เดพเดŸเตเดŸเตเดจเตเดจเต.
https://argoproj.github.io/argo-rollouts

เดฑเต‹เตพเด”เดŸเตเดŸเตเด•เตพเด•เตเด•เตŠเดชเตเดชเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏ เด’เดฐเต เดตเต†เดฌเต เด‡เดจเตเดฑเตผเดซเต‡เดธเต เดจเตฝเด•เตเดจเตเดจ เด†เตผเด—เต‹ เดธเดฟเดเดฏเตเด‚ เด‰เดฃเตเดŸเต, เด…เดŸเตเดคเตเดค เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เดžเด™เตเด™เตพ เด…เดคเต เดจเต‹เด•เตเด•เดพเด‚.

Argo Rollouts เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เดธเต†เตผเดตเตผ เดตเดถเด‚

kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml

เดžเด™เตเด™เดณเตเดŸเต† เด‡เตปเดซเตเดฐเดพเดธเตเดŸเตเดฐเด•เตเดšเตผ เดŸเต‡เดฃเดฟเดชเตเดชเดฟเตฝ (เดšเตเดตเดŸเต† เด•เดพเดฃเตเด•) i/k8s/argo-rollouts/install.yaml เด†เดฏเดฟ install.yaml เดžเด™เตเด™เตพ เด‡เดคเดฟเดจเด•เด‚ เดšเต‡เตผเดคเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต. เดˆ เดฐเต€เดคเดฟเดฏเดฟเตฝ GitlabCI เด‡เดคเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด‚.

เด•เตเดฒเดฏเดจเตเดฑเต เดธเตˆเดกเต (kubectl เดชเตเดฒเด—เดฟเตป)

https://argoproj.github.io/argo-rollouts/features/kubectl-plugin

เด‰เดฆเดพเดนเดฐเดฃ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป

เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เด•เต‹เดกเดฟเดจเตเด‚ เด‡เตปเดซเตเดฐเดพเดธเตเดŸเตเดฐเด•เตเดšเดฑเดฟเดจเตเด‚ เดตเต†เดตเตเดตเต‡เดฑเต† เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเด•เตพ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดจเดฒเตเดฒ เดฐเต€เดคเดฟเดฏเดพเดฃเต.

เด…เดชเต‡เด•เตเดทเดฏเตเด•เตเด•เตเดณเตเดณ เดถเต‡เด–เดฐเด‚

Kim Wuestkamp/k8s-deployment-example-app

เด‡เดคเต JSON เด†เดฏเดฟ เด’เดฐเต เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚ เดจเตฝเด•เตเดจเตเดจ เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเดฏ เด’เดฐเต Python+Flask API เด†เดฃเต. เดžเด™เตเด™เตพ GitlabCI เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเดพเด•เตเด•เต‡เดœเต เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดซเดฒเด‚ Gitlab เดฐเดœเดฟเดธเตเดŸเตเดฐเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เดคเดณเตเดณเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚. เดฐเดœเดฟเดธเตเดŸเตเดฐเดฟเดฏเดฟเตฝ เดžเด™เตเด™เตพเด•เตเด•เต เดฐเดฃเตเดŸเต เดตเตเดฏเดคเตเดฏเดธเตเดค เดชเดคเดฟเดชเตเดชเตเด•เตพ เด‰เดฃเตเดŸเต:

  • wuestkamp/k8s-deployment-example-app:v1
  • wuestkamp/k8s-deployment-example-app:v2

เด…เดต เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เด’เดฐเต‡เดฏเตŠเดฐเต เดตเตเดฏเดคเตเดฏเดพเดธเด‚ JSON เดซเดฏเตฝ เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เดฟ เดŽเดจเตเดจเดคเดพเดฃเต. เดเดคเต เดชเดคเดฟเดชเตเดชเตเดฎเดพเดฏเดพเดฃเต เดžเด™เตเด™เตพ เด†เดถเดฏเดตเดฟเดจเดฟเดฎเดฏเด‚ เดจเดŸเดคเตเดคเตเดจเตเดจเดคเต†เดจเตเดจเต เด•เดดเดฟเดฏเตเดจเตเดจเดคเตเดฐ เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดฆเตƒเดถเตเดฏเดตเตฝเด•เตเด•เดฐเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เดˆ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต.

เด‡เตปเดซเตเดฐเดพเดธเตเดŸเตเดฐเด•เตเดšเตผ เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟ

เดˆ เดถเต‡เด–เดฐเดคเตเดคเดฟเตฝ เดžเด™เตเด™เตพ เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต‡เด•เตเด•เต เดตเดฟเดจเตเดฏเดพเดธเดคเตเดคเดฟเดจเดพเดฏเดฟ GitlabCI เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚, .gitlab-ci.yml เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต:

image: traherom/kustomize-dockerbefore_script:
   - printenv
   - kubectl versionstages:
 - deploydeploy test:
   stage: deploy
   before_script:
     - echo $KUBECONFIG
   script:
     - kubectl get all
     - kubectl apply -f i/k8s    only:
     - master

เด‡เดคเต เดธเตเดตเดฏเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เด•เตเดฒเดธเตเดฑเตเดฑเตผ เด†เดตเดถเตเดฏเดฎเดพเดฃเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต Gcloud เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚:

gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b
gcloud compute firewall-rules create incoming-80 --allow tcp:80

เดจเดฟเด™เตเด™เตพ เดซเต‹เตผเด•เตเด•เต เดšเต†เดฏเตเดฏเดฃเด‚ https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure เด•เต‚เดŸเดพเดคเต† เด’เดฐเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เด‰เดฃเตเดŸเดพเด•เตเด•เตเด• KUBECONFIG GitlabCI-เตฝ, เด†เด•เตโ€Œเดธเดธเดฟเดจเดพเดฏเตเดณเตเดณ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ kubectl เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต.

เด‡เดคเต เด’เดฐเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดจเดพเดฏเดฟ (Gcloud) เด•เตเดฐเต†เดกเตปเดทเตเดฏเดฒเตเด•เตพ เดŽเด™เตเด™เดจเต† เดจเต‡เดŸเดพเด‚ เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเดพเดฏเดฟเด•เตเด•เดพเด‚.

เด‡เตปเดซเตเดฐเดพเดธเตเดŸเตเดฐเด•เตเดšเตผ Yaml

เด‡เตปเดซเตเดฐเดพเดธเตเดŸเตเดฐเด•เตเดšเตผ เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเด•เตเด•เตเดณเตเดณเดฟเตฝ เดžเด™เตเด™เตพเด•เตเด•เต เดธเต‡เดตเดจเดฎเตเดฃเตเดŸเต:

apiVersion: v1
kind: Service
metadata:
 labels:
   id: rollout-canary
 name: app
spec:
 ports:
 - port: 80
   protocol: TCP
   targetPort: 5000
 selector:
   id: app
 type: LoadBalancer

เด’เดชเตเดชเด‚ rollout.yaml:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
 name: rollout-canary
spec:
 replicas: 10
 revisionHistoryLimit: 2
 selector:
   matchLabels:
     id: rollout-canary
 template:
   metadata:
     labels:
       id: rollout-canary
   spec:
     containers:
     - name: rollouts-demo
       image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
       imagePullPolicy: Always
 strategy:
   canary:
     steps:
     - setWeight: 10
     # Rollouts can be manually resumed by running `kubectl argo rollouts promote ROLLOUT`
     - pause: {}
     - setWeight: 50
     - pause: { duration: 120 } # two minutes

Rollout เดตเดฟเดจเตเดฏเดพเดธเด‚ เดชเต‹เดฒเต† เดคเดจเตเดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต. เดžเด™เตเด™เตพ เด’เดฐเต เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดธเตเดŸเตเดฐเดพเดฑเตเดฑเดœเดฟ เดธเดœเตเดœเต€เด•เดฐเดฟเดšเตเดšเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ (เด‡เดตเดฟเดŸเต† เด•เดพเดจเดฑเดฟ เดชเต‹เดฒเต†) เด…เดคเต เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดฑเต‹เดณเดฟเด‚เด—เต-เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดตเดฟเดจเตเดฏเดพเดธเด‚ เดชเต‹เดฒเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเด‚.

เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเดคเตเดคเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพ yaml-เตฝ เดฐเดฃเตเดŸเต เด˜เดŸเตเดŸเด™เตเด™เตพ เดจเดฟเตผเดตเตเดตเดšเดฟเด•เตเด•เตเดจเตเดจเต:

  1. เด•เดพเดจเดฑเดฟเดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดŸเตเดฐเดพเดซเดฟเด•เตเด•เดฟเดจเตเดฑเต† 10% (เดฎเดพเดจเตเดตเตฝ เดถเดฐเดฟเด•เตเด•เดพเดฏเดฟ เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเด•)
  2. เด•เดพเดจเดฑเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต 50% เดŸเตเดฐเดพเดซเดฟเด•เต (2 เดฎเดฟเดจเดฟเดฑเตเดฑเต เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเด•, เดคเตเดŸเตผเดจเตเดจเต 100% เด†เดฏเดฟ เดคเตเดŸเดฐเตเด•)

เดชเตเดฐเดพเดฐเด‚เดญ เดตเดฟเดจเตเดฏเดพเดธเด‚ เดจเดŸเดคเตเดคเตเดจเตเดจเต

เดชเตเดฐเดพเดฐเด‚เดญ เดตเดฟเดจเตเดฏเดพเดธเดคเตเดคเดฟเดจเต เดถเต‡เดทเด‚, เดžเด™เตเด™เดณเตเดŸเต† เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเด‚:

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #2: เด†เตผเด—เต‹ เดฑเต‹เตพเด”เดŸเตเดŸเตเด•เตพ

เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เด†เดฆเตเดฏ เดชเดคเดฟเดชเตเดชเดฟเตฝ เดจเดฟเดจเตเดจเต เดฎเดพเดคเตเดฐเดฎเต‡ เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚ เดฒเดญเดฟเด•เตเด•เต‚:

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #2: เด†เตผเด—เต‹ เดฑเต‹เตพเด”เดŸเตเดŸเตเด•เตพ

เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ เดจเดŸเดคเตเดคเตเดจเตเดจเต

เด˜เดŸเตเดŸเด‚ 1: 10% เดŸเตเดฐเดพเดซเดฟเด•เต

เด’เดฐเต เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เตพ เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เดตเดฟเดจเตเดฏเดพเดธเด™เตเด™เดณเดฟเตฝ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเตเดชเต‹เดฒเต† เด‡เดฎเต‡เดœเต เดชเดคเดฟเดชเตเดชเต เดฎเดพเดฑเตเดฑเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
 name: rollout-canary
spec:
...
 template:
   metadata:
     labels:
       id: rollout-canary
   spec:
     containers:
     - name: rollouts-demo
       image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
...

เดžเด™เตเด™เตพ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดตเดฐเตเดคเตเดคเตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ Gitlab CI เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเดจเตเดจเต, เดžเด™เตเด™เตพ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เด•เดพเดฃเตเดจเตเดจเต:

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #2: เด†เตผเด—เต‹ เดฑเต‹เตพเด”เดŸเตเดŸเตเด•เตพ

เด‡เดชเตเดชเต‹เตพ เดžเด™เตเด™เตพ เดธเต‡เดตเดจเด‚ เด†เด•เตเดธเดธเต เดšเต†เดฏเตเดฏเตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ:

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #2: เด†เตผเด—เต‹ เดฑเต‹เตพเด”เดŸเตเดŸเตเด•เตพ

เด•เตŠเดณเตเดณเดพเด‚! เดžเด™เตเด™เดณเตเดŸเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเดคเตเดคเดฟเดจเตเดฑเต† เดฎเดงเตเดฏเดคเตเดคเดฟเดฒเดพเดฃเต เดžเด™เตเด™เตพ. เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต† เดจเดฎเตเด•เตเด•เต เดชเตเดฐเต‹เด—เดคเดฟ เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚:

kubectl argo rollouts get rollout rollout-canary

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #2: เด†เตผเด—เต‹ เดฑเต‹เตพเด”เดŸเตเดŸเตเด•เตพ

เด˜เดŸเตเดŸเด‚ 2: 50% เดŸเตเดฐเดพเดซเดฟเด•เต:

เด‡เดจเดฟ เดจเดฎเตเด•เตเด•เต เด…เดŸเตเดคเตเดค เด˜เดŸเตเดŸเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เดพเด‚: เดŸเตเดฐเดพเดซเดฟเด•เตเด•เดฟเดจเตเดฑเต† 50% เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดธเตเดตเดฎเต‡เดงเดฏเดพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดžเด™เตเด™เตพ เดˆ เด˜เดŸเตเดŸเด‚ เด•เตเดฐเดฎเต€เด•เดฐเดฟเดšเตเดšเต:

kubectl argo rollouts promote rollout-canary # continue to step 2

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #2: เด†เตผเด—เต‹ เดฑเต‹เตพเด”เดŸเตเดŸเตเด•เตพ

เดžเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ 50% เดชเตเดฐเดคเดฟเด•เดฐเดฃเด™เตเด™เดณเตเด‚ เดจเตฝเด•เดฟ:

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #2: เด†เตผเด—เต‹ เดฑเต‹เตพเด”เดŸเตเดŸเตเด•เตพ

เด’เดชเตเดชเด‚ เดฑเต‹เตพเด”เดŸเตเดŸเต เด…เดตเดฒเต‹เด•เดจเด‚:

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #2: เด†เตผเด—เต‹ เดฑเต‹เตพเด”เดŸเตเดŸเตเด•เตพ

เดชเตเดฐเต†เด•เตเดฐเดพเดธเตเดจเต‹.

เด˜เดŸเตเดŸเด‚ 3: 100% เดŸเตเดฐเดพเดซเดฟเด•เต:

เดžเด™เตเด™เตพ เด‡เดคเต เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตโ€Œเดคเดคเดฟเดจเดพเตฝ 2 เดฎเดฟเดจเดฟเดฑเตเดฑเดฟเดจเตเดถเต‡เดทเด‚ 50% เด˜เดŸเตเดŸเด‚ เดธเตเดตเดฏเดฎเต‡เดต เด…เดตเดธเดพเดจเดฟเด•เตเด•เตเด•เดฏเตเด‚ 100% เด˜เดŸเตเดŸเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚:

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #2: เด†เตผเด—เต‹ เดฑเต‹เตพเด”เดŸเตเดŸเตเด•เตพ

เด•เต‚เดŸเดพเดคเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต:

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #2: เด†เตผเด—เต‹ เดฑเต‹เตพเด”เดŸเตเดŸเตเด•เตพ

เด’เดชเตเดชเด‚ เดฑเต‹เตพเด”เดŸเตเดŸเต เด…เดตเดฒเต‹เด•เดจเด‚:

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ #2: เด†เตผเด—เต‹ เดฑเต‹เตพเด”เดŸเตเดŸเตเด•เตพ

เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเดฏเดฟ.

Argo Rollouts เด‰เดณเตเดณ เด•เต‚เดŸเตเดคเตฝ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ

เด•เดพเดจเดฑเดฟเดฏเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดชเตเดฐเดฟเดตเตเดฏเต‚เด•เดณเตเด‚ เดคเดพเดฐเดคเดฎเตเดฏเด™เตเด™เดณเตเด‚ เดŽเด™เตเด™เดจเต† เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เดพเด‚ เดŽเดจเตเดจเดคเตเดชเต‹เดฒเตเดณเตเดณ เด•เต‚เดŸเตเดคเตฝ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เด‡เดตเดฟเดŸเต†เดฏเตเดฃเตเดŸเต:

https://github.com/argoproj/argo-rollouts/tree/master/examples

Argo Rollouts, Argo CI เดŽเดจเตเดจเดฟเดตเดฏเต† เด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเต€เดกเดฟเดฏเต‹

เดžเดพเตป เดˆ เดตเต€เดกเดฟเดฏเต‹ เดถเดฐเดฟเด•เตเด•เตเด‚ เดถเตเดชเดพเตผเดถเดšเต†เดฏเตเดฏเตเดจเตเดจเต, Argo Rollouts เด‰เด‚ Argo CI เด‰เด‚ เดŽเด™เตเด™เดจเต† เด’เดฐเตเดฎเดฟเดšเตเดšเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเต เด‡เดคเต เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเต:

เดซเดฒเด‚

เด…เดงเดฟเด• เดคเดฐเด‚ เดตเดฟเดจเตเดฏเดพเดธเด™เตเด™เตพ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดชเด•เตผเดชเตเดชเตเด•เตพ, เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเต เดŸเตเดฐเดพเดซเดฟเด•เต เดฎเตเดคเดฒเดพเดฏเดต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เตเดจเตเดจ เดธเดฟเด†เตผเดกเดฟเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เด†เดถเดฏเด‚ เดžเดพเตป เดถเดฐเดฟเด•เตเด•เตเด‚ เด‡เดทเตเดŸเดชเตเดชเต†เดŸเตเดจเตเดจเต. เด…เดตเดฐเต‹เดŸเตŠเดชเตเดชเด‚ เดœเต‹เดฒเดฟ เดธเตเด—เดฎเดฎเดพเดฏเดฟ เดจเดŸเด•เตเด•เตเดจเตเดจเต. เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ เดžเดพเตป Argo CI-เดฏเตเดฎเดพเดฏเตเดณเตเดณ เดธเด‚เดฏเต‹เดœเดจเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต.

เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, Argo CI, Flux CI เดŽเดจเตเดจเดฟเดตเดฏเตเดŸเต† เด’เดฐเต เดตเดฒเดฟเดฏ เดฒเดฏเดจเด‚ เดตเดฐเตเดจเตเดจเดคเดพเดฏเดฟ เดคเต‹เดจเตเดจเตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เดชเตเดคเดฟเดฏ เดฑเดฟเดฒเต€เดธเต เดตเดฐเตเดจเตเดจเดคเตเดตเดฐเต† เดžเดพเตป เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เดพเด‚: เด†เตผเด—เต‹ เดซเตเดฒเด•เตเดธเต.

Argo Rollouts เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ Argo CI เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เด…เดจเตเดญเดตเด‚ เด‰เดฃเตเดŸเต‹?

เดžเด™เตเด™เดณเตเดŸเต† เดฌเตเดฒเต‹เด—เดฟเดฒเต† เดฎเดฑเตเดฑเต เดฒเต‡เด–เดจเด™เตเด™เดณเตเด‚ เดตเดพเดฏเดฟเด•เตเด•เตเด•:

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•