CD เจจเฉเฉฐ เจเฉฑเจ เจเจเจเจฐเจชเฉเจฐเจพเจเจเจผ เจธเฉเจซเจเจตเฉเจ เจฐ เจ เจญเจฟเจเจธ เจตเจเฉเจ เจฎเจพเจจเจคเจพ เจชเฉเจฐเจพเจชเจค เจนเฉ เจ เจคเฉ เจเจน เจธเจฅเจพเจชเจฟเจค CI เจธเจฟเจงเจพเจเจคเจพเจ เจฆเจพ เจเฉฑเจ เจเฉเจฆเจฐเจคเฉ เจตเจฟเจเจพเจธ เจนเฉเฅค เจนเจพเจฒเจพเจเจเจฟ, เจธเฉเจกเฉ เจ เจเฉ เจตเฉ เจฌเจนเฉเจค เจฆเฉเจฐเจฒเฉฑเจญ เจนเฉ, เจธเจผเจพเจเจฆ เจชเฉเจฐเจฌเฉฐเจงเจจ เจฆเฉ เจเฉเฉฐเจเจฒเจคเจพ เจ เจคเฉ เจธเจฟเจธเจเจฎ เจฆเฉ เจเจชเจฒเจฌเจงเจคเจพ เจจเฉเฉฐ เจชเฉเจฐเจญเจพเจตเจฟเจค เจเจฐเจจ เจตเจพเจฒเฉ เจ เจธเจซเจฒ เจคเฉเจจเจพเจคเฉเจเจ เจฆเฉ เจกเจฐ เจเจพเจฐเจจเฅค
Google Kubernetes Engine (GKE) 'เจคเฉ เจซเจฒเฉเจเจฐ เจจเฉเฉฐ เจธเจฅเจพเจชเจค เจเจฐเจจ เจ เจคเฉ เจตเจฐเจคเจฃ เจฒเจ เจนเฉเจ เจพเจ เจเฉฑเจ เจเจฆเจฎ-เจฆเจฐ-เจเจฆเจฎ เจเจพเจเจก เจนเฉเฅค
เจเฉเจฌเจฐเจจเฉเจเจธ เจเจฒเฉฑเจธเจเจฐ เจธเจฅเจพเจชเจค เจเจฐเจจเจพ
เจคเฉเจธเฉเจ 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 Ingress เจเฉเจเจตเฉ เจธเจฅเจพเจชเจค เจเจฐเจจเจพ
เจจเจพเจฎ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจธเจฅเจฟเจฐ IP เจชเจคเจพ เจฌเจฃเจพเจ 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 เจฐเจเจฟเจธเจเจฐเจพเจฐ เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจฆเฉ เจฒเฉเฉ เจนเฉเฅค เจฆเฉ เจ เจฐเจฟเจเจพเจฐเจก เจธเจผเจพเจฎเจฒ เจเจฐเฉ (เจฌเจฆเจฒเฉ example.com
เจคเฉเจนเจพเจกเฉ เจกเฉเจฎเฉเจจ เจฒเจ):
istio.example.com A ${GATEWAY_IP}
*.istio.example.com A ${GATEWAY_IP}
เจชเฉเจธเจผเจเฉ เจเจฐเฉ เจเจฟ DNS เจตเจพเจเจฒเจกเจเจพเจฐเจก เจเฉฐเจฎ เจเจฐ เจฐเจฟเจนเจพ เจนเฉ:
watch host test.istio.example.com
HTTP เจเฉฑเจคเฉ เจธเจฐเจตเจฟเจธ เจฎเฉเจธเจผ เจคเฉเจ เจฌเจพเจนเจฐ เจธเฉเจตเจพเจตเจพเจ เจชเฉเจฐเจฆเจพเจจ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจเจฎ เจเจธเจเฉเจ เจเฉเจเจตเฉ เจฌเจฃเจพเจ:
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 เจคเฉเจ เจฌเจฟเจจเจพเจ เจเฉฐเจเจฐเจจเฉเจ 'เจคเฉ เจธเฉเจตเจพเจตเจพเจ เจชเฉเจฐเจฆเจพเจจ เจจเจนเฉเจ เจเจฐเจจเฉเจเจ เจเจพเจนเฉเจฆเฉเจเจ. เจธเจฐเจเฉเจซเจฟเจเฉเจ-เจชเฉเจฐเจฌเฉฐเจงเจ, CloudDNS เจ
เจคเฉ Let's Encrypt เจจเจพเจฒ เจเจชเจฃเฉ Istio เจชเฉเจฐเจตเฉเจธเจผ เจเฉเจเจตเฉ เจจเฉเฉฐ เจธเฉเจฐเฉฑเจเจฟเจ
เจค เจเจฐเจจ เจฒเจ, เจเจฟเจฐเจชเจพ เจเจฐเจเฉ เจชเฉเฉเจนเฉ
เจซเจฒเฉเจเจฐ เจธเจฅเจพเจชเจจเจพ
GKE Istio เจเจก-เจเจจ เจตเจฟเฉฑเจ Prometheus เจเจฆเจพเจนเจฐเจจ เจธเจผเจพเจฎเจฒ เจจเจนเฉเจ เจนเฉ เจเฉ Istio เจเฉเจฒเฉเจฎเฉเจเจฐเฉ เจธเฉเจตเจพ เจจเฉเฉฐ เจธเจพเจซเจผ เจเจฐเจฆเจพ เจนเฉเฅค เจเจฟเจเจเจเจฟ เจซเจฒเฉเจเจฐ เจเฉเจจเจฐเฉ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจเจฐเจจ เจฒเจ Istio HTTP เจฎเฉเจเฉเจฐเจฟเจเจธ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเจพ เจนเฉ, เจคเฉเจนเจพเจจเฉเฉฐ เจจเจฟเจฎเจจเจฒเจฟเจเจค เจชเฉเจฐเฉเจฎเฉเจฅเฉเจ เจธ เจเฉเจเจซเจฟเจเจฐเฉเจธเจผเจจ เจจเฉเฉฐ เจคเฉเจจเจพเจค เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ, เจเจฟเจตเฉเจ เจเจฟ เจ เจงเจฟเจเจพเจฐเจค Istio เจนเฉเจฒเจฎ เจธเจเฉเจฎเจพ เจฆเฉ เจจเจพเจฒ เจเจเจเจฆเฉ เจนเฉเฅค
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 'เจคเฉ Istio Prometheus เจธเฉเจตเจพ เจจเจพเจฒ เจธเฉฐเจเจพเจฐ เจเจฐ เจธเจเจฆเจพ เจนเฉเฅค
เจซเจฒเฉเจเจฐ เจเฉเจฒ เจเฉเจจเจฐเฉ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจฒเจ เจเฉเจฐเจพเจซเจพเจจเจพ เจกเฉเจธเจผเจฌเฉเจฐเจก เจนเฉเฅค เจจเฉเจฎเจธเจชเฉเจธ เจตเจฟเฉฑเจ 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 เจฒเจพเจเจเจจ เจชเฉฐเจจเฉ 'เจคเฉ เจฐเฉเจกเจพเจเจฐเฉเจเจ เจเจฐเจจเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค
เจซเจฒเฉเจเจฐ เจจเจพเจฒ เจตเฉเฉฑเจฌ เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจจเฉเฉฐ เจคเฉเจจเจพเจค เจเจฐเจจเจพ
เจซเจฒเฉเจเจฐ เจเฉเจฌเจฐเจจเฉเจเจธ เจจเฉเฉฐ เจคเฉเจจเจพเจค เจเจฐเจฆเจพ เจนเฉ เจ เจคเฉ, เจเฉ เจฒเฉเฉ เจนเฉเจตเฉ, เจนเจฐเฉเจเฉฑเจเจฒ เจเจเฉเจธเจเฉเจฒเจฟเฉฐเจ (HPA), เจซเจฟเจฐ เจตเจธเจคเฉเจเจ เจฆเฉ เจเฉฑเจ เจฒเฉเฉ เจฌเจฃเจพเจเจเจฆเจพ เจนเฉ (เจเฉเจฌเจฐเจจเฉเจเจธ เจคเฉเจจเจพเจคเฉเจเจ, เจเจฒเฉฑเจธเจเจฐเจเจเจชเฉ เจธเฉเจตเจพเจตเจพเจ เจ เจคเฉ เจเจธเจเฉเจ เจตเจฐเจเฉเจ เจฒ เจธเฉเจตเจพเจตเจพเจ)เฅค เจเจน เจเจฌเจเฉเจเจ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจจเฉเฉฐ เจธเฉเจตเจพ เจฆเฉ เจเจพเจฒ เจตเจฟเฉฑเจ เจชเฉเจฐเจเจ เจเจฐเจฆเฉ เจนเจจ เจ เจคเฉ เจเฉเจจเจฐเฉ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจ เจคเฉ เจชเฉเจฐเฉเจฎเฉเจธเจผเจจ เจฆเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ เจเจฐเจฆเฉ เจนเจจเฅค
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 เจฌเฉเจจเจคเฉ เจธเจซเจฒเจคเจพ เจฆเจฐ, เจเจธเจค เจฌเฉเจจเจคเฉ เจฆเฉ เจฎเจฟเจเจฆ, เจ เจคเฉ เจชเฉเจก เจธเจฟเจนเจค เจจเฉเฉฐ เจฎเจพเจชเจฆเฉ เจนเฉเจเฅค เจเฉเจชเฉเจเจ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจฆเฉ เจ เจงเจพเจฐ เจคเฉ, เจเฉเจจเจฐเฉ เจจเฉเฉฐ เจ เฉฑเจเฉ เจตเจงเจพเจเจ เจเจพเจ เจธเจฎเจพเจชเจค เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ, เจ เจคเฉ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจฆเฉ เจจเจคเฉเจเฉ เจธเจฒเฉเจ เจตเจฟเฉฑเจ เจชเฉเจฐเจเจพเจธเจผเจฟเจค เจนเฉเฉฐเจฆเฉ เจนเจจเฅค
เจเฉเจจเจฐเฉ เจคเฉเจจเจพเจคเฉ เจเจฆเฉเจ เจธเจผเฉเจฐเฉ เจนเฉเฉฐเจฆเฉ เจนเฉ เจเจฆเฉเจ เจนเฉเจ เจฒเจฟเจเฉเจเจ เจตเจธเจคเฉเจเจ เจตเจฟเฉฑเจเฉเจ เจเฉเจ เจเฉฑเจ เจฌเจฆเจฒเจฆเจพ เจนเฉ:
- PodSpec (เจเฉฐเจเฉเจจเจฐ เจเจฟเฉฑเจคเจฐ, เจเจฎเจพเจเจก, เจชเฉเจฐเจ, env, เจเจฆเจฟ) เจจเฉเฉฐ เจคเฉเจจเจพเจค เจเจฐเฉ
- 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
เจเจฆเฉเจ เจ เจธเจซเจฒ เจเจพเจเจเจพเจ เจฆเฉ เจเจฟเจฃเจคเฉ เจเฉฑเจ เจฅเฉเจฐเฉเจธเจผเจนเฉเจฒเจก เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจเจพเจเจฆเฉ เจนเฉ, เจคเจพเจ เจเจตเจพเจเจพเจ เจจเฉเฉฐ เจชเฉเจฐเจพเจเจฎเจฐเฉ เจเฉเจจเจฒ เจตเฉฑเจฒ เจตเจพเจชเจธ เจญเฉเจเจฟเจ เจเจพเจเจฆเจพ เจนเฉ, เจเฉเจจเจฐเฉ เจจเฉเฉฐ เจเจผเฉเจฐเฉ เจคเฉฑเจ เจธเจเฉเจฒ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ, เจ เจคเฉ เจคเฉเจจเจพเจคเฉ เจจเฉเฉฐ เจ เจธเจซเจฒ เจตเจเฉเจ เจเจฟเฉฐเจจเฉเจนเจฟเจค เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉเฅค
เจเฉเจจเจฐเฉ เจคเจฐเฉเจเฉเจเจ เจ เจคเฉ เจฒเฉเจเฉเจเจธเฉ เจธเจชเจพเจเจ เจเฉเจฌเจฐเจจเฉเจเจธ เจเจตเฉเจเจเจธ เจตเจเฉเจ เจฒเฉเจ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเจจ เจ เจคเฉ เจซเจฒเฉเจเจฐ เจฆเฉเจเจฐเจพ 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 เจตเจฐเจเฉ เจธเฉเจตเจพ เจเจพเจฒ เจจเฉเฉฐ เจเจฒเจพเจเจฃเจพ เจเจเฉเจฎเฉเจเจฟเจ เจฎเฉเจเฉเจฐเจฟเจเจธ, เจฒเฉเจเจธ เจ
เจคเฉ เจฒเฉเจ เจชเฉเจฐเจฆเจพเจจ เจเจฐเฉเจเจพ, เจชเจฐ เจตเจฐเจเจฒเฉเจกเจพเจ เจจเฉเฉฐ เจคเฉเจจเจพเจค เจเจฐเจจเจพ เจ
เจเฉ เจตเฉ เจฌเจพเจนเจฐเฉ เจธเจพเจงเจจเจพเจ 'เจคเฉ เจจเจฟเจฐเจญเจฐ เจเจฐเจฆเจพ เจนเฉเฅค เจซเจฒเฉเจเจฐ เจฆเจพ เจเจฆเฉเจธเจผ เจเจธเจเฉเจ เจธเจฎเจฐเฉฑเจฅเจพเจตเจพเจ เจจเฉเฉฐ เจเฉเฉ เจเฉ เจเจธ เจจเฉเฉฐ เจฌเจฆเจฒเจฃเจพ เจนเฉ
เจซเจฒเฉเจเจฐ เจเฉเจฌเจฐเจจเฉเจเจธ เจฒเจ เจเจฟเจธเฉ เจตเฉ CI/CD เจนเฉฑเจฒ เจฆเฉ เจ
เจจเฉเจเฉเจฒ เจนเฉ, เจ
เจคเฉ เจเฉเจจเจฐเฉ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจจเฉเฉฐ เจเจธเจพเจจเฉ เจจเจพเจฒ เจตเจงเจพเจเจ เจเจพ เจธเจเจฆเจพ เจนเฉ
เจซเจฒเฉเจเจฐ เจธเจฎเจฐเจฅเจฟเจค เจนเฉ
เจเฉเจเจฐ เจคเฉเจนเจพเจกเฉ เจเฉเจฒ เจซเจฒเฉเจเจฐ เจจเฉเฉฐ เจฌเจฟเจนเจคเจฐ เจฌเจฃเจพเจเจฃ เจฒเจ เจธเฉเจเจพเจ
เจนเจจ, เจคเจพเจ เจเจฟเจฐเจชเจพ เจเจฐเจเฉ GitHub 'เจคเฉ เจเฉฑเจ เจฎเฉเฉฑเจฆเจพ เจเจพเจ PR เจฆเจฐเจ เจเจฐเฉ
ะกะฟะฐัะธะฑะพ
เจธเจฐเฉเจค: www.habr.com