Microservice Architecture
Π’Π΅ΠΌΠ°: Service mesh Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Istio.
ΠΠ°Π΄Π°Π½ΠΈΠ΅ β4:
Π Π°Π·Π²Π΅ΡΠ½ΡΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Π΄Π²Π΅ Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π½Π°ΡΡΡΠΎΠΈΡΡ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΡ ΡΡΠ°ΡΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ
Π¦Π΅Π»Ρ:
- Π Π°Π·Π²Π΅ΡΠ½ΡΡΡ Minikube
- Π Π°Π·Π²Π΅ΡΠ½ΡΡΡ Istio c Ingress gateway
- Π Π°Π·Π²Π΅ΡΠ½ΡΡΡ Π΄Π²Π΅ Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Istio
- ΠΠ°ΡΡΡΠΎΠΈΡΡ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΡ ΡΡΠ°ΡΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΡΡΠΈΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ Gateway 50% Π½Π° 50%
- Π‘Π΄Π΅Π»Π°ΡΡ ΡΠ½ΠΈΠΌΠΎΠΊ ΡΠΊΡΠ°Π½Π° Ρ ΠΊΠ°ΡΡΠΎΠΉ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π² Kiali Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π²ΡΠ·ΠΎΠ²Π° Π΄Π²ΡΡ Π²Π΅ΡΡΠΈΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ°
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΊ Π·Π°Π΄Π°Π½ΠΈΡ ΠΈ Π΅Π³ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ https://github.com/izhigalko/otus-homework-istio
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ ΠΏΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ:
ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
- Minikube 1.17.1
- Kubectl 1.20.2
- Istioctl 1.9.0 (brew install istioctl)
- Heml 3.5.2
ΠΠ°ΠΏΡΡΠΊ Kubernetes
minikube start --cpus=4 --memory=8g --vm-driver=hyperkit --cni=flannel --kubernetes-version="v1.19.0" --extra-config=apiserver.enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,PodPreset --extra-config=apiserver.authorization-mode=Node,RBAC
Π‘ΠΎΠ·Π΄Π°ΡΡ Π½Π΅ΠΉΠΌΡΠΏΠ΅ΠΉΡΡ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ²:
kubectl apply -f namespaces.yaml
Π Π°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ Jaeger
Jaeger - ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ. ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Istio, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ: sidecar-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, gateway, ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² ΡΠΈΡΡΠ΅ΠΌΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ»Π½Π°Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° Π·Π°ΠΏΡΠΎΡΠ°.
helm repo add jaegertracing https://jaegertracing.github.io/helm-charts
helm repo update
helm install --version "2.19.0" -n jaeger-operator -f jaeger/operator-values.yaml jaeger-operator jaegertracing/jaeger-operator
kubectl apply -f jaeger/jaeger.yaml
Π Π°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ Prometheus
Prometheus - ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π°. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡΡ ΠΌΠ΅ΡΡΠΈΠΊΠΈ Service mesh.
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add stable https://charts.helm.sh/stable
helm repo update
helm install --version "13.7.2" -n monitoring -f prometheus/operator-values.yaml prometheus prometheus-community/kube-prometheus-stack
kubectl apply -f prometheus/monitoring-nodeport.yaml
Π Π°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ Istio
Istio - Service mesh ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΎΠ±Π»Π°ΡΠ½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π΅ Envoy.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ, ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡΠΈΠΉ Istio, ΠΈ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ Istio c ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°:
istioctl operator init --watchedNamespaces istio-system --operatorNamespace istio-operator
kubectl apply -f istio/istio.yaml
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Kiali
Kiali - Π΄ΠΎΡΠΊΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Service mesh
helm repo add kiali https://kiali.org/helm-charts
helm repo update
helm install --version "1.29.1" -n kiali-operator kiali-operator kiali/kiali-operator
kubectl apply -f kiali/kiali.yaml
Π Π°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
kubectl apply -f app/my-app.yaml
kubectl apply -f app/istio-settings.yaml
ΠΠ΅Π»Π°Π΅ΠΌ Π·Π°ΠΏΡΠΎΡ ΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
curl $(minikube service my-app --url)
Web-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ²
ΠΡΠΊΡΡΡΡ web-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Jaeger:
minikube service -n jaeger jaeger-query-nodeport
ΠΡΠΊΡΡΡΡ web-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Grafana:
minikube service -n monitoring prometheus-grafana-nodeport
ΠΡΠΊΡΡΡΡ web-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Prometheus:
minikube service -n monitoring prom-prometheus-nodeport
ΠΡΠΊΡΡΡΡ web-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Kiali:
minikube service -n kiali kiali-nodeport