ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #2: Argo Rollouts

ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ ื“ื™ ืง8ืก-ื’ืขื‘ื•ื™ืจืŸ Argo Rollouts ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืงืึธื ื˜ืจืึธืœืœืขืจ ืื•ืŸ GitlabCI ืฆื• ืœื•ื™ืคืŸ ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ ืฆื• Kubernetes

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #2: Argo Rollouts

https://unsplash.com/photos/V41PulGL1z0

ืึทืจื˜ื™ืงืœืขืŸ ืื™ืŸ ื“ืขื ืกืขืจื™ืข

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

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

ืึทืจื’ืึธ ืจืึธืœืœืึธื•ืฅ

Argo Rollouts ืื™ื– ืึท ืงื•ื‘ืขืจื ืขื˜ืขืก ื’ืขื‘ื•ื™ืจืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืงืึธื ื˜ืจืึธืœืœืขืจ. ืขืก ื’ื™ื˜ ืึท CRD (Custom Resource Definition) ืคึฟืึทืจ Kubernetes. ื“ืึทื ืง ืฆื• ืขืก, ืžื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ืึท ื ื™ื™ึทืข ืขื ื˜ื™ื˜ื™: Rollout, ื•ื•ืึธืก ืžืึทื ื™ื“ื–ืฉื™ื– ื‘ืœื•ื™-ื’ืจื™ืŸ ืื•ืŸ ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ ืžื™ื˜ ืคืึทืจืฉื™ื“ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืึธืคึผืฆื™ืขืก.

Argo Rollouts ืงืึธื ื˜ืจืึธืœืœืขืจ ื’ืขื ื™ืฆื˜ ื“ื•ืจืš ืึท ืžื ื”ื’ ืžื™ื˜ืœ Rollout, ืึทืœืึทื•ื– ืคึฟืึทืจ ื ืึธืš ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืกื˜ืจืึทื˜ืขื’ื™ืขืก ืึทื–ืึท ื•ื•ื™ ื‘ืœื•ื™-ื’ืจื™ืŸ ืื•ืŸ ืงืึทื ืึทืจื™ ืคึฟืึทืจ Kubernetes. ืžื™ื˜ืœ Rollout ื’ื™ื˜ ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™ ืขืงื•ื•ื™ื•ื•ืึทืœืขื ื˜ Deployment, ื‘ืœื•ื™ื– ืžื™ื˜ ื ืึธืš ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืกื˜ืจืึทื˜ืขื’ื™ืขืก.
ืžื™ื˜ืœ Deployments ื”ืื˜ ืฆื•ื•ื™ื™ ืกื˜ืจืึทื˜ืขื’ื™ืขืก ืคึฟืึทืจ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜: RollingUpdate ะธ Recreate. ื›ืึธื˜ืฉ ื“ื™ ืกื˜ืจืึทื˜ืขื’ื™ืขืก ื–ืขื ืขืŸ ืคึผืึทืกื™ืง ืคึฟืึทืจ ืจื•ื‘ึฟ ืงืึทืกืขืก, ืคึฟืึทืจ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืฆื• ืกืขืจื•ื•ืขืจืก ืื•ื™ืฃ ืึท ื–ื™ื™ืขืจ ื’ืจื•ื™ืก ื•ื•ืึธื’, ื ืึธืš ืกื˜ืจืึทื˜ืขื’ื™ืขืก ื–ืขื ืขืŸ ื’ืขื ื™ืฆื˜, ืึทื–ืึท ื•ื•ื™ ื‘ืœื•ื™-ื’ืจื™ืŸ ืึธื“ืขืจ ืงืึทื ืึทืจื™, ื•ื•ืึธืก ื–ืขื ืขืŸ ื ื™ืฉื˜ ื‘ื ื™ืžืฆื ืื™ืŸ ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืงืึธื ื˜ืจืึธืœืœืขืจ. ืฆื• ื ื•ืฆืŸ ื“ื™ ืกื˜ืจืึทื˜ืขื’ื™ืขืก ืื™ืŸ Kubernetes, ื™ื•ื–ืขืจื– ื”ืึธื‘ืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืกืงืจื™ืคึผืก ืื•ื™ืฃ ืฉืคึผื™ืฅ ืคื•ืŸ ื–ื™ื™ืขืจ ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ. ื“ื™ Argo Rollouts ืงืึธื ื˜ืจืึธืœืœืขืจ ื™ืงืกืคึผืึธื•ื–ื™ื– ื“ื™ ืกื˜ืจืึทื˜ืขื’ื™ืขืก ื•ื•ื™ ืคึผืฉื•ื˜, ื“ืขืงืœืึทืจืึทื˜ื™ื•ื•ืข, ืงืึทื ืคื™ื’ื™ืขืจืึทื‘ืึทืœ ืคึผืึทืจืึทืžืขื˜ืขืจืก.
https://argoproj.github.io/argo-rollouts

ืขืก ืื™ื– ืื•ื™ืš Argo CI ื•ื•ืึธืก ื’ื™ื˜ ืึท ื‘ืึทื ื™ืฆืขืจ-ืคืจื™ื™ึทื ื“ืœืขืš ื•ื•ืขื‘ ืฆื•ื‘ื™ื ื“ ืคึฟืึทืจ ื ื•ืฆืŸ ืžื™ื˜ ืจืึธืœืœืึธื•ืฅ, ืžื™ืจ ื•ื•ืขืœืŸ ื ืขืžืขืŸ ืึท ืงื•ืง ืื™ืŸ ื“ืขื ื•ื•ื™ื™ึทื˜ืขืจ ืึทืจื˜ื™ืงืœ.

ื™ื ืกื˜ืึธืœื™ื ื’ Argo Rollouts

ืกืขืจื•ื•ื™ืจืขืจ ื–ื™ื™ึทื˜

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

ืื™ืŸ ืื•ื ื“ื–ืขืจ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ื‘ืจื•ืงื•ื•ืข (ื–ืขืŸ ื•ื•ื™ื™ื˜ืขืจ) ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ืฆื•ื’ืขืœื™ื™ื’ื˜ install.yaml ื•ื•ื™ i/k8s/argo-rollouts/install.yaml. ื“ืขื ื•ื•ืขื’ GitlabCI ื•ื•ืขื˜ ื™ื ืกื˜ืึทืœื™ืจืŸ ืขืก ืื™ืŸ ื“ืขื ืงื ื•ื™ืœ.

ืงืœื™ืขื ื˜ ื–ื™ื™ึทื˜ (ืงื•ื‘ืขืงื˜ืœ ืคึผืœื•ื’ื™ืŸ)

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

ื‘ื™ื™ึทืฉืคึผื™ืœ ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธืŸ

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

ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืคึฟืึทืจ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ

Kim Wuestkamp/k8s-deployment-example-app

ื“ืึธืก ืื™ื– ืึท ื–ื™ื™ืขืจ ืคึผืฉื•ื˜ Python + Flask API ื•ื•ืึธืก ืงืขืจื˜ ืึท ืขื ื˜ืคืขืจ ื•ื•ื™ JSON. ืžื™ืจ ื•ื•ืขืœืŸ ื‘ื•ื™ืขืŸ ื“ืขื ืคึผืขืงืœ ื ื™ืฆืŸ GitlabCI ืื•ืŸ ืฉื˜ื•ืคึผืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ ืฆื• ื“ื™ Gitlab ืจืขื’ื™ืกื˜ืจื™. ืื™ืŸ ื“ื™ ืจืขื’ื™ืกื˜ืจื™ ืžื™ืจ ื”ืึธื‘ืŸ ืฆื•ื•ื™ื™ ืคืึทืจืฉื™ื“ืขื ืข ืžืขืœื“ื•ื ื’ ื•ื•ืขืจืกื™ืขืก:

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

ื“ืขืจ ื‘ืœื•ื™ื– ื—ื™ืœื•ืง ืฆื•ื•ื™ืฉืŸ ื–ื™ื™ ืื™ื– ื“ื™ JSON ื˜ืขืงืข ืื•ืžื’ืขืงืขืจื˜. ืžื™ืจ ื ื•ืฆืŸ ื“ืขื ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื• ื•ื•ื™ื–ืฉื•ื•ืึทืœื™ื™ื– ื•ื•ื™ ืœื™ื™ื›ื˜ ื•ื•ื™ ืžืขื’ืœืขืš ืžื™ื˜ ื•ื•ืึธืก ื•ื•ืขืจืกื™ืข ืžื™ืจ ื™ื‘ืขืจื’ืขื‘ืŸ.

ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™

ืื™ืŸ ื“ืขื ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ GitlabCI ืคึฟืึทืจ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืฆื• Kubernetes, .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).

ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ื™ืžืœ

ื™ืŸ ื“ื™ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืžื™ืจ ื”ืึธื‘ืŸ ืกืขืจื•ื•ื™ืก:

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 ืึทืจื‘ืขื˜ ื“ื™ ื–ืขืœื‘ืข ื•ื•ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜. ืื•ื™ื‘ ืžื™ืจ ื˜ืึธืŸ ื ื™ื˜ ืฉื˜ืขืœืŸ ืึท ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ืกื˜ืจืึทื˜ืขื’ื™ืข (ื•ื•ื™ ืงืึทื ืึทืจื™ ื“ืึธ), ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื‘ื™ื›ื™ื™ื•ื•ื– ื•ื•ื™ ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ืจืึธื•ืœื™ื ื’-ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜.

ืžื™ืจ ื“ืขืคื™ื ื™ืจืŸ ืฆื•ื•ื™ื™ ืกื˜ืขืคึผืก ืื™ืŸ ื™ืึทืžืœ ืคึฟืึทืจ ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜:

  1. 10% ืคื•ืŸ ืคืึทืจืงืขืจ ืฆื• ืงืึทื ืึทืจื™ (ื•ื•ืึทืจื˜ืŸ ืคึฟืึทืจ ืžืึทื ื•ืึทืœ ื’ื•ื˜)
  2. 50% ืคืึทืจืงืขืจ ืฆื• ืงืึทื ืึทืจื™ (ื•ื•ืึทืจื˜ืŸ 2 ืžื™ื ื•ื˜ ืื•ืŸ ืคืึธืจื–ืขืฆืŸ ืฆื• 100%)

ืคึผืขืจืคืึธืจืžื™ื ื’ ืขืจืฉื˜ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜

ื ืึธืš ื“ืขืจ ืขืจืฉื˜ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜, ืื•ื ื“ื–ืขืจ ืจืขืกื•ืจืกืŸ ื•ื•ืขื˜ ืงื•ืงืŸ ื•ื•ื™ ื“ืึธืก:

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #2: Argo Rollouts

ืื•ืŸ ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ืึทืŸ ืขื ื˜ืคืขืจ ื‘ืœื•ื™ื– ืคึฟื•ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ:

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #2: Argo Rollouts

ืคึผืขืจืคืึธืจืžื™ื ื’ ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜

ืฉืจื™ื˜ 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 ื“ื™ืคึผืœื•ื™ื“ ืื•ืŸ ืžื™ืจ ื–ืขืŸ ื“ื™ ืขื ื“ืขืจื•ื ื’ืขืŸ:

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #2: Argo Rollouts

ืื™ืฆื˜ ืื•ื™ื‘ ืžื™ืจ ืึทืงืกืขืก ื“ื™ ืกืขืจื•ื•ื™ืก:

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #2: Argo Rollouts

ื’ืจื•ื™ืก! ืžื™ืจ ื–ืขื ืขืŸ ืื™ืŸ ื“ื™ ืžื™ื˜ืŸ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜. ืžื™ืจ ืงืขื ืขืŸ ื–ืขืŸ ื“ื™ ืคึผืจืึธื’ืจืขืก ื“ื•ืจืš ืœื•ื™ืคืŸ:

kubectl argo rollouts get rollout rollout-canary

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #2: Argo Rollouts

ืฉืจื™ื˜ 2: 50% ืคืึทืจืงืขืจ:

ืื™ืฆื˜ ืœืึธื–ืŸ ืื•ื ื“ื– ื’ื™ื™ืŸ ืฆื• ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืฉืจื™ื˜: ืจื™ื“ืขืจืขืงื˜ื™ื ื’ 50% ืคื•ืŸ ื“ื™ ืคืึทืจืงืขืจ. ืžื™ืจ ืงืึทื ืคื™ื’ื™ืขืจื“ ื“ืขื ืฉืจื™ื˜ ืฆื• ื–ื™ื™ืŸ ืœื•ื™ืคืŸ ืžืึทื ื™ื•ืึทืœื™:

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

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #2: Argo Rollouts

ืื•ืŸ ืื•ื ื“ื–ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื•ืžื’ืขืงืขืจื˜ 50% ืคื•ืŸ ื“ื™ ืจืขืกืคึผืึธื ืกืขืก ืคื•ืŸ ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืขืก:

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #2: Argo Rollouts

ืื•ืŸ ืจื™ื–ืึทืœื˜ื™ื ื’ ืจืขืฆืขื ื–ื™ืข:

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #2: Argo Rollouts

