k8s-flagger
所属分类:微服务
开发工具:Python
文件大小:7KB
下载次数:0
上传日期:2023-04-20 11:29:51
上 传 者:
sh-1993
说明: k8s标记器,,
(k8s-flagger,,)
文件列表:
Dockerfile (200, 2023-04-20)
app.py (177, 2023-04-20)
k8s_cluster (0, 2023-04-20)
k8s_cluster\canary.yaml (1607, 2023-04-20)
k8s_cluster\custom_404_metrics.yaml (780, 2023-04-20)
k8s_cluster\deployment.yaml (656, 2023-04-20)
k8s_cluster\gateway.yaml (274, 2023-04-20)
k8s_cluster\tester_app.yaml (1797, 2023-04-20)
k8s_cluster\virtualservice.yaml (328, 2023-04-20)
requirements.txt (19, 2023-04-20)
test_hello.py (391, 2023-04-20)
# k8s-flagger
### Configure cluster
#### Install istio
```BASH
curl -L https://istio.io/downloadIstio | sh
cd istio-1.16.1
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo -y
```
#### Install prometheus
```BASH
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.10/samples/addons/prometheus.yaml
```
#### Install Flagger
```BASH
helm repo add flagger https://flagger.app
kubectl apply -f https://raw.githubusercontent.com/fluxcd/flagger/main/artifacts/flagger/crd.yaml
helm upgrade -i flagger flagger/flagger --namespace=istio-system --set crd.create=false --set meshProvider=istio --set metricsServer=http://prometheus:9090
```
#### Install Grafana
```BASH
helm upgrade -i flagger-grafana flagger/grafana --namespace=istio-system --set url=http://prometheus.istio-system:9090 --set user=admin --set password=change-me
kubectl patch svc flagger-grafana -n istio-system -p '{"spec": {"type": "NodePort"}}'
kubectl -n istio-system get svc
```
#### Install Kiali
```BASH
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.16/samples/addons/kiali.yaml
kubectl patch svc kiali -n istio-system -p '{"spec": {"type": "NodePort"}}'
```
#### Name pod from istio-system namespaces
flagger-5c8658c***-jplrh
flagger-grafana-6594969455-lhwbk
istio-egressgateway-56b4ddcfd6-9n5zb
istio-ingressgateway-76cd944566-g2d4k
istiod-56b77cf5d6-b59xs
kiali-748d5cdbfc-blcsp
prometheus-69f7f4d689-cvrcx
### Deploy app
```BASH
kubectl create ns test
kubectl label namespace test istio-injection=enabled
```
```BASH
kubectl apply -f https://raw.githubusercontent.com/geksogen/k8s-flagger/master/k8s_cluster/deployment.yaml
```
#### New window
```BASH
kubectl -n test run -i -t nginx --rm=true --image=nginx -- bash
```
```BASH
curl -X GET http://appdeploy:5000
curl -X GET http://appdeploy:5000/return_version
```
#### Patch istio-ingressgateway to nodeport
```BASH
kubectl patch svc -n istio-system istio-ingressgateway --type='json' -p '[{"op":"replace","path":"/spec/type","value":"NodePort"}]'
kubectl apply -f https://raw.githubusercontent.com/geksogen/k8s-flagger/master/k8s_cluster/gateway.yaml
kubectl apply -f https://raw.githubusercontent.com/geksogen/k8s-flagger/master/k8s_cluster/virtualservice.yaml
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}') && echo $INGRESS_PORT
```
Проверяем ответ от приложения через istio-ingressgateway
```BASH
curl 217.28.220.13:$INGRESS_PORT
curl 217.28.220.13:$INGRESS_PORT/return_version
for i in `seq 10000`; do curl -XGET http://217.28.220.13:$INGRESS_PORT/return_version;\n; sleep 0.1; done
watch -n 1 curl -o /dev/null -s -w %{http_code} http://217.28.220.13:$INGRESS_PORT/return_version
```
Смотрим в Kiali граф трафика
#### Deploy the load testing service to generate traffic during the canary analysis
```BASH
helm upgrade -i flagger-loadtester flagger/loadtester --namespace=test
```
#### Before creating canary we need to delete the virtual service, as it will now be managed by the flagger from the above canary.yaml file
```BASH
kubectl -n test delete -f https://raw.githubusercontent.com/geksogen/k8s-flagger/master/k8s_cluster/virtualservice.yaml
```
#### Create 404 metrix
```BASH
kubectl apply -f https://raw.githubusercontent.com/geksogen/k8s-flagger/master/k8s_cluster/custom_404_metrics.yaml
```
#### Create Canary
```BASH
kubectl apply -f https://raw.githubusercontent.com/geksogen/k8s-flagger/master/k8s_cluster/canary.yaml
```
#### Run traffic to app
```BASH
for i in `seq 10000`; do curl -XGET http://217.28.220.13:$INGRESS_PORT/return_version;\; sleep 0.1; done
watch -n 1 curl -o /dev/null -s -w %{http_code} curl -XGET http://217.28.220.13:$INGRESS_PORT/return_version
```
#### See canary status
```BASH
watch kubectl get canaries --all-namespaces
```
#### Change image tag
```BASH
kubectl -n test set image deployment/appdeploy appdeploy=geksogen/k8s-flagger:47
```
#### Result
- [x] Определение изменении в namespace (deployment spec, secrets or configmaps changes)
- [ ] Проверка жизнеспособности Cannary pods
- [ ] Тестирование Cannary pods
- [ ] Если тестирование с ошибкои останавливаем процесс
- [ ] Тестирование успешно, гранулируем трафик
- [ ] Если тестирование с ошибкои останавливаем процесс
- [ ] Переключение трафика на Cannary
- [ ] Удаление ресурсов прежнеи версии
- [ ] Cannary становится Latest версиеи
#### Clear resource
```BASH
# Delete app
kubectl -n test delete all -l app=flask
kubectl -n test delete gateway appdeploy-gateway
kubectl -n test delete virtualservice appdeploy
helm -n test uninstall flagger-loadtester
kubectl delete ns test
# Delete istio
cd
export PATH=$PWD/bin:$PATH
istioctl x uninstall --purge
kubectl delete namespace istio-system
```
近期下载者:
相关文件:
收藏者: