āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻāĻŦāĻ‚ āĻ‡āĻ¸ā§āĻŸāĻŋāĻ“ āĻ¸āĻš āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž

āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻāĻŦāĻ‚ āĻ‡āĻ¸ā§āĻŸāĻŋāĻ“ āĻ¸āĻš āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž

āĻ¸āĻŋāĻĄāĻŋ āĻāĻ•āĻŸāĻŋ āĻāĻ¨ā§āĻŸāĻžāĻ°āĻĒā§āĻ°āĻžāĻ‡āĻœ āĻ¸āĻĢā§āĻŸāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻ…āĻ¨ā§āĻļā§€āĻ˛āĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¸ā§āĻŦā§€āĻ•ā§ƒāĻ¤ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻˇā§āĻ āĻŋāĻ¤ CI āĻ¨ā§€āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻžāĻ•ā§ƒāĻ¤āĻŋāĻ• āĻŦāĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§‡āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛āĨ¤ āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻ¸āĻŋāĻĄāĻŋ āĻāĻ–āĻ¨āĻ“ āĻŦā§‡āĻļ āĻŦāĻŋāĻ°āĻ˛, āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻŦā§āĻ¯āĻŦāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻœāĻŸāĻŋāĻ˛āĻ¤āĻžāĻ° āĻ•āĻžāĻ°āĻŖā§‡ āĻāĻŦāĻ‚ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻĒā§āĻ°āĻžāĻĒā§āĻ¯āĻ¤āĻžāĻ•ā§‡ āĻĒā§āĻ°āĻ­āĻžāĻŦāĻŋāĻ¤ āĻ•āĻ°ā§‡ āĻŦā§āĻ¯āĻ°ā§āĻĨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻ­āĻ¯āĻŧā§‡āĻ° āĻ•āĻžāĻ°āĻŖā§‡āĨ¤

āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ“āĻĒā§‡āĻ¨ āĻ¸ā§‹āĻ°ā§āĻ¸ Kubernetes āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻ° āĻ¯āĻžāĻ° āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻŦāĻŋāĻ­ā§āĻ°āĻžāĻ¨ā§āĻ¤āĻŋāĻ•āĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ• āĻĻā§‚āĻ° āĻ•āĻ°āĻžāĨ¤ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻŋāĻ¤ āĻ°ā§‹āĻ˛āĻ†āĻ‰āĻŸā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ†āĻšāĻ°āĻŖ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻ‡āĻ¸ā§āĻŸāĻŋāĻ“ āĻŸā§āĻ°ā§āĻ¯āĻžāĻĢāĻŋāĻ• āĻ…āĻĢāĻ¸ā§‡āĻŸ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻšāĻžāĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•āĻ°ā§‡āĨ¤

Google Kubernetes Engine (GKE) āĻ āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻāĻŦāĻ‚ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨ā§€āĻšā§‡ āĻāĻ•āĻŸāĻŋ āĻ§āĻžāĻĒā§‡ āĻ§āĻžāĻĒā§‡ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻŋāĻ•āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ā§ˇ

āĻāĻ•āĻŸāĻŋ Kubernetes āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

āĻ†āĻĒāĻ¨āĻŋ Istio āĻ…ā§āĻ¯āĻžāĻĄ-āĻ…āĻ¨ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻāĻ•āĻŸāĻŋ GKE āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡ āĻļā§āĻ°ā§ āĻ•āĻ°ā§‡āĻ¨ (āĻ¯āĻĻāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻāĻ•āĻŸāĻŋ GCP āĻ…ā§āĻ¯āĻžāĻ•āĻžāĻ‰āĻ¨ā§āĻŸ āĻ¨āĻž āĻĨāĻžāĻ•ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻžāĻ‡āĻ¨ āĻ†āĻĒ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻāĻ–āĻžāĻ¨ā§‡ - āĻŦāĻŋāĻ¨āĻžāĻŽā§‚āĻ˛ā§āĻ¯ā§‡ āĻ•ā§āĻ°ā§‡āĻĄāĻŋāĻŸ āĻĒā§‡āĻ¤ā§‡)āĨ¤

Google āĻ•ā§āĻ˛āĻžāĻ‰āĻĄā§‡ āĻ¸āĻžāĻ‡āĻ¨ āĻ‡āĻ¨ āĻ•āĻ°ā§āĻ¨, āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻ˛āĻŋāĻ‚ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°ā§āĻ¨ā§ˇ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻ‡āĻ¨ āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°ā§āĻ¨ āĻœāĻŋāĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻāĻŦāĻ‚ āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ•āĻ°ā§āĻ¨ gcloud init.

āĻĄāĻŋāĻĢāĻ˛ā§āĻŸ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ, āĻ—āĻŖāĻ¨āĻž āĻāĻ˛āĻžāĻ•āĻž, āĻāĻŦāĻ‚ āĻœā§‹āĻ¨ āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§āĻ¨ (āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§āĻ¨ PROJECT_ID āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻœāĻ¨ā§āĻ¯):

gcloud config set project PROJECT_ID
gcloud config set compute/region us-central1
gcloud config set compute/zone us-central1-a

GKE āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ HPA āĻāĻŦāĻ‚ Istio āĻ…ā§āĻ¯āĻžāĻĄ-āĻ…āĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨:

gcloud services enable container.googleapis.com
K8S_VERSION=$(gcloud beta container get-server-config --format=json | jq -r '.validMasterVersions[0]')
gcloud beta container clusters create istio 
--cluster-version=${K8S_VERSION} 
--zone=us-central1-a 
--num-nodes=2 
--machine-type=n1-standard-2 
--disk-size=30 
--enable-autorepair 
--no-enable-cloud-logging 
--no-enable-cloud-monitoring 
--addons=HorizontalPodAutoscaling,Istio 
--istio-config=auth=MTLS_PERMISSIVE

āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ•āĻŽāĻžāĻ¨ā§āĻĄāĻŸāĻŋ āĻĻā§āĻŸāĻŋ VM āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻĄāĻŋāĻĢāĻ˛ā§āĻŸ āĻ¨ā§‹āĻĄ āĻĒā§āĻ˛ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦā§‡ n1-standard-2 (vCPU: 2, RAM 7,5 GB, āĻĄāĻŋāĻ¸ā§āĻ•: 30 GB)āĨ¤ āĻ†āĻĻāĻ°ā§āĻļāĻ­āĻžāĻŦā§‡, āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻžāĻœā§‡āĻ° āĻšāĻžāĻĒ āĻĨā§‡āĻ•ā§‡ Istio āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āĻ¨ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤, āĻ¤āĻŦā§‡ āĻ¨ā§‹āĻĄāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻ¤ā§āĻ¸āĻ°ā§āĻ—ā§€āĻ•ā§ƒāĻ¤ āĻĒā§āĻ˛ā§‡ Istio āĻĒāĻĄāĻ—ā§āĻ˛āĻŋ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻ•ā§‹āĻ¨āĻ“ āĻ¸āĻšāĻœ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻ¨ā§‡āĻ‡ā§ˇ Istio āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§‡āĻ¸ā§āĻŸāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĒāĻ āĻ¨āĻ¯ā§‹āĻ—ā§āĻ¯ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ GKE āĻ•ā§‹āĻ¨ā§‹ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ•ā§‡ āĻĒā§‚āĻ°ā§āĻŦāĻžāĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻĢāĻŋāĻ°āĻŋāĻ¯āĻŧā§‡ āĻ†āĻ¨āĻŦā§‡, āĻ¯ā§‡āĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¨ā§‹āĻĄā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ˛āĻŋāĻ™ā§āĻ• āĻ•āĻ°āĻž āĻŦāĻž āĻāĻ•āĻŸāĻŋ āĻĒāĻĄ āĻĨā§‡āĻ•ā§‡ āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āĻ¨ āĻ•āĻ°āĻžāĨ¤

āĻœāĻ¨ā§āĻ¯ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ•āĻ°ā§āĻ¨ kubectl:

gcloud container clusters get-credentials istio

āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ…ā§āĻ¯āĻžāĻĄāĻŽāĻŋāĻ¨āĻŋāĻ¸ā§āĻŸā§āĻ°ā§‡āĻŸāĻ° āĻ°ā§‹āĻ˛ āĻŦāĻžāĻ‡āĻ¨ā§āĻĄāĻŋāĻ‚ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨:

kubectl create clusterrolebinding "cluster-admin-$(whoami)" 
--clusterrole=cluster-admin 
--user="$(gcloud config get-value core/account)"

āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻ‡āĻ¨ āĻŸā§āĻ˛ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°ā§āĻ¨ āĻšāĻžāĻ˛:

brew install kubernetes-helm

Homebrew 2.0 āĻāĻ–āĻ¨ āĻāĻ° āĻœāĻ¨ā§āĻ¯āĻ“ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻ˛āĻŋāĻ¨āĻžāĻ•ā§āĻ¸.

āĻŸāĻŋāĻ˛āĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻ…ā§āĻ¯āĻžāĻ•āĻžāĻ‰āĻ¨ā§āĻŸ āĻāĻŦāĻ‚ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ°ā§‹āĻ˛ āĻŦāĻžāĻ‡āĻ¨ā§āĻĄāĻŋāĻ‚ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨:

kubectl -n kube-system create sa tiller && 
kubectl create clusterrolebinding tiller-cluster-rule 
--clusterrole=cluster-admin 
--serviceaccount=kube-system:tiller

āĻ¨āĻžāĻŽāĻ¸ā§āĻĨāĻžāĻ¨ā§‡ āĻŸāĻŋāĻ˛āĻžāĻ° āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨ kube-system:

helm init --service-account tiller

āĻ†āĻĒāĻ¨āĻžāĻ° āĻšā§‡āĻ˛āĻŽ āĻāĻŦāĻ‚ āĻŸāĻŋāĻ˛āĻžāĻ°ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ SSL āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤āĨ¤ āĻ†āĻĒāĻ¨āĻžāĻ° āĻšā§‡āĻ˛āĻŽ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ā§‡āĻļāĻ¨ āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ†āĻ°āĻ“ āĻ¤āĻĨā§āĻ¯ā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻĻā§‡āĻ–ā§āĻ¨ docs.helm.sh

āĻ¸ā§‡āĻŸāĻŋāĻ‚āĻ¸ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨:

kubectl -n istio-system get svc

āĻ•āĻ¯āĻŧā§‡āĻ• āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄ āĻĒāĻ°ā§‡, GCP āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŦāĻšāĻŋāĻ°āĻžāĻ—āĻ¤ IP āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤ istio-ingressgateway.

āĻ‡āĻ¸ā§āĻŸāĻŋāĻ“ āĻ‡āĻ¨āĻ—ā§āĻ°ā§‡āĻ¸ āĻ—ā§‡āĻŸāĻ“āĻ¯āĻŧā§‡ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

āĻāĻ•āĻŸāĻŋ āĻ¨āĻžāĻŽā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŸāĻŋāĻ• āĻ†āĻ‡āĻĒāĻŋ āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨ istio-gatewayIstio āĻ—ā§‡āĻŸāĻ“āĻ¯āĻŧā§‡āĻ° IP āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡:

export GATEWAY_IP=$(kubectl -n istio-system get svc/istio-ingressgateway -ojson | jq -r .status.loadBalancer.ingress[0].ip)
gcloud compute addresses create istio-gateway --addresses ${GATEWAY_IP} --region us-central1

āĻāĻ–āĻ¨ āĻ†āĻĒāĻ¨āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻ¨ā§‡āĻŸ āĻĄā§‹āĻŽā§‡āĻ‡āĻ¨ āĻāĻŦāĻ‚ āĻ†āĻĒāĻ¨āĻžāĻ° DNS āĻ°ā§‡āĻœāĻŋāĻ¸ā§āĻŸā§āĻ°āĻžāĻ°ā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤ āĻĻā§āĻŸāĻŋ A āĻ°ā§‡āĻ•āĻ°ā§āĻĄ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§āĻ¨ (āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§āĻ¨ example.com āĻ†āĻĒāĻ¨āĻžāĻ° āĻĄā§‹āĻŽā§‡āĻ¨ā§‡):

istio.example.com   A ${GATEWAY_IP}
*.istio.example.com A ${GATEWAY_IP}

DNS āĻ“āĻ¯āĻŧāĻžāĻ‡āĻ˛ā§āĻĄāĻ•āĻžāĻ°ā§āĻĄ āĻ•āĻžāĻœ āĻ•āĻ°āĻ›ā§‡ āĻ•āĻŋāĻ¨āĻž āĻ¯āĻžāĻšāĻžāĻ‡ āĻ•āĻ°ā§āĻ¨:

watch host test.istio.example.com

āĻāĻ‡āĻšāĻŸāĻŋāĻŸāĻŋāĻĒāĻŋ-āĻ¤ā§‡ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻœāĻžāĻ˛ā§‡āĻ° āĻŦāĻžāĻ‡āĻ°ā§‡ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ Istio āĻ—ā§‡āĻŸāĻ“āĻ¯āĻŧā§‡ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: public-gateway
  namespace: istio-system
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
        - "*"

āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ¸āĻŽā§āĻĒāĻĻāĻ•ā§‡ public-gateway.yaml āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°ā§āĻ¨:

kubectl apply -f ./public-gateway.yaml

SSL āĻ›āĻžāĻĄāĻŧāĻž āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻ¨ā§‡āĻŸā§‡ āĻ•ā§‹āĻ¨ā§‹ āĻ‰ā§ŽāĻĒāĻžāĻĻāĻ¨ āĻŦā§āĻ¯āĻŦāĻ¸ā§āĻĨāĻžāĻ° āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤ āĻ¨āĻ¯āĻŧāĨ¤ āĻ¸āĻžāĻ°ā§āĻŸ-āĻŽā§āĻ¯āĻžāĻ¨ā§‡āĻœāĻžāĻ°, āĻ•ā§āĻ˛āĻžāĻ‰āĻĄāĻĄāĻŋāĻāĻ¨āĻāĻ¸ āĻāĻŦāĻ‚ āĻ˛ā§‡āĻŸāĻ¸ āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ‡āĻ¸ā§āĻŸāĻŋāĻ“ āĻ‡āĻ¨āĻ—ā§āĻ°ā§‡āĻ¸ āĻ—ā§‡āĻŸāĻ“āĻ¯āĻŧā§‡ āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡, āĻ…āĻ¨ā§āĻ—ā§āĻ°āĻš āĻ•āĻ°ā§‡ āĻĒāĻĄāĻŧā§āĻ¨ āĻĄāĻ•ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨ āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° G.K.E.

āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ā§‡āĻļāĻ¨

GKE Istio āĻ…ā§āĻ¯āĻžāĻĄ-āĻ…āĻ¨ā§‡ āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻĻā§ƒāĻˇā§āĻŸāĻžāĻ¨ā§āĻ¤ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ¨āĻ¯āĻŧ āĻ¯āĻž āĻ‡āĻ¸ā§āĻŸāĻŋāĻ“ āĻŸā§‡āĻ˛āĻŋāĻŽā§‡āĻŸā§āĻ°āĻŋ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ•ā§‡ āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻ•āĻ°ā§‡āĨ¤ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ•āĻ°āĻ¤ā§‡ Istio HTTP āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡, āĻ¤āĻžāĻ‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨āĻŸāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡, āĻ¯āĻž āĻ…āĻĢāĻŋāĻ¸āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ‡āĻ¸ā§āĻŸāĻŋāĻ“ āĻšā§‡āĻ˛āĻŽ āĻ¸ā§āĻ•āĻŋāĻŽāĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ†āĻ¸ā§‡āĨ¤

REPO=https://raw.githubusercontent.com/stefanprodan/flagger/master
kubectl apply -f ${REPO}/artifacts/gke/istio-prometheus.yaml

āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻšā§‡āĻ˛āĻŽ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§āĻ¨:

helm repo add flagger [https://flagger.app](https://flagger.app/)

āĻ¨āĻžāĻŽāĻ¸ā§āĻĨāĻžāĻ¨ā§‡ āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨ istio-systemāĻ¸ā§āĻ˛ā§āĻ¯āĻžāĻ• āĻŦāĻŋāĻœā§āĻžāĻĒā§āĻ¤āĻŋ āĻ¸āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•āĻ°ā§‡:

helm upgrade -i flagger flagger/flagger 
--namespace=istio-system 
--set metricsServer=http://prometheus.istio-system:9090 
--set slack.url=https://hooks.slack.com/services/YOUR-WEBHOOK-ID 
--set slack.channel=general 
--set slack.user=flagger

āĻ¯āĻ¤āĻ•ā§āĻˇāĻŖ āĻ¨āĻž āĻāĻŸāĻŋ āĻĒā§‹āĻ°ā§āĻŸ 9090 āĻ āĻ‡āĻ¸ā§āĻŸāĻŋāĻ“ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¤āĻ¤āĻ•ā§āĻˇāĻŖ āĻ†āĻĒāĻ¨āĻŋ āĻ¯ā§‡ āĻ•ā§‹āĻ¨āĻ“ āĻ¨āĻžāĻŽāĻ¸ā§āĻĨāĻžāĻ¨ā§‡ āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ā§ˇ

āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ°ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ—ā§āĻ°āĻžāĻĢāĻžāĻ¨āĻž āĻĄā§āĻ¯āĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ¨āĻžāĻŽāĻ¸ā§āĻĨāĻžāĻ¨ā§‡ Grafana āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°ā§āĻ¨ istio-system:

helm upgrade -i flagger-grafana flagger/grafana 
--namespace=istio-system 
--set url=http://prometheus.istio-system:9090 
--set user=admin 
--set password=change-me

āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ–ā§‹āĻ˛āĻž āĻ—ā§‡āĻŸāĻ“āĻ¯āĻŧā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ—ā§āĻ°āĻžāĻĢāĻžāĻ¨āĻžāĻ•ā§‡ āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°ā§āĻ¨ (āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§āĻ¨ example.com āĻ†āĻĒāĻ¨āĻžāĻ° āĻĄā§‹āĻŽā§‡āĻ¨ā§‡):

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: grafana
  namespace: istio-system
spec:
  hosts:
    - "grafana.istio.example.com"
  gateways:
    - public-gateway.istio-system.svc.cluster.local
  http:
    - route:
        - destination:
            host: flagger-grafana

āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨āĻŸāĻŋāĻ•ā§‡ grafana-virtual-service.yaml āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°ā§āĻ¨:

kubectl apply -f ./grafana-virtual-service.yaml

āĻ¯āĻ–āĻ¨ āĻ¸āĻ°āĻžāĻ¨ā§‹ http://grafana.istio.example.com āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ°ā§‡, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ Grafana āĻ˛āĻ—āĻ‡āĻ¨ āĻĒā§ƒāĻˇā§āĻ āĻžāĻ¯āĻŧ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻŋāĻ¤ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤āĨ¤

āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ“āĻ¯āĻŧā§‡āĻŦ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° Kubernetes āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻāĻšā§āĻ›āĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻ­āĻžāĻŦā§‡ (HPA) āĻ¸ā§āĻ•ā§‡āĻ˛ āĻ†āĻ‰āĻŸ āĻ•āĻ°ā§‡, āĻ¤āĻžāĻ°āĻĒāĻ° āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻŋāĻ°āĻŋāĻœ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡ (Kubernetes āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž, ClusterIP āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻāĻŦāĻ‚ Istio āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž)āĨ¤ āĻāĻ‡ āĻŦāĻ¸ā§āĻ¤ā§āĻ—ā§āĻ˛āĻŋ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋāĻ•ā§‡ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻœāĻžāĻ˛ā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻāĻŦāĻ‚ āĻ…āĻ—ā§āĻ°āĻ—āĻ¤āĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ•āĻ°ā§‡āĨ¤

āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻāĻŦāĻ‚ āĻ‡āĻ¸ā§āĻŸāĻŋāĻ“ āĻ¸āĻš āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž

Istio Sidecar āĻ‡āĻ¨āĻœā§‡āĻ•āĻļāĻ¨ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻ¨āĻžāĻŽāĻ¸ā§āĻĨāĻžāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨:

REPO=https://raw.githubusercontent.com/stefanprodan/flagger/master
kubectl apply -f ${REPO}/artifacts/namespaces/test.yaml

āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻĒāĻĄ āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ¸ā§āĻ•ā§‡āĻ˛-āĻ†āĻ‰āĻŸ āĻŸā§āĻ˛ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨:

kubectl apply -f ${REPO}/artifacts/canaries/deployment.yaml
kubectl apply -f ${REPO}/artifacts/canaries/hpa.yaml

āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻŸā§āĻ°āĻžāĻĢāĻŋāĻ• āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ˛ā§‹āĻĄ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§āĻ¨:

helm upgrade -i flagger-loadtester flagger/loadtester 
--namepace=test

āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ¸ā§āĻŸāĻŽ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨ (āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ example.com āĻ†āĻĒāĻ¨āĻžāĻ° āĻĄā§‹āĻŽā§‡āĻ¨ā§‡):

apiVersion: flagger.app/v1alpha3
kind: Canary
metadata:
  name: podinfo
  namespace: test
spec:
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: podinfo
  progressDeadlineSeconds: 60
  autoscalerRef:
    apiVersion: autoscaling/v2beta1
    kind: HorizontalPodAutoscaler
    name: podinfo
  service:
    port: 9898
    gateways:
    - public-gateway.istio-system.svc.cluster.local
    hosts:
    - app.istio.example.com
  canaryAnalysis:
    interval: 30s
    threshold: 10
    maxWeight: 50
    stepWeight: 5
    metrics:
    - name: istio_requests_total
      threshold: 99
      interval: 30s
    - name: istio_request_duration_seconds_bucket
      threshold: 500
      interval: 30s
    webhooks:
      - name: load-test
        url: http://flagger-loadtester.test/
        timeout: 5s
        metadata:
          cmd: "hey -z 1m -q 10 -c 2 http://podinfo.test:9898/"

āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨āĻŸāĻŋāĻ•ā§‡ podinfo-canary.yaml āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°ā§āĻ¨:

kubectl apply -f ./podinfo-canary.yaml

āĻ‰āĻĒāĻ°ā§‡āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ, āĻ¸āĻĢāĻ˛ āĻšāĻ˛ā§‡, āĻĒāĻžāĻāĻš āĻŽāĻŋāĻ¨āĻŋāĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻšāĻ˛āĻŦā§‡, āĻĒā§āĻ°āĻ¤āĻŋ āĻ…āĻ°ā§āĻ§ āĻŽāĻŋāĻ¨āĻŋāĻŸā§‡ HTTP āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŦā§‡āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ¸ā§‚āĻ¤ā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻŦā§ˆāĻ§āĻ¤āĻž āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻšāĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ¸āĻ°ā§āĻŦāĻ¨āĻŋāĻŽā§āĻ¨ āĻ¸āĻŽāĻ¯āĻŧ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨: interval * (maxWeight / stepWeight). āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ CRD āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ° āĻ¨āĻĨāĻŋāĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻ–āĻžāĻ¨ā§‡.

āĻ•āĻ¯āĻŧā§‡āĻ• āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄ āĻĒāĻ°ā§‡, āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻŦāĻ¸ā§āĻ¤ā§ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦā§‡:

# applied 
deployment.apps/podinfo
horizontalpodautoscaler.autoscaling/podinfo
canary.flagger.app/podinfo
# generated 
deployment.apps/podinfo-primary
horizontalpodautoscaler.autoscaling/podinfo-primary
service/podinfo
service/podinfo-canary
service/podinfo-primary
virtualservice.networking.istio.io/podinfo

āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ° āĻ–ā§āĻ˛ā§āĻ¨ āĻāĻŦāĻ‚ āĻ¯āĻžāĻ¨ app.istio.example.com, āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻ¨āĻŽā§āĻŦāĻ° āĻĻā§‡āĻ–āĻ¤ā§‡ āĻšāĻŦā§‡ āĻĄā§‡āĻŽā§‹ āĻ…ā§āĻ¯āĻžāĻĒāĻ¸.

āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻšāĻžāĻ°

āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛ āĻ˛ā§āĻĒ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°ā§‡ āĻ¯āĻž āĻŸā§āĻ°āĻžāĻĢāĻŋāĻ•āĻ•ā§‡ āĻ§ā§€āĻ°ā§‡ āĻ§ā§€āĻ°ā§‡ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋāĻ¤ā§‡ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ¯āĻŧ āĻ¯āĻ–āĻ¨ āĻŽā§‚āĻ˛ āĻ•āĻ°ā§āĻŽāĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻ¯ā§‡āĻŽāĻ¨ HTTP āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻ¸āĻžāĻĢāĻ˛ā§āĻ¯ā§‡āĻ° āĻšāĻžāĻ°, āĻ—āĻĄāĻŧ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧāĻ•āĻžāĻ˛ āĻāĻŦāĻ‚ āĻĒāĻĄ āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āĻ¯ āĻĒāĻ°āĻŋāĻŽāĻžāĻĒ āĻ•āĻ°ā§‡āĨ¤ āĻ•ā§‡āĻĒāĻŋāĻ†āĻ‡ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖā§‡āĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡, āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋāĻ•ā§‡ āĻ‰āĻ¨ā§āĻ¨ā§€āĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻŦāĻž āĻŦāĻžāĻ§āĻž āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖā§‡āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ¸ā§āĻ˛ā§āĻ¯āĻžāĻ•ā§‡ āĻĒā§āĻ°āĻ•āĻžāĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤

āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻāĻŦāĻ‚ āĻ‡āĻ¸ā§āĻŸāĻŋāĻ“ āĻ¸āĻš āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž

āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸāĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻšāĻ˛ā§‡ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧ:

  • āĻĒāĻĄāĻ¸ā§āĻĒā§‡āĻ• āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§āĻ¨ (āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ° āĻ‡āĻŽā§‡āĻœ, āĻ•āĻŽāĻžāĻ¨ā§āĻĄ, āĻĒā§‹āĻ°ā§āĻŸ, āĻāĻ¨āĻ­āĻŋ, āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋ)
  • ConfigMaps āĻ­āĻ˛āĻŋāĻ‰āĻŽ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŽāĻžāĻ‰āĻ¨ā§āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻŦāĻž āĻĒāĻ°āĻŋāĻŦā§‡āĻļ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ā§‡ āĻŽā§āĻ¯āĻžāĻĒ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ
  • āĻ¸āĻŋāĻ•ā§āĻ°ā§‡āĻŸāĻ—ā§āĻ˛āĻŋ āĻ­āĻ˛āĻŋāĻ‰āĻŽ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŽāĻžāĻ‰āĻ¨ā§āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻŦāĻž āĻĒāĻ°āĻŋāĻŦā§‡āĻļ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ā§‡ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧ

āĻāĻ•āĻŸāĻŋ āĻ§āĻžāĻ°āĻ• āĻšāĻŋāĻ¤ā§āĻ° āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻšāĻžāĻ˛āĻžāĻ¨:

kubectl -n test set image deployment/podinfo 
podinfod=quay.io/stefanprodan/podinfo:1.4.1

āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻ¸āĻ¨āĻžāĻ•ā§āĻ¤ āĻ•āĻ°ā§‡ āĻ¯ā§‡ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻĒāĻžāĻ°ā§āĻ¸ āĻ•āĻ°āĻž āĻļā§āĻ°ā§ āĻ•āĻ°ā§‡:

kubectl -n test describe canary/podinfo

Events:

New revision detected podinfo.test
Scaling up podinfo.test
Waiting for podinfo.test rollout to finish: 0 of 1 updated replicas are available
Advance podinfo.test canary weight 5
Advance podinfo.test canary weight 10
Advance podinfo.test canary weight 15
Advance podinfo.test canary weight 20
Advance podinfo.test canary weight 25
Advance podinfo.test canary weight 30
Advance podinfo.test canary weight 35
Advance podinfo.test canary weight 40
Advance podinfo.test canary weight 45
Advance podinfo.test canary weight 50
Copying podinfo.test template spec to podinfo-primary.test
Waiting for podinfo-primary.test rollout to finish: 1 of 2 updated replicas are available
Promotion completed! Scaling down podinfo.test

āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ—ā§āĻ°āĻžāĻĢāĻžāĻ¨āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻŸā§āĻ°ā§āĻ¯āĻžāĻ• āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡:

āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻāĻŦāĻ‚ āĻ‡āĻ¸ā§āĻŸāĻŋāĻ“ āĻ¸āĻš āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž

āĻ…āĻ¨ā§āĻ—ā§āĻ°āĻš āĻ•āĻ°ā§‡ āĻŽāĻ¨ā§‡ āĻ°āĻžāĻ–āĻŦā§‡āĻ¨ āĻ¯ā§‡ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¯āĻĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻĒāĻ°ā§āĻŦāĻŸāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻŦā§‡āĨ¤

āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨:

watch kubectl get canaries --all-namespaces
NAMESPACE   NAME      STATUS        WEIGHT   LASTTRANSITIONTIME
test        podinfo   Progressing   15       2019-01-16T14:05:07Z
prod        frontend  Succeeded     0        2019-01-15T16:15:07Z
prod        backend   Failed        0        2019-01-14T17:05:07Z

āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ¸ā§āĻ˛ā§āĻ¯āĻžāĻ• āĻŦāĻŋāĻœā§āĻžāĻĒā§āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°ā§‡ āĻĨāĻžāĻ•ā§‡āĻ¨ āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ—ā§āĻ˛āĻŋ āĻĒāĻžāĻŦā§‡āĻ¨:

āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻāĻŦāĻ‚ āĻ‡āĻ¸ā§āĻŸāĻŋāĻ“ āĻ¸āĻš āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž

āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ°ā§‹āĻ˛āĻŦā§āĻ¯āĻžāĻ•

āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻŋāĻ¨ā§āĻĨā§‡āĻŸāĻŋāĻ• HTTP 500 āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻāĻŦāĻ‚ āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻŦā§‡ āĻ•āĻŋāĻ¨āĻž āĻ¤āĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻ‰āĻšā§āĻš āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ˛ā§‡āĻŸā§‡āĻ¨ā§āĻ¸āĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻāĻ•āĻŸāĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻĒāĻĄ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻāĻ¤ā§‡ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤āĻ—ā§āĻ˛āĻŋ āĻ•āĻ°ā§āĻ¨:

kubectl -n test run tester 
--image=quay.io/stefanprodan/podinfo:1.2.1 
-- ./podinfo --port=9898
kubectl -n test exec -it tester-xx-xx sh

HTTP 500 āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡:

watch curl http://podinfo-canary:9898/status/500

āĻŦāĻŋāĻ˛āĻŽā§āĻŦ āĻĒā§āĻ°āĻœāĻ¨ā§āĻŽ:

watch curl http://podinfo-canary:9898/delay/1

āĻŦā§āĻ¯āĻ°ā§āĻĨ āĻšā§‡āĻ•ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻĨā§āĻ°ā§‡āĻļāĻšā§‹āĻ˛ā§āĻĄā§‡ āĻĒā§ŒāĻāĻ›ā§‡ āĻ—ā§‡āĻ˛ā§‡, āĻŸā§āĻ°ā§āĻ¯āĻžāĻĢāĻŋāĻ•āĻ•ā§‡ āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ• āĻšā§āĻ¯āĻžāĻ¨ā§‡āĻ˛ā§‡ āĻĢāĻŋāĻ°āĻŋāĻ¯āĻŧā§‡ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧ, āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻļā§‚āĻ¨ā§āĻ¯ā§‡ āĻ¸ā§āĻ•ā§‡āĻ˛ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻŦā§āĻ¯āĻ°ā§āĻĨ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻšāĻŋāĻšā§āĻ¨āĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤

āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻāĻŦāĻ‚ āĻ˛ā§‡āĻŸā§‡āĻ¨ā§āĻ¸āĻŋ āĻ¸ā§āĻĒāĻžāĻ‡āĻ•āĻ—ā§āĻ˛āĻŋ Kubernetes āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ˛āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ JSON āĻĢāĻ°ā§āĻŽā§āĻ¯āĻžāĻŸā§‡ āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻ˛āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡:

kubectl -n istio-system logs deployment/flagger -f | jq .msg

Starting canary deployment for podinfo.test
Advance podinfo.test canary weight 5
Advance podinfo.test canary weight 10
Advance podinfo.test canary weight 15
Halt podinfo.test advancement success rate 69.17% < 99%
Halt podinfo.test advancement success rate 61.39% < 99%
Halt podinfo.test advancement success rate 55.06% < 99%
Halt podinfo.test advancement success rate 47.00% < 99%
Halt podinfo.test advancement success rate 37.00% < 99%
Halt podinfo.test advancement request duration 1.515s > 500ms
Halt podinfo.test advancement request duration 1.600s > 500ms
Halt podinfo.test advancement request duration 1.915s > 500ms
Halt podinfo.test advancement request duration 2.050s > 500ms
Halt podinfo.test advancement request duration 2.515s > 500ms
Rolling back podinfo.test failed checks threshold reached 10
Canary failed! Scaling down podinfo.test

āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ¸ā§āĻ˛ā§āĻ¯āĻžāĻ• āĻŦāĻŋāĻœā§āĻžāĻĒā§āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°ā§‡ āĻĨāĻžāĻ•ā§‡āĻ¨, āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĒāĻžāĻŦā§‡āĻ¨ āĻ¯āĻ–āĻ¨ āĻ¸āĻŽāĻ¯āĻŧāĻ¸ā§€āĻŽāĻž āĻ…āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻšāĻ¯āĻŧā§‡ āĻ¯āĻžāĻŦā§‡ āĻŦāĻž āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖā§‡ āĻŦā§āĻ¯āĻ°ā§āĻĨ āĻšā§‡āĻ•ā§‡āĻ° āĻ¸āĻ°ā§āĻŦā§‹āĻšā§āĻš āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻĒā§ŒāĻāĻ›ā§‡ āĻ¯āĻžāĻŦā§‡:

āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻāĻŦāĻ‚ āĻ‡āĻ¸ā§āĻŸāĻŋāĻ“ āĻ¸āĻš āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž

āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ° āĻ‡āĻ¨

Kubernetes āĻ›āĻžāĻĄāĻŧāĻžāĻ“ Istio-āĻāĻ° āĻŽāĻ¤ā§‹ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻœāĻžāĻ˛ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹ āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸, āĻ˛āĻ— āĻāĻŦāĻ‚ āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°āĻŦā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ•āĻžāĻœā§‡āĻ° āĻšāĻžāĻĒ āĻŽā§‹āĻ¤āĻžāĻ¯āĻŧā§‡āĻ¨ āĻāĻ–āĻ¨āĻ“ āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ• āĻ¸āĻ°āĻžā§āĻœāĻžāĻŽāĻ—ā§āĻ˛āĻŋāĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°ā§‡āĨ¤ āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ°ā§‡āĻ° āĻ˛āĻ•ā§āĻˇā§āĻ¯ Istio āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡ āĻāĻŸāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ—āĻ¤āĻŋāĻļā§€āĻ˛ āĻĄā§‡āĻ˛āĻŋāĻ­āĻžāĻ°āĻŋ.

āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻ¯ā§‡āĻ•ā§‹āĻ¨ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ¸āĻŋāĻ†āĻ‡/āĻ¸āĻŋāĻĄāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻŽāĻžā§āĻœāĻ¸ā§āĻ¯āĻĒā§‚āĻ°ā§āĻŖ, āĻāĻŦāĻ‚ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ¸āĻšāĻœā§‡āĻ‡ āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ“āĻ¯āĻŧā§‡āĻŦāĻšā§āĻ• āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ‡āĻ¨ā§āĻŸāĻŋāĻ—ā§āĻ°ā§‡āĻļāĻ¨/āĻ—ā§āĻ°āĻšāĻŖāĻ¯ā§‹āĻ—ā§āĻ¯āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž, āĻ˛ā§‹āĻĄ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž, āĻŦāĻž āĻ…āĻ¨ā§āĻ¯ āĻ•ā§‹āĻ¨ā§‹ āĻ•āĻžāĻ¸ā§āĻŸāĻŽ āĻšā§‡āĻ• āĻ¸āĻžā§āĻšāĻžāĻ˛āĻ¨ āĻ•āĻ°āĻ¤ā§‡āĨ¤ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻ˜ā§‹āĻˇāĻŖāĻžāĻŽā§‚āĻ˛āĻ• āĻāĻŦāĻ‚ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻœāĻžāĻ¨āĻžāĻ¯āĻŧ, āĻ¤āĻžāĻ‡ āĻāĻŸāĻŋ GitOps āĻĒāĻžāĻ‡āĻĒāĻ˛āĻžāĻ‡āĻ¨ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ“āĻ¯āĻŧā§‡āĻ­ āĻĢā§āĻ˛āĻžāĻ•ā§āĻ¸ āĻŦāĻž āĻœā§‡āĻ¨āĻ•āĻŋāĻ¨āĻ¸āĻāĻ•ā§āĻ¸. āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ JenkinsX āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ¨ āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻĒāĻ¨āĻŋ jx addons āĻ¸āĻš Flagger āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¤āĻžāĻāĻ¤ā§‡āĻ° āĻ•āĻžāĻœ āĻāĻŦāĻ‚ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡ āĻ“āĻ¯āĻŧā§‡āĻ­ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ. āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻŸāĻŋ āĻœāĻŋāĻ•ā§‡āĻ‡, āĻ‡āĻ•ā§‡āĻāĻ¸, āĻāĻŦāĻ‚ āĻŦā§‡āĻ¯āĻŧāĻžāĻ° āĻŽā§‡āĻŸāĻžāĻ˛ā§‡ āĻ•āĻŋāĻ‰āĻŦāĻŋāĻāĻĄāĻāĻŽā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡āĨ¤

āĻ¯āĻĻāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻžāĻ›ā§‡ āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ° āĻ‰āĻ¨ā§āĻ¨āĻ¤ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĨāĻžāĻ•ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ…āĻ¨ā§āĻ—ā§āĻ°āĻš āĻ•āĻ°ā§‡ GitHub-āĻ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻŦāĻž PR āĻœāĻŽāĻž āĻĻāĻŋāĻ¨ āĻ¸ā§āĻŸā§‡āĻĢāĻžāĻ¨āĻĒā§āĻ°ā§‹āĻĄāĻžāĻ¨/āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—āĻžāĻ°. āĻ…āĻŦāĻĻāĻžāĻ¨ āĻ¸ā§āĻŦāĻžāĻ—āĻ¤ āĻŦā§‡āĻļā§€!

ĐĄĐŋĐ°ŅĐ¸ĐąĐž āĻ°ā§‡ āĻ¸āĻžāĻ‚.

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