ื ืฉืชืืฉ ืืืงืจ ืืคืจืืกื ืืืงืืจื ืฉื Argo Rollouts ืื-GitlabCI ืืื ืืืคืขืื ืคืจืืกืืช ืงื ืจืืืช ื-Kubernetes
ืืืืจืื ืืกืืจื ืื
ืคืจืืกื ืงื ืจืืช ื-Kubernetes #1: Gitlab CI - (ืืืืืจ ืืื)
- ืคืจืืกื ืงื ืจืืช ืืืืฆืขืืช Istio
- ืคืจืืกื ืงื ืจืืช ืืืืฆืขืืช Jenkins-X Istio Flagger
ืคืจืืกื ืงื ืจืืช
ืื ื ืืงืืืื ืฉืืชื ืงืืจื
ืืฉืงืืช ืืจืื
Argo Rollouts ืืื ืืงืจ ืคืจืืกื ืืงืืจื ืฉื Kubernetes. ืืื ืืกืคืง CRD (ืืืืจืช ืืฉืื ืืืชืื ืืืฉืืช) ืขืืืจ Kubernetes. ืืืืืช ืื, ืื ื ืืืืืื ืืืฉืชืืฉ ืืืฉืืช ืืืฉื: Rollout
, ืืื ืืืช ืคืจืืกืืช ืืืื-ืืจืืง ืืงื ืจืืืช ืขื ืืคืฉืจืืืืช ืชืฆืืจื ืฉืื ืืช.
ืืงืจ Argo Rollouts ืืฉืืืืฉ ืขื ืืื ืืฉืื ืืืชืื ืืืฉืืช
Rollout,
ืืืคืฉืจ ืืกืืจืืืืืช ืคืจืืกื ื ืืกืคืืช ืืืื ืืืื-ืืจืืง ืืงื ืจื ืขืืืจ Kubernetes. ืึทืฉืืึธืRollout
ืืกืคืง ืคืื ืงืฆืืื ืืืืช ืฉืืื ืขืจืDeployment
, ืจืง ืขื ืืกืืจืืืืืช ืคืจืืกื ื ืืกืคืืช.
ืืฉืืDeployments
ืืฉ ืฉืชื ืืกืืจืืืืืช ืืคืจืืกื:RollingUpdate
ะธRecreate
. ืืืจืืช ืฉืืกืืจืืืืืช ืืื ืืชืืืืืช ืืจืื ืืืงืจืื, ืืคืจืืกื ืืฉืจืชืื ืืงื ื ืืืื ืืืื ืืืื, ื ืขืฉื ืฉืืืืฉ ืืืกืืจืืืืืช ื ืืกืคืืช, ืืืื ืืืื-ืืจืืง ืื ืงื ืจื, ืฉืืื ื ืืืื ืืช ืืืงืจ ืืคืจืืกื. ืืื ืืืฉืชืืฉ ืืืกืืจืืืืืช ืืื ื-Kubernetes, ืืืฉืชืืฉืื ืืื ืฆืจืืืื ืืืชืื ืกืงืจืืคืืื ืขื ืืคืจืืกื ืฉืืื. ืืงืจ ื-Argo Rollouts ืืืฉืฃ ืืช ืืืกืืจืืืืืช ืืืื ืืคืจืืืจืื ืคืฉืืืื, ืืฆืืจืชืืื ืื ืืชื ืื ืืืืืจื.
https://argoproj.github.io/argo-rollouts
ืืฉ ืื Argo CI, ืืืกืคืง ืืืฉืง ืืื ืืจื ื ื ืื ืืฉืืืืฉ ืขื Rollouts, ื ืกืชืื ืขื ืื ืืืืืจ ืืื.
ืืชืงื ืช ืืจืื 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
ืืื API ืคืฉืื ืืืื ืฉื Python+Flask ืฉืืืืืจ ืชืืืื ืืชืืจ JSON. ื ืื ื ืืช ืืืืืื ืืืืฆืขืืช GitlabCI ืื ืืืืฃ ืืช ืืชืืฆืื ื-Gitlab Registry. ืืจืืฉืื ืืฉ ืื ื ืฉืชื ืืจืกืืืช ืืืืืจื ืฉืื ืืช:
- 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. ืื ืื ื ืืืืจ ืืกืืจืืืืืช ืขืืืื (ืืื Canary ืืื) ืืื ืชืชื ืื ืืื ืคืจืืกืช ืืจืืจืช ืืืืื ืฉื ืขืืืื ืืชืืืื.
ืื ื ืืืืืจืื ืฉื ื ืฉืืืื ื-yaml ืืคืจืืกื ืงื ืจืืช:
- 10% ืืืชื ืืขื ืืงื ืจืืช (ืืืชื ืืืืฉืืจ ืืื ื)
- 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 CI
ืื ื ืืืืช ืืืืืฅ ืขื ืืกืจืืื ืืื, ืืื ืืจืื ืืื ืืจืื Rollouts ื- Argo CI ืขืืืืื ืืื:
ืกื ืืื
ืื ื ืืืื ืืืื ืืช ืืจืขืืื ืฉื ืฉืืืืฉ ื-CRD ืฉืื ืืืื ืืช ืืืฆืืจื ืฉื ืกืืืื ื ืืกืคืื ืฉื ืคืจืืกืืช ืื ืขืจืืืช ืืฉืืืคืืืช, ืชืขืืืจืช ืืคื ืื ืืืืฉ ืืื'. ืืขืืืื ืืืชื ืขืืืจืช ืืืง. ืืฉืื ืืื ืื ื ืจืืฆื ืืืืืง ืืช ืืืื ืืืจืฆืื ืขื Argo CI.
ืขื ืืืช, ื ืจืื ืฉืืฉ ืืืืื ืืืื ืฉื Argo CI ื-Flux CI, ืื ืื ื ืืืื ืืืืืช ืขื ืฉืืืืืืจื ืืืืฉื ืชืฆื:
ืืื ืืื ืื ื ืืกืืื ืขื Argo Rollouts ืื Argo CI?
ืงืจื ืื ืืืืจืื ืืืจืื ืืืืื ืฉืื ื:
ืคืจืืกื ืืืืื-ืืจืืงื ืฉื ืืืฉืืื Spring ืขื ืฉืจืช ืืื ืืจื ื ืฉื Nginx Kubernetes: ืืืืข ืื ืื ืืฉืื ืืืืืืจ ืืช ื ืืืื ืืฉืืื ืืืขืจืืช? ืืืืจืืช ืขื ืืจืฉืืช Kubernetes ืฉื Hashicorp Consult Tekton Pipeline - ืฆืื ืืจืืช ืืงืืจืืื ืฉื Kubernetes ืื ืืืช ืืืืืืื ืืื ืืืื ืขืืืจ Nginx ืืื ืืืืจื ืขืืืจ Redmine. ืืื ืืคืฉื ืืช ืืืืื ืืขืฆืื ืืืืืจืื
ืืงืืจ: www.habr.com