ื•ื•ื•ื ื“ืขืจืœืขืš.

ืฉืจื™ื˜ 3: 100% ืคืึทืจืงืขืจ:

ืžื™ืจ ืฉื˜ืขืœืŸ ืขืก ืึทื–ื•ื™ ืึทื– ื ืึธืš 2 ืžื™ื ื•ื˜ ื“ื™ 50% ืฉืจื™ื˜ ืขื ื“ืก ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืื•ืŸ ื“ื™ 100% ืฉืจื™ื˜ ืกื˜ืึทืจืฅ:

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #2: Argo Rollouts

ืื•ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืจืขื–ื•ืœื˜ืึทื˜:

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #2: Argo Rollouts

ืื•ืŸ ืจื™ื–ืึทืœื˜ื™ื ื’ ืจืขืฆืขื ื–ื™ืข:

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #2: Argo Rollouts

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ื– ื’ืึทื ืฅ.

ืžืขืจ ื‘ื™ื™ืฉืคื™ืœืŸ ืžื™ื˜ Argo Rollouts

ืขืก ื–ืขื ืขืŸ ืžืขืจ ื‘ื™ื™ืฉืคื™ืœืŸ ื“ืึธ, ืึทื–ืึท ื•ื•ื™ ื•ื•ื™ ืฆื• ืฉื˜ืขืœืŸ ืึทืจื•ื™ืฃ ืกื•ื•ื™ื•ื•ืข ืคึผืจื™ื•ื•ื™ื•ื– ืื•ืŸ ืงืึทืžืคึผืขืจืึทืกืึทื ื– ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ืงืึทื ืึทืจื™:

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

ื•ื•ื™ื“ืขื ื•ื•ืขื’ืŸ Argo Rollouts ืื•ืŸ Argo CI

ืื™ืš ื˜ืึทืงืข ืจืขืงืึธืžืขื ื“ื™ืจืŸ ื“ืขื ื•ื•ื™ื“ืขื, ืขืก ื•ื•ื™ื™ื–ื˜ ื•ื•ื™ Argo Rollouts ืื•ืŸ Argo CI ืึทืจื‘ืขื˜ ืฆื•ื–ืึทืžืขืŸ:

ื’ืึทื ืฅ

ืื™ืš ื˜ืึทืงืข ื•ื•ื™ ื“ืขืจ ื’ืขื“ืึทื ืง ืคื•ืŸ ื ื™ืฆืŸ CRDs ื•ื•ืึธืก ืคื™ืจืŸ ื“ื™ ืฉืึทืคื•ื ื’ ืคื•ืŸ ื ืึธืš ื˜ื™ื™ืคึผืก ืคื•ืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ ืึธื“ืขืจ ืจืขืคึผืœืึทืงืึทื–, ืจื™ื“ืขืจืขืงื˜ ืคืึทืจืงืขืจ, ืขื˜ืง. ืืจื‘ืขื˜ืŸ ืžื™ื˜ ื–ื™ื™ ื’ื™ื™ื˜ ืกืžื•ื“ืœื™. ื•ื•ื™ื™ึทื˜ืขืจ ืื™ืš ื•ื•ืึธืœื˜ ื•ื•ื™ ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ื“ื™ ื™ื ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Argo CI.

ืึธื‘ืขืจ, ืขืก ืกื™ืžื– ืฆื• ื–ื™ื™ืŸ ืึท ื’ืจื•ื™ืก ืžืขืจื“ื–ืฉืขืจ ืคื•ืŸ Argo CI ืื•ืŸ Flux CI, ืึทื–ื•ื™ ืื™ืš ืงืขืŸ ื•ื•ืึทืจื˜ืŸ ื‘ื™ื– ื“ื™ ื ื™ื™ึทืข ืžืขืœื“ื•ื ื’ ืงื•ืžื˜ ืื•ื™ืก: Argo Flux.

ื”ืึธื‘ืŸ ืื™ืจ ื“ืขืจืคืึทืจื•ื ื’ ืžื™ื˜ Argo Rollouts ืึธื“ืขืจ Argo CI?

ืœื™ื™ืขื ืขืŸ ืื•ื™ืš ืื ื“ืขืจืข ืึทืจื˜ื™ืงืœืขืŸ ืื•ื™ืฃ ืื•ื ื“ื–ืขืจ ื‘ืœืึธื’:

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

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