āĻ¸āĻŋāĻĄāĻŋ āĻāĻāĻāĻŋ āĻāĻ¨ā§āĻāĻžāĻ°āĻĒā§āĻ°āĻžāĻāĻ āĻ¸āĻĢā§āĻāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ¸ā§āĻŦā§āĻā§āĻ¤ āĻāĻŦāĻ āĻāĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻˇā§āĻ āĻŋāĻ¤ CI āĻ¨ā§āĻ¤āĻŋāĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻžāĻā§āĻ¤āĻŋāĻ āĻŦāĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛āĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻ¸āĻŋāĻĄāĻŋ āĻāĻāĻ¨āĻ āĻŦā§āĻļ āĻŦāĻŋāĻ°āĻ˛, āĻ¸āĻŽā§āĻāĻŦāĻ¤ āĻŦā§āĻ¯āĻŦāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻāĻāĻŋāĻ˛āĻ¤āĻžāĻ° āĻāĻžāĻ°āĻŖā§ āĻāĻŦāĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻĒā§āĻ°āĻžāĻĒā§āĻ¯āĻ¤āĻžāĻā§ āĻĒā§āĻ°āĻāĻžāĻŦāĻŋāĻ¤ āĻāĻ°ā§ āĻŦā§āĻ¯āĻ°ā§āĻĨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻāĻ¯āĻŧā§āĻ° āĻāĻžāĻ°āĻŖā§āĨ¤
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 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻāĻāĻŋāĻ¤āĨ¤ āĻāĻĒāĻ¨āĻžāĻ° āĻšā§āĻ˛āĻŽ āĻāĻ¨āĻ¸ā§āĻāĻ˛ā§āĻļāĻ¨ āĻ¸ā§āĻ°āĻā§āĻˇāĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°āĻ āĻ¤āĻĨā§āĻ¯ā§āĻ° āĻāĻ¨ā§āĻ¯, āĻĻā§āĻā§āĻ¨
āĻ¸ā§āĻāĻŋāĻāĻ¸ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°ā§āĻ¨:
kubectl -n istio-system get svc
āĻāĻ¯āĻŧā§āĻ āĻ¸ā§āĻā§āĻ¨ā§āĻĄ āĻĒāĻ°ā§, GCP āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻŦāĻšāĻŋāĻ°āĻžāĻāĻ¤ IP āĻ āĻŋāĻāĻžāĻ¨āĻž āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻž āĻāĻāĻŋāĻ¤ istio-ingressgateway
.
āĻāĻ¸ā§āĻāĻŋāĻ āĻāĻ¨āĻā§āĻ°ā§āĻ¸ āĻā§āĻāĻāĻ¯āĻŧā§ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻāĻāĻāĻŋ āĻ¨āĻžāĻŽā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻāĻāĻĒāĻŋ āĻ āĻŋāĻāĻžāĻ¨āĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨ istio-gateway
Istio āĻā§āĻāĻāĻ¯āĻŧā§āĻ° 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 āĻāĻžāĻĄāĻŧāĻž āĻāĻ¨ā§āĻāĻžāĻ°āĻ¨ā§āĻā§ āĻā§āĻ¨ā§ āĻā§āĻĒāĻžāĻĻāĻ¨ āĻŦā§āĻ¯āĻŦāĻ¸ā§āĻĨāĻžāĻ° āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°āĻž āĻāĻāĻŋāĻ¤ āĻ¨āĻ¯āĻŧāĨ¤ āĻ¸āĻžāĻ°ā§āĻ-āĻŽā§āĻ¯āĻžāĻ¨ā§āĻāĻžāĻ°, āĻā§āĻ˛āĻžāĻāĻĄāĻĄāĻŋāĻāĻ¨āĻāĻ¸ āĻāĻŦāĻ āĻ˛ā§āĻāĻ¸ āĻāĻ¨āĻā§āĻ°āĻŋāĻĒā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻ¸ā§āĻāĻŋāĻ āĻāĻ¨āĻā§āĻ°ā§āĻ¸ āĻā§āĻāĻāĻ¯āĻŧā§ āĻ¸ā§āĻ°āĻā§āĻˇāĻŋāĻ¤ āĻāĻ°āĻ¤ā§, āĻ
āĻ¨ā§āĻā§āĻ°āĻš āĻāĻ°ā§ āĻĒāĻĄāĻŧā§āĻ¨
āĻĢā§āĻ˛ā§āĻ¯āĻžāĻāĻžāĻ° āĻāĻ¨āĻ¸ā§āĻāĻ˛ā§āĻļāĻ¨
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 āĻā§āĻˇāĻŽāĻ¤āĻž āĻ¯ā§āĻ āĻāĻ°ā§ āĻāĻāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻž
āĻĢā§āĻ˛ā§āĻ¯āĻžāĻāĻžāĻ° āĻ¯ā§āĻā§āĻ¨ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻ¸āĻŋāĻāĻ/āĻ¸āĻŋāĻĄāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻŽāĻā§āĻāĻ¸ā§āĻ¯āĻĒā§āĻ°ā§āĻŖ, āĻāĻŦāĻ āĻā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻ¸āĻšāĻā§āĻ āĻāĻ° āĻ¸āĻžāĻĨā§ āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§
āĻĢā§āĻ˛ā§āĻ¯āĻžāĻāĻžāĻ° āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤
āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻžāĻā§ āĻĢā§āĻ˛ā§āĻ¯āĻžāĻāĻžāĻ° āĻāĻ¨ā§āĻ¨āĻ¤ āĻāĻ°āĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĨāĻžāĻā§, āĻ¤āĻžāĻšāĻ˛ā§ āĻ
āĻ¨ā§āĻā§āĻ°āĻš āĻāĻ°ā§ GitHub-āĻ āĻāĻāĻāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻŦāĻž PR āĻāĻŽāĻž āĻĻāĻŋāĻ¨
ĐĄĐŋĐ°ŅийО
āĻāĻ¤ā§āĻ¸: www.habr.com