Kubernetes-āĻ āĻā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻ°āĻž k8s-āĻ¨ā§āĻāĻŋāĻ Argo Rollouts āĻĄāĻŋāĻĒā§āĻ˛āĻ¯āĻŧāĻŽā§āĻ¨ā§āĻ āĻāĻ¨ā§āĻā§āĻ°ā§āĻ˛āĻžāĻ° āĻāĻŦāĻ GitlabCI āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦ
āĻāĻ āĻ¸āĻŋāĻ°āĻŋāĻā§āĻ° āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§
āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ā§ āĻā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž #1: āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ¸āĻŋāĻāĻ - (āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ)
- Istio āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž
- āĻā§āĻ¨āĻāĻŋāĻ¨ā§āĻ¸-āĻāĻā§āĻ¸ āĻāĻ¸ā§āĻāĻŋāĻ āĻĢā§āĻ˛ā§āĻ¯āĻžāĻāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž
āĻā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž
āĻāĻŽāĻ°āĻž āĻāĻļāĻž āĻāĻ°āĻŋ āĻāĻĒāĻ¨āĻŋ āĻĒāĻĄāĻŧāĻŦā§āĻ¨
āĻāĻ°ā§āĻā§ āĻ°ā§āĻ˛āĻāĻāĻāĻ¸
Argo Rollouts āĻšāĻ˛ āĻāĻāĻāĻŋ Kubernetes āĻ¨ā§āĻāĻŋāĻ āĻĄāĻŋāĻĒā§āĻ˛āĻ¯āĻŧāĻŽā§āĻ¨ā§āĻ āĻāĻ¨ā§āĻā§āĻ°ā§āĻ˛āĻžāĻ°āĨ¤ āĻāĻāĻŋ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ CRD (āĻāĻžāĻ¸ā§āĻāĻŽ āĻ°āĻŋāĻ¸ā§āĻ°ā§āĻ¸ āĻĄā§āĻĢāĻŋāĻ¨āĻŋāĻļāĻ¨) āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§āĨ¤ āĻāĻāĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ, āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻ¤ā§āĻ¤āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ: Rollout
, āĻ¯āĻž āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻŦāĻŋāĻāĻ˛ā§āĻĒā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¨ā§āĻ˛-āĻ¸āĻŦā§āĻ āĻāĻŦāĻ āĻā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°ā§āĨ¤
āĻāĻāĻāĻŋ āĻāĻžāĻ¸ā§āĻāĻŽ āĻ¸āĻŽā§āĻĒāĻĻ āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ Argo āĻ°ā§āĻ˛āĻāĻāĻ āĻāĻ¨ā§āĻā§āĻ°ā§āĻ˛āĻžāĻ°
Rollout,
āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¨ā§āĻ˛-āĻ¸āĻŦā§āĻ āĻāĻŦāĻ āĻā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋāĻ° āĻŽāĻ¤ā§ āĻ āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻā§āĻļāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧāĨ¤ āĻ¸āĻŽā§āĻĒāĻĻRollout
āĻāĻžāĻ°ā§āĻ¯āĻāĻžāĻ°āĻŋāĻ¤āĻž āĻ¸āĻŽāĻ¤ā§āĻ˛ā§āĻ¯ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§Deployment
, āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻā§āĻļāĻ˛ āĻ¸āĻšāĨ¤
āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨Deployments
āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĻā§āĻāĻŋ āĻā§āĻļāĻ˛ āĻ°āĻ¯āĻŧā§āĻā§:RollingUpdate
иRecreate
. āĻ¯āĻĻāĻŋāĻ āĻāĻ āĻā§āĻļāĻ˛āĻā§āĻ˛āĻŋ āĻŦā§āĻļāĻŋāĻ°āĻāĻžāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻĒāĻ¯ā§āĻā§āĻ¤, āĻāĻāĻāĻŋ āĻā§āĻŦ āĻŦāĻĄāĻŧ āĻ¸ā§āĻā§āĻ˛ā§ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻ āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻā§āĻļāĻ˛āĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¯ā§āĻŽāĻ¨ āĻ¨ā§āĻ˛-āĻ¸āĻŦā§āĻ āĻŦāĻž āĻā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ, āĻ¯ā§āĻā§āĻ˛āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖāĻāĻžāĻ°ā§āĻ¤ā§ āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻ¨āĻ¯āĻŧāĨ¤ Kubernetes-āĻ āĻāĻ āĻā§āĻļāĻ˛āĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻ¤āĻžāĻĻā§āĻ° āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻāĻĒāĻ°ā§ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ˛āĻŋāĻāĻ¤ā§ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤ āĻāĻ°ā§āĻā§ āĻ°ā§āĻ˛āĻāĻāĻ āĻāĻ¨ā§āĻā§āĻ°ā§āĻ˛āĻžāĻ° āĻāĻ āĻā§āĻļāĻ˛āĻā§āĻ˛āĻŋāĻā§ āĻ¸āĻšāĻ, āĻā§āĻˇāĻŖāĻžāĻŽā§āĻ˛āĻ, āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°āĻ¯ā§āĻā§āĻ¯ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°ā§āĨ¤
https://argoproj.github.io/argo-rollouts
āĻāĻāĻžāĻĄāĻŧāĻžāĻ āĻ°āĻ¯āĻŧā§āĻā§ Argo CI, āĻ¯āĻž 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 āĻĒā§āĻ˛āĻžāĻāĻāĻ¨)
āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨
āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻā§āĻĄ āĻāĻŦāĻ āĻĒāĻ°āĻŋāĻāĻžāĻ āĻžāĻŽā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻĨāĻ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻĨāĻžāĻāĻž āĻāĻžāĻ˛ āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨āĨ¤
āĻāĻŦā§āĻĻāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛
Kim Wuestkamp/k8s-deployment-example-app
āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻā§āĻŦ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒāĻžāĻāĻĨāĻ¨ + āĻĢā§āĻ˛āĻžāĻ¸ā§āĻ API āĻ¯āĻž JSON āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§āĨ¤ āĻāĻŽāĻ°āĻž 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
āĻāĻĒāĻ¨āĻŋ āĻāĻžāĻāĻāĻžāĻāĻžāĻŽāĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ KUBECONFIG
GitlabCI-āĻ¤ā§, āĻ¯āĻž āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻ§āĻžāĻ°āĻŖ āĻāĻ°āĻŦā§ kubectl
āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§āĨ¤
āĻ āĻŦāĻāĻžāĻ āĻžāĻŽā§ āĻāĻ¯āĻŧāĻžāĻŽāĻ˛
āĻ āĻŦāĻāĻžāĻ āĻžāĻŽā§ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§āĻ° āĻāĻŋāĻ¤āĻ°ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻ°āĻ¯āĻŧā§āĻā§:
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
āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻŽāĻ¤ā§āĻ āĻāĻžāĻ āĻāĻ°ā§āĨ¤ āĻ¯āĻĻāĻŋ āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻāĻĒāĻĄā§āĻ āĻā§āĻļāĻ˛ āĻ¸ā§āĻ āĻ¨āĻž āĻāĻ°āĻŋ (āĻ¯ā§āĻŽāĻ¨ āĻā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻāĻāĻžāĻ¨ā§) āĻāĻāĻŋ āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻ°ā§āĻ˛āĻŋāĻ-āĻāĻĒāĻĄā§āĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻŽāĻ¤ā§ āĻāĻāĻ°āĻŖ āĻāĻ°āĻŦā§āĨ¤
āĻā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻ°āĻž āĻāĻ¯āĻŧāĻžāĻŽāĻ˛ā§āĻ° āĻĻā§āĻāĻŋ āĻ§āĻžāĻĒ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻŋ:
- āĻā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋāĻ¤ā§ āĻā§āĻ°āĻžāĻĢāĻŋāĻā§āĻ° 10% (āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛ āĻ āĻŋāĻ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻĒā§āĻā§āĻˇāĻž āĻāĻ°ā§āĻ¨)
- āĻā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋāĻ¤ā§ 50% āĻā§āĻ°āĻžāĻĢāĻŋāĻ (2 āĻŽāĻŋāĻ¨āĻŋāĻ āĻ āĻĒā§āĻā§āĻˇāĻž āĻāĻ°ā§āĻ¨ āĻ¤āĻžāĻ°āĻĒāĻ° 100% āĻāĻžāĻ˛āĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻ¨)
āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ¸āĻā§āĻāĻžāĻ˛āĻ¨
āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻĒāĻ°ā§, āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨āĻā§āĻ˛āĻŋ āĻāĻāĻ°āĻāĻŽ āĻĻā§āĻāĻžāĻŦā§:
āĻāĻŦāĻ āĻāĻŽāĻ°āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋāĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒāĻžāĻ:
āĻā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻ¸āĻā§āĻāĻžāĻ˛āĻ¨
āĻ§āĻžāĻĒ 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
...
āĻāĻŦāĻ āĻāĻŽāĻ°āĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻā§āĻ˛āĻŋāĻā§ āĻāĻžāĻĒ āĻĻāĻŋāĻ, āĻ¤āĻžāĻ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ¸āĻŋāĻāĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°ā§ āĻāĻŦāĻ āĻāĻŽāĻ°āĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻā§āĻ˛āĻŋ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ:
āĻāĻāĻ¨ āĻ¯āĻĻāĻŋ āĻāĻŽāĻ°āĻž āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻāĻŋ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻ°āĻŋ:
āĻĻāĻžāĻ°ā§āĻŖ! āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻŽāĻžāĻāĻāĻžāĻ¨ā§ āĻāĻāĻŋāĨ¤ āĻāĻŽāĻ°āĻž āĻĻā§āĻĄāĻŧāĻžāĻ¨ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ āĻā§āĻ°āĻāĻ¤āĻŋ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ°āĻŋ:
kubectl argo rollouts get rollout rollout-canary
āĻ§āĻžāĻĒ 2: 50% āĻā§āĻ°āĻžāĻĢāĻŋāĻ:
āĻāĻāĻ¨ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻ§āĻžāĻĒā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ: āĻā§āĻ°āĻžāĻĢāĻŋāĻā§āĻ° 50% āĻ°āĻŋāĻĄāĻžāĻāĻ°ā§āĻā§āĻ āĻāĻ°āĻžāĨ¤ āĻāĻŽāĻ°āĻž āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛āĻŋ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ āĻĒāĻĻāĻā§āĻˇā§āĻĒāĻāĻŋ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°ā§āĻāĻŋ:
kubectl argo rollouts promote rollout-canary # continue to step 2
āĻāĻŦāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻĨā§āĻā§ 50% āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĢāĻŋāĻ°āĻŋāĻ¯āĻŧā§ āĻĻāĻŋāĻ¯āĻŧā§āĻā§:
āĻāĻŦāĻ āĻ°ā§āĻ˛āĻāĻāĻ āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§āĻāĻ¨āĻž:
ĐŅĐĩĐēŅĐ°ŅĐŊĐž
āĻ§āĻžāĻĒ 3: 100% āĻā§āĻ°āĻžāĻĢāĻŋāĻ:
āĻāĻŽāĻ°āĻž āĻāĻāĻŋ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°ā§āĻāĻŋ āĻ¯āĻžāĻ¤ā§ 2 āĻŽāĻŋāĻ¨āĻŋāĻā§āĻ° āĻĒāĻ°ā§ 50% āĻĒāĻĻāĻā§āĻˇā§āĻĒ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻļā§āĻˇ āĻšāĻŦā§ āĻāĻŦāĻ 100% āĻĒāĻĻāĻā§āĻˇā§āĻĒ āĻļā§āĻ°ā§ āĻšāĻŦā§:
āĻāĻŦāĻ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻāĻāĻāĻĒā§āĻ:
āĻāĻŦāĻ āĻ°ā§āĻ˛āĻāĻāĻ āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§āĻāĻ¨āĻž:
āĻā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖāĨ¤
āĻāĻ°ā§āĻā§ āĻ°ā§āĻ˛āĻāĻāĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻ°āĻ āĻāĻĻāĻžāĻšāĻ°āĻŖ
āĻāĻāĻžāĻ¨ā§ āĻāĻ°āĻ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻ°āĻ¯āĻŧā§āĻā§, āĻ¯ā§āĻŽāĻ¨ āĻā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋāĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§ āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻĒā§āĻ°ā§āĻŦāĻ°ā§āĻĒ āĻāĻŦāĻ āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻŋāĻāĻžāĻŦā§ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧ:
Argo Rollouts āĻāĻŦāĻ Argo CI āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻŋāĻĄāĻŋāĻ
āĻāĻŽāĻŋ āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ āĻāĻ āĻāĻŋāĻĄāĻŋāĻāĻāĻŋ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻāĻ°āĻāĻŋ, āĻāĻāĻŋ āĻĻā§āĻāĻžāĻ¯āĻŧ āĻāĻŋāĻāĻžāĻŦā§ Argo Rollouts āĻāĻŦāĻ Argo CI āĻāĻāĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°ā§:
āĻĢāĻ˛āĻžāĻĢāĻ˛
āĻāĻŽāĻŋ āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ CRD āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ§āĻžāĻ°āĻŖāĻž āĻĒāĻāĻ¨ā§āĻĻ āĻāĻ°āĻŋ āĻ¯āĻž āĻ āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻ§āĻ°āĻ¨ā§āĻ° āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻŦāĻž āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻ¸ā§āĻ, āĻā§āĻ°āĻžāĻĢāĻŋāĻ āĻĒā§āĻ¨āĻāĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĨ¤ āĻ¤āĻžāĻĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻŽāĻ¸ā§āĻŖāĻāĻžāĻŦā§ āĻ¯āĻžāĻ¯āĻŧāĨ¤ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻāĻŽāĻŋ Argo CI āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§ āĻāĻžāĻāĨ¤
āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻ°ā§āĻā§ āĻ¸āĻŋāĻāĻ āĻāĻŦāĻ āĻĢā§āĻ˛āĻžāĻā§āĻ¸ āĻ¸āĻŋāĻāĻ āĻāĻ° āĻāĻāĻāĻŋ āĻŦāĻĄāĻŧ āĻāĻāĻ¤ā§āĻ°ā§āĻāĻ°āĻŖ āĻāĻ¸āĻā§ āĻŦāĻ˛ā§ āĻŽāĻ¨ā§ āĻšāĻā§āĻā§, āĻ¤āĻžāĻ āĻāĻŽāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ°āĻŋāĻ˛āĻŋāĻ āĻ¨āĻž āĻāĻ¸āĻž āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ
āĻĒā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ:
āĻāĻĒāĻ¨āĻžāĻ° āĻāĻŋ Argo Rollouts āĻŦāĻž Argo CI āĻāĻ° āĻā§āĻ¨ āĻ āĻāĻŋāĻā§āĻāĻ¤āĻž āĻāĻā§?
āĻāĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻŦā§āĻ˛āĻā§ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ āĻĒāĻĄāĻŧā§āĻ¨:
Nginx āĻāĻ¯āĻŧā§āĻŦ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻ¨ā§āĻ˛-āĻ¸āĻŦā§āĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸: āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻ°āĻŋāĻ¸ā§āĻ°ā§āĻ¸ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻāĻŽā§āĻ¨ā§āĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻā§āĻ¨ āĻāĻ¤ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ? Hashicorp āĻāĻ¨āĻ¸āĻžāĻ˛ āĻāĻ° Kubernetes āĻ āĻ¨ā§āĻŽā§āĻĻāĻ¨ā§āĻ° āĻā§āĻŽāĻŋāĻāĻž āĻā§āĻāĻāĻ¨ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ - āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻā§āĻ¸-āĻ¨ā§āĻāĻŋāĻ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ Nginx āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¤āĻŋāĻļā§āĻ˛ āĻŽāĻĄāĻŋāĻāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻ°ā§āĻĄāĻŽāĻžāĻāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ˛āĻŋāĻā§āĻ°āĻžāĻŽ āĻŦāĻāĨ¤ āĻā§āĻāĻžāĻŦā§ āĻ¨āĻŋāĻā§āĻ° āĻāĻŦāĻ āĻ āĻ¨ā§āĻ¯āĻĻā§āĻ° āĻā§āĻŦāĻ¨āĻā§ āĻ¸āĻšāĻ āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ
āĻāĻ¤ā§āĻ¸: www.habr.com