แฉแแแ แแแแแแแงแแแแแ Gitlab CI-แก แแ แกแแฎแแแแซแฆแแแแแแแก GitOps-แก, แ แแแ แแแแแแฎแแ แชแแแแแ แแ แแแแแแแงแแแแ Canary-แแก แแแแแแแแแ Kubernetes-แจแ
แกแขแแขแแแแ แแ แกแแ แแแแแ:
- (แฒแก แแ แขแแแแ)
แแแแแ แแก แแแแแแแแแ ArgoCI-แแก แแแแแงแแแแแแ - แแแแแ แแก แแแแแแแแแ แแกแขแแแก แแแแแงแแแแแแ
- แแแแแ แแก แแแแแแแแแ Jenkins-X Istio Flagger-แแก แแแแแงแแแแแแ
แฉแแแ แจแแแแกแ แฃแแแแ Canary แแแแแแแแแแก แฎแแแแ GitOps-แแก แแแจแแแแแแ แแ แจแแแฅแแแแ/แจแแชแแแแ Kubernetes-แแก แซแแ แแแแ แ แแกแฃแ แกแแแก. แแก แกแขแแขแแ แซแแ แแแแแแ แแแชแแแแแกแแแแกแแ แแแแแฃแแแแแแ แแฃ แ แแแแ แแฃแจแแแแก แแแแแแแแแ Kubernetes Canary-แจแ, แ แแแแแ แแ แกแแแแแก แแแขแแแแขแแแแชแแแก แฃแคแ แ แแคแแฅแขแฃแ แ แแแแแแแแ, แ แแแแแแกแแช แแแแแแฎแแแแแ แจแแแแแ แกแขแแขแแแแจแ.
แแแแแ แแก แแแแแแแแแ
แแแแแ แแก แกแขแ แแขแแแแแ, แแแแแฎแแแแแแ แแแ แแแแแ แแแแแแงแแแแแ แแฎแแแแ แแแแฎแแแ แแแแแแ แฅแแแฏแแฃแคแแ. แแแแแขแแ แแแแแก, แแฃแ แแแแแก แแแแแชแแแแแแก, แแแฅแแแแแฃแ แ แขแแกแขแแ แแแแก แแ แกแฎแแ แแแแแฎแแแฃแ แแแแก แแ แฎแแแแก แแแจแแแแแแ, แแแแแจแแแแ แขแแกแขแแ แแแแแแ แฎแแแแ แงแแแแ แแแแฎแแแ แแแแแกแแแแก แแแแแฅแแแงแแแแแแแ.
Kubernetes Deployment (แแแซแ แแแ แแแแแฎแแแแ)
Kubernetes Deployment-แแก แแแแฃแแแกแฎแแแแ แกแขแ แแขแแแแ แแ แแก แแแซแ แแแ-แแแแแฎแแแแ, แกแแแแช แแแแแกแแฎแฃแแแแแแแก แแฎแแแ แแแ แกแแแแแ แแฎแกแแแแ แแแแแแแก แแแ แแแแฃแแ แ แแแแแแแแ. แแฃ แแกแแแ แจแแแฅแแแ แฃแแ แแแแแแแ, แกแฃแ แแแแแแก แซแแแแ แแแ แกแแแแแก แแฅแแแ แแแแแแแ แฌแงแแแแ แแ แแแ แแแแแฃแ แแ แแฅแแแแแ แแฎแแแ แ แแแแแแ.
GitOps
แฉแแแ แแแงแแแแแ GitOps แแ แแแแแแแแจแ, แ แแแแแ แฉแแแ:
- Git-แแก แแแแแงแแแแแ, แ แแแแ แช แญแแจแแแ แแขแแแแก แแ แแ แฌแงแแ แ
- แฉแแแ แแแงแแแแแ Git แแแแ แแชแแแแก แแแแแแกแ แแ แแแแแแแแแแกแแแแก (แแ แแ แแก แกแแญแแ แ แกแฎแแ แแ แซแแแแแแแ, แแแ แแ git tag / แจแแ แฌแงแแ)
แแแแแแแแ
แแแแฆแแ แแแ แแ แแ แแฅแขแแแ - แแฅแแแแแ แแ แแ แกแแชแแแ แแแแแแแชแแแก แแแแแกแแแแก แแ แแ แแ แแแคแ แแกแขแ แฃแฅแขแฃแ แแกแแแแก.
แแแแแชแฎแแแแก แกแแชแแแ
แแก แแ แแก แซแแแแแ แแแ แขแแแ Python+Flask API, แ แแแแแแช แแแ แฃแแแแก แแแกแฃแฎแก JSON-แแก แกแแฎแแ. แฉแแแ แแแแจแแแแแ แแแแแขแก GitlabCI-แแก แกแแจแฃแแแแแแ แแ แจแแแแแก แแแแแแแงแแแแแ Gitlab แ แแแกแขแ แจแ. แ แแแกแขแ แจแ แแแแฅแแก แแ แ แแแแกแฎแแแแแแฃแแ แแแแแจแแแแแก แแแ แกแแ:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
แแแ แจแแ แแก แแ แแแแแ แแ แแแแกแฎแแแแแแแ แแแแ แฃแแแแฃแแ JSON แคแแแแแก แชแแแแแแแ. แฉแแแ แแแงแแแแแ แแ แแแแแแแชแแแก แแแแกแแแแก, แ แแ แ แแช แจแแแซแแแแ แแแ แขแแแแ แแแแฃแแแฃแ แแ แฌแแ แแแแแแแแแแ, แ แแแแ แแแ แกแแแกแแแ แแแแฅแแก แแแแฃแแแแแชแแ.
แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แกแแชแแแ
แแ แขแฃแ แจแ แฉแแแ แแแแแแแแแกแแแ GitlabCI-แแก แแแจแแแแแแ Kubernetes-แจแ, .gitlab-ci.yml
แแกแแแแ:
image: traherom/kustomize-docker
before_script:
- printenv
- kubectl version
stages:
- deploy
deploy test:
stage: deploy
before_script:
- echo $KUBECONFIG
script:
- kubectl get all
- kubectl apply -f i/k8s
only:
- master
แแแแแ แแแกแแจแแแแแ แแแแญแแ แแแแแ แแแแกแขแแ แ, แจแแแแซแแแแ แแแแแแงแแแแ Gcloud:
gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b
gcloud compute firewall-rules create incoming-80 --allow tcp:80
แฉแแแแแแ แแญแแ แแแแแ KUBECONFIG
GitlabCI-แจแ, แ แแแแแแช แจแแแชแแแก แฌแแแแแแก แแแแคแแแฃแ แแชแแแก kubectl
แแฅแแแแก แแแแกแขแแ แก.
แจแแแแซแแแแ แฌแแแแแแฎแแ, แแฃ แ แแแแ แฃแแแ แแแแฆแแ แกแแ แแแคแแแแขแแแ แแแแกแขแแ แแกแแแแก (Gcloud)
แแแคแ แแกแขแ แฃแฅแขแฃแ แ แแแแแ
แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แกแแชแแแจแ แแแแฅแแก แกแแ แแแกแ:
apiVersion: v1
kind: Service
metadata:
labels:
id: app
name: app
spec:
ports:
- port: 80
protocol: TCP
targetPort: 5000
selector:
id: app
type: LoadBalancer
แแ แแแแแแแแแ deploy.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
replicas: 10
selector:
matchLabels:
id: app
type: main
template:
metadata:
labels:
id: app
type: main
spec:
containers:
- image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
name: app
resources:
limits:
cpu: 100m
memory: 100Mi
แแ แแแแแ แแ แแ แแแแแแแแแ deploy-canary.yaml
:
kind: Deployment
metadata:
name: app-canary
spec:
replicas: 0
selector:
matchLabels:
id: app
type: canary
template:
metadata:
labels:
id: app
type: canary
spec:
containers:
- image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
name: app
resources:
limits:
cpu: 100m
memory: 100Mi
แแแแแแแแแกแฌแแแแ, แ แแ แแแแแแแชแแแก แแแแแแแแแแก แฏแแ แแ แแฅแแก แ แแแแ แ แแแแแแ แแแแกแแแฆแแ แฃแแ.
แแแ แแแแแแ แแแแแแแแแแก แจแแกแ แฃแแแแ
แกแแฌแงแแกแ แแแแแแแแแแก แแแกแแฌแงแแแแ, แจแแแแซแแแแ GitlabCI แแแแกแแแแแแก แฎแแแแ แแแจแแแแ แแแแแแ แคแแแแแแแ. แฒแแแก แจแแแแแ kubectl
แฃแแแ แแแแแแแแแก แจแแแแแแ:
แฒฉแแแ แแฎแแแแแ app
แแแแแแแแแ 10 แ แแแแแแแ แแ app-canary 0-แแ. แแกแแแ แแ แแก LoadBalancer, แกแแแแแแแช แจแแแแแซแแแ แฌแแแแแ. curl
แแแ แ IP-แแก แกแแจแฃแแแแแแ:
while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done
แฉแแแ แแฎแแแแแ, แ แแ แฉแแแแ แกแแขแแกแขแ แแแแแแแชแแ แแแ แฃแแแแก แแฎแแแแ "v1".
แแแแแ แแก แแแแแแแแแแก แจแแกแ แฃแแแแ
แแแแแฏแ 1: แแแแแฃแจแแแ แแฎแแแ แแแ แกแแ แแแแแแ แแ แแแแฎแแแ แแแแแกแแแแก
แฉแแแ แแแแแงแแแแ แแกแแแแแก แ แแแแแแแแ 1-แแ deploy-canary.yaml แคแแแแจแ แแ แแฎแแแ แแแ แกแแแก แกแฃแ แแแจแ:
kind: Deployment
metadata:
name: app-canary
spec:
replicas: 1
selector:
matchLabels:
id: app
type: canary
template:
metadata:
labels:
id: app
type: canary
spec:
containers:
- image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
name: app
resources:
limits:
cpu: 100m
memory: 100Mi
แคแแแแจแ deploy.yaml
แฉแแแ แจแแแชแแแแแ แ แแแแแแแแแก แ แแแแแแแแ 9-แแแ:
kind: Deployment
metadata:
name: app
spec:
replicas: 9
selector:
matchLabels:
id: app
...
แฉแแแ แแแฎแแแแ แแ แชแแแแแแแแแก แกแแชแแแจแ, แกแแแแแแแช แแแแฌแงแแแ แแแแแแแแแ (GitlabCI-แแก แแแจแแแแแแ) แแ แแแแฎแแแ แจแแแแแก:
แฉแแแแ แกแแ แแแกแ แแแฃแแแแแแก แแ แแแ แแแแแแแแแแแ, แ แแแแแ แแ แแแแก แแฅแแก แแแแแแแชแแแก แแแแแ แฉแแแแแ. Kubernetes-แแก แแแแฃแแแกแฎแแแแ แ แแแแแแแแแชแแแก แแแแ, แฉแแแ แฃแแแ แแแแฎแแ แแแแกแฎแแแแแแฃแแ แแแกแฃแฎแแแ แแแแฎแแแแแก ~10%-แแ:
แฉแแแแ แแแแแแแชแแแก แแแแแแแแแแแ แแแแแแแ แแแแ (GitOps, แแฆแแแฃแแ Git-แแแ, แ แแแแ แช แกแแแแ แแแแก แแ แแ แฌแงแแ แ) แแ แแก แแ แ แแแแแแแแแแก แแ แกแแแแแ แแฅแขแแฃแ แ แ แแแแแแแแแ, แแ แแ แแแแแแฃแแ แแแ แกแแแกแแแแก.
แแแแฎแแแ แแแแแแ ~10% แแชแแแแ แแฎแแ แแแ แกแแแก แแ แฃแแแแแแแ แแแแฌแแแแก แแแก. แแฎแแ แแ แแ แจแแแแแฌแแแ แจแแชแแแแแแ แแฃแ แแแแแแจแ แแ แแแแแขแแ แแแแแก แแแแแชแแแแแจแ, แ แแแ แแแแแแ แแ แแแแแแแแ.
แแแแแฏแ 2: แแแแแฃแจแแแ แแฎแแแ แแแ แกแแ แงแแแแ แแแแฎแแแ แแแแแกแแแแก
แฉแแแ แแแแแแฌแงแแแขแแ, แ แแ แงแแแแแคแแ แแ แแแ แแแ แฉแแแแ แ แแ แแฎแแ แแฎแแแ แแแ แกแแ แงแแแแ แแแแฎแแแ แแแแแกแแแแก แฃแแแ แแแแแแ แชแแแแ. แแแแกแแแแแก แฉแแแ แฃแแ แแแแ แแแแฎแแแแ deploy.yaml
แกแฃแ แแแแก แแฎแแแ แแแ แกแแแก แแแงแแแแแ แแ แ แแแแแแแแแก แ แแแแแแแแ แฃแแ แแก 10. In deploy-canary.yaml
แฉแแแ แแแแแแ แฃแแแ แแกแแแแแก แ แแแแแแแแ 0-แแ. แแแแแแแแแแก แจแแแแแ แจแแแแแ แแฅแแแแ แจแแแแแแ:
แจแแฏแแแแแ
แฉแแแแแแก, แแ แแแแ แแแแแแแแแแก แฎแแแแ แแแจแแแแ แแแฎแแแ แแแ แแแแก แแแแแแแจแ, แแฃ แ แแแแแแแ แแแ แขแแแแ แจแแแซแแแแ แแแกแ แแแแคแแแฃแ แแชแแ k8s-แแก แแแแแงแแแแแแ. แแแแแแแแ Kubernetes แแแซแแแแ แกแแจแฃแแแแแแก แแแแแแฎแแแ แงแแแแแคแแ แ API-แแก แกแแจแฃแแแแแแ, แแ แแแแแฏแแแแก แแแขแแแแขแแแแชแแ แจแแกแแซแแแแแแแ แกแแ แแแขแแแแก แกแแจแฃแแแแแแ.
แแแแแ แแ แแ แ แแ, แ แแช แฃแแแ แแแแฎแแ แชแแแแแแก, แแ แแก แขแแกแขแแ แแก แจแแกแแแแก แฌแแ แขแแแ (LoadBalancer แแ Via Ingress), แ แแแแแก แแแจแแแแแแแแช แจแแกแแซแแแแแแแ แแฎแแแแ แแฎแแแ แแแ แกแแแก แฌแแแแแ. แแแกแ แแแแแงแแแแแ แจแแกแแซแแแแแแแ แฎแแแแ แแแแแแแแแ แแแแกแแแแก.
แแแแแแแ แกแขแแขแแแแจแ แฉแแแ แแแแแแฎแแแแแ แกแฎแแ แแแขแแแแขแแแแ แแแฃแ แแแแแฌแงแแแขแแแแแแแก, แ แแแแแแแช แแฎแแ แชแแแแแแแ แฉแแแแ แแแแแแแแฃแแแก แฃแแแขแแกแแแแก.
แแกแแแ แฌแแแแแแฎแแ แกแฎแแ แกแขแแขแแแแ แฉแแแแก แแแแแแ:
แ แแก แแแฐแงแแ แแแแ แแชแแ ClickHouse-แแแ แแแขแแ แแแแชแแแก แแแ แแจแ ClickHouse-แจแ แแแขแแ แแแแชแแแก แแฅแแแ? แแแแแแแฃแ แ แแแแฃแแแแแก แแแแแ Nginx-แแกแแแแก nxs-build-tools-แแก แแแแแฎแแแแ - แแกแแกแขแแแขแ deb แแ rpm แแแแแขแแแแก แแจแแแแแแแแแจแ Hashicorp-แแก แแแแกแฃแแแก Kubernetes แแแขแแ แแแแชแแแก แจแแกแแแแแ แ แ แฃแแแ แจแแแแแฅแแแแก Csync2 แฃแขแแแแขแแก แแแแแงแแแแแแกแแก Telegram-แแก แแแขแ Redmine-แแกแแแแก. แ แแแแ แแแแแแแ แขแแแแ แชแฎแแแ แแแ แกแแแฃแแแ แ แแแแแกแแแแก แแ แกแฎแแแแแกแแแแก
แฌแงแแ แ: www.habr.com