แฉแแแ แแแแแแแงแแแแแ k8s-แแก แแจแแแแแฃแ Argo Rollouts-แแก แแแแแแแแแแก แแแแขแ แแแแ แก แแ GitlabCI-แก Canary-แแก แแแแแแแแแแก แแแกแแจแแแแแ Kubernetes-แจแ
แกแขแแขแแแแ แแ แกแแ แแแก
แแแแแ แแก แแแแแแแแแ Kubernetes #1-แจแ: Gitlab CI - (แฒแก แแ แขแแแแ)
- แแแแแ แแก แแแแแแแแแ แแกแขแแแก แแแแแงแแแแแแ
- แแแแแ แแก แแแแแแแแแ Jenkins-X Istio Flagger-แแก แแแแแงแแแแแแ
แแแแแ แแก แแแแแแแแแ
แแแแแแแแแแแ, แ แแ แฌแแแแแแฎแแแ
Argo Rollouts
Argo Rollouts แแ แแก Kubernetes-แแก แแจแแแแแฃแ แ แแแแแแแแแแก แแแแขแ แแแแ แ. แแก แฃแแ แฃแแแแแงแแคแก CRD (Custom Resource Definition) Kubernetes-แแกแแแแก. แแแกแ แฌแงแแแแแแ, แฉแแแ แจแแแแแซแแแ แแแแแแแงแแแแ แแฎแแแ แแ แแแฃแแ: Rollout
, แ แแแแแแช แแแ แแแแก แแฃแ แฏ-แแฌแแแแ แแ แแแแแ แแก แแแแแแแแแแก แกแฎแแแแแกแฎแแ แแแแคแแแฃแ แแชแแแก แแแ แแแแขแแแแ.
Argo Rollouts แแแแขแ แแแแ แ, แ แแแแแแช แแแแแแงแแแแแ แแแ แแแแฃแแ แ แแกแฃแ แกแแ
Rollout,
แแซแแแแ แแแแแขแแแแ แแแแแแแแแแก แกแขแ แแขแแแแแแก, แ แแแแ แแชแแ แแฃแ แฏแ-แแฌแแแแ แแ แแแแแ แแก แแฃแแแ แแแขแแกแแแแก. แ แแกแฃแ แกแRollout
แฃแแ แฃแแแแแงแแคแก แคแฃแแฅแชแแแก แแฅแแแแแแแแขแกDeployment
แแฎแแแแ แแแแแขแแแแแ แแแแแแแแแแก แกแขแ แแขแแแแแแแ.
แ แแกแฃแ แกแDeployments
แแฅแแก แแแแแแแแแแก แแ แ แกแขแ แแขแแแแ:RollingUpdate
ะธRecreate
. แแแฃแฎแแแแแแ แแแแกแ, แ แแ แแก แกแขแ แแขแแแแแแ แจแแกแแคแแ แแกแแ แฃแแแขแแก แจแแแแฎแแแแแจแ, แกแแ แแแ แแแแ แซแแแแแ แแแแ แแแกแจแขแแแแก แแแแแแแแแแกแแแแก, แแแแแแงแแแแแ แแแแแขแแแแแ แกแขแ แแขแแแแแแ, แ แแแแ แแชแแ แแฃแ แฏแ-แแฌแแแแ แแ แแแแแ แแก, แ แแแแแแแช แแแฃแฌแแแแแแแแ Deployment แแแแขแ แแแแ แจแ. Kubernetes-แจแ แแ แกแขแ แแขแแแแแแแก แแแแแกแแงแแแแแแแ, แแแแฎแแแ แแแแแแก แฃแแแ แแแแฌแแ แแ แกแแ แแแขแแแ แแแแแแแแ Deployments-แแก แแแแแ. Argo Rollouts Controller แแแแแแก แแ แกแขแ แแขแแแแแแก, แ แแแแ แช แแแ แขแแ, แแแแแแ แแชแแฃแ, แแแแคแแแฃแ แแ แแแแ แแแ แแแแขแ แแแก.
https://argoproj.github.io/argo-rollouts
แแกแแแ แแ แแก Argo CI, แ แแแแแแช แฃแแ แฃแแแแแงแแคแก แแแกแแฎแแ แฎแแแแ แแแ แแแขแแ แคแแแกแก Rollouts-แแแ แแแแแกแแงแแแแแแแ, แแแแก แจแแแแแ แกแขแแขแแแจแ แแแแแแฎแแแแแ.
Argo Rollouts-แแก แแแกแขแแแแชแแ
แกแแ แแแ แแก แแฎแแ แ
kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml
แฉแแแแก แแแคแ แแกแขแ แฃแฅแขแฃแ แฃแ แขแฃแ แแแแจแ (แแฎแแแแ แฅแแแแแ) แฉแแแ แฃแแแ แแแแแแแขแแ install.yaml แ แแแแ แช i/k8s/argo-rollouts/install.yaml. แแ แแแแ GitlabCI แแแแแแกแขแแแแ แแแก แแแก แแแแกแขแแ แจแ.
แแแแแแขแแก แแฎแแ แ (kubectl แแแแฃแแ)
แแแแแชแฎแแแแก แแแแแแแแ
แแแ แแ แแ แแฅแขแแแแ แแแแแแแชแแแก แแแแแกแ แแ แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แชแแแแ แกแแชแแแ.
แกแแชแแแ แแแแแชแฎแแแแกแแแแก
Kim Wuestkamp/k8s-deployment-example-app
แแก แแ แแก แซแแแแแ แแแ แขแแแ 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-dockerbefore_script:
- printenv
- kubectl versionstages:
- deploydeploy 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
แแฅแแแแก แแแแกแขแแ แก.
แแแคแ แแกแขแ แฃแฅแขแฃแ แ แแแแแ
แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แกแแชแแแแก แจแแแแแ แแแแฅแแก แกแแ แแแกแ:
apiVersion: v1
kind: Service
metadata:
labels:
id: rollout-canary
name: app
spec:
ports:
- port: 80
protocol: TCP
targetPort: 5000
selector:
id: app
type: LoadBalancer
แแ rollout.yaml :
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: rollout-canary
spec:
replicas: 10
revisionHistoryLimit: 2
selector:
matchLabels:
id: rollout-canary
template:
metadata:
labels:
id: rollout-canary
spec:
containers:
- name: rollouts-demo
image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
imagePullPolicy: Always
strategy:
canary:
steps:
- setWeight: 10
# Rollouts can be manually resumed by running `kubectl argo rollouts promote ROLLOUT`
- pause: {}
- setWeight: 50
- pause: { duration: 120 } # two minutes
Rollout
แแฃแจแแแแก แแกแแแ, แ แแแแ แช Deployment. แแฃ แแ แแแแแงแแแแแ แแแแแฎแแแแแก แกแขแ แแขแแแแแก (แ แแแแ แช แแฅ แแแแแ แแก) แแก แแฅแชแแแ แ แแแแ แช แแแแฃแแแกแฎแแแแ แแแซแ แแแ แแแแแฎแแแแแก แแแแแแแแแ.
แฉแแแ แแแแแกแแแฆแแ แแแ แแ แกแแคแแฎแฃแ แก แแแแแจแ แแแแแ แแก แแแแแแแแแแกแแแแก:
- แขแ แแคแแแแก 10% แแแแแ แแแแ (แแแแแแแแ แฎแแแแ OK)
- 50% แขแ แแคแแแ แแแแแ แแแแ (แแแแแแแแแ 2 แฌแฃแแ แแ แจแแแแแ แแแแแ แซแแแแ 100%)
แแแ แแแแแแ แแแแแแแแแแก แจแแกแ แฃแแแแ
แแแ แแแแแแ แแแแแแแแแแก แจแแแแแ, แฉแแแแ แ แแกแฃแ แกแแแ แแกแ แแแแแแงแฃแ แแแ:
แฉแแแ แแแฆแแแ แแแกแฃแฎแก แแฎแแแแ แแแแแแแชแแแก แแแ แแแแ แแแ แกแแแแแ:
แแแแแ แแก แแแแแแแแแแก แจแแกแ แฃแแแแ
แแแแแฏแ 1: 10% แขแ แแคแแแ
แแแแแ แแก แแแแแแแแแแก แแแกแแฌแงแแแแ, แฉแแแ แฃแแ แแแแ แฃแแแ แจแแแชแแแแแ แกแฃแ แแแแก แแแ แกแแ, แ แแแแ แช แแแแก แฉแแแฃแแแแ แแ แแแแแแแแ แแแแแแแแแแกแแก:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: rollout-canary
spec:
...
template:
metadata:
labels:
id: rollout-canary
spec:
containers:
- name: rollouts-demo
image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
...
แฉแแแ แแแงแแแแแ แชแแแแแแแแแก, แแกแ แ แแ, Gitlab CI แแแ แชแแแแแก แแ แฉแแแ แแฎแแแแแ แชแแแแแแแแแก:
แแฎแแ, แแฃ แฉแแแ แแแแแฆแแแ แกแแ แแแกแก:
แแแแ! แฉแแแ แฉแแแแ แแแแแ แแก แแแแแแแแแแก แจแฃแแจแ แแแ แ. แฉแแแ แแฎแแแแแ แแ แแแ แแกแก แแแจแแแแแ:
kubectl argo rollouts get rollout rollout-canary
แแแแแฏแ 2: 50% แขแ แแคแแแ:
แแฎแแ แแแแแแแแแ แจแแแแแ แแขแแแแ: แขแ แแคแแแแก 50%-แแก แแแแแแแกแแแแ แแแแ. แฉแแแ แแแแแงแแแแ แแก แแแแแฏแ แฎแแแแ แแแกแแจแแแแแ:
kubectl argo rollouts promote rollout-canary # continue to step 2
แแ แฉแแแแแ แแแแแแแชแแแ แแแแแ แฃแแ แแแกแฃแฎแแแแก 50% แแฎแแแ แแแ แกแแแแแแแ:
แแ แแแแแฅแแแงแแแแแก แแแแแฎแแแแ:
แแ แแกแ.
แแแแแฏแ 3: 100% แขแ แแคแแแ:
แฉแแแ แแแแแงแแแแ แแกแ, แ แแ 2 แฌแฃแแแก แจแแแแแ 50%-แแแแ แแแแแฏแ แแแขแแแแขแฃแ แแ แแแกแ แฃแแแแก แแ 100%-แแแแ แแแแแฏแ แแแแฌแงแแก:
แแ แแแแแชแฎแแแแก แแแแแแแแแแ:
แแ แแแแแฅแแแงแแแแแก แแแแแฎแแแแ:
แแแแแ แแก แแแแแแแแแ แแแกแ แฃแแแแฃแแแ.
แแแขแ แแแแแแแแแแ Argo Rollouts-แแ
แแฅ แฃแคแ แ แแแขแ แแแแแแแแแ, แแแแแแแแแ, แ แแแแ แแแแแงแแแแ แแแ แแแแก แแแแแฎแแแแ แแ แจแแแแ แแแ แแแแแ แแก แกแแคแฃแซแแแแแ:
แแแแแ Argo Rollouts-แแกแ แแ Argo CI-แแก แจแแกแแฎแแ
แแ แแแแแแแแแ แแแ แฉแแแ แแ แแแแแแก, แแก แแฉแแแแแแก, แแฃ แ แแแแ แแฃแจแแแแแ Argo Rollouts แแ Argo CI แแ แแแ:
แกแฃแ
แแ แซแแแแแ แแแแฌแแแก CRD-แแแแก แแแแแงแแแแแแก แแแแ, แ แแแแแแแช แแแ แแแแแ แแแแแขแแแแแ แขแแแแก แแแแแแแแแแก แแ แ แแแแแแแกแขแแแแก แจแแฅแแแแก, แขแ แแคแแแแก แแแแแแแกแแแแ แแแแแก แแ แ.แจ. แแแแแแ แแฃแจแแแแ แจแแฃแคแแ แฎแแแแแ แแแแแแแแ แแแแก. แจแแแแแ แแกแฃแ แก แจแแแแแแฌแแ แแแขแแแ แแชแแ Argo CI-แกแแแ.
แแฃแแชแ, แ แแแแ แช แฉแแแก, Argo CI-แแกแ แแ Flux CI-แแก แแแแ แจแแ แฌแงแแแ, แแกแ แ แแ, แจแแแซแแแแ แแแแแแแแ แกแแแแ แแฎแแแ แแแแแจแแแแ แแแแแแ:
แแฅแแแแแ แ แแแแ แแแแแชแแแแแแ Argo Rollouts-แแแ แแ Argo CI-แกแแแ?
แแกแแแ แฌแแแแแแฎแแ แกแฎแแ แกแขแแขแแแแ แฉแแแแก แแแแแแ:
แแแแแคแฎแฃแแแก แแแแแแแชแแแแแก แชแแกแคแแ แ-แแฌแแแแ แแแแแแแแแ Nginx แแแ แกแแ แแแ แแ Kubernetes: แ แแขแแ แแ แแก แแกแ แแแแจแแแแแแแแแ แกแแกแขแแแแก แ แแกแฃแ แกแแแแก แแแ แแแแก แแแแคแแแฃแ แแชแแ? Hashicorp-แแก แแแแกแฃแแแก Kubernetes แแแขแแ แแแแชแแแก แจแแกแแแแแ Tekton Pipeline - Kubernetes-แแก แแจแแแแแฃแ แ แแแแกแแแแแแแ แแแแแแแฃแ แ แแแแฃแแแแแก แแแแแ Nginx-แแกแแแแก Telegram-แแก แแแขแ Redmine-แแกแแแแก. แ แแแแ แแแแแแแ แขแแแแ แชแฎแแแ แแแ แกแแแฃแแแ แ แแแแแกแแแแก แแ แกแฎแแแแแกแแแแก
แฌแงแแ แ: www.habr.com