เช เชฎเซ k8s-เชจเซเชเชฟเชต เชเชฐเซเชเซ เชฐเซเชฒเชเชเช เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเช เชเชเชเซเชฐเซเชฒเชฐ เช เชจเซ GitlabCI เชจเซ เชเชชเชฏเซเช เชเซเชฌเชฐเชจเซเชเซเชธ เชชเชฐ เชเซเชจเซเชฐเซ เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเช เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชเชฐเซเชถเซเช.
เช เชถเซเชฐเซเชฃเซเชจเชพ เชฒเซเชเซ
เชเซเชฌเชฐเชจเซเชเซเชธ #1 เชฎเชพเช เชเซเชจเซเชฐเซ เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเช: เชเชฟเชเชฒเซเชฌ เชธเซเชเช - (เช เชฒเซเช)
- Istio เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซเชจเซเชฐเซ เชเชฎเชพเชตเช
- เชเซเชจเชเชฟเชจเซเชธ-เชเชเซเชธ เชเชธเซเชเชฟเช เชซเซเชฒเซเชเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซเชจเซเชฐเซ เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเช
เชเซเชจเซเชฐเซ เชเชฎเชพเชตเช
เช
เชฎเชจเซ เชเชถเชพ เชเซ เชเซ เชคเชฎเซ เชตเชพเชเชเชถเซ
เชเชฐเซเชเซ เชฐเซเชฒเชเชเชเซเชธ
Argo Rollouts เช Kubernetes เชจเซเชเซเชต เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเช เชเชเชเซเชฐเซเชฒเชฐ เชเซ. เชคเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชฎเชพเชเซ CRD (เชเชธเซเชเชฎ เชฐเชฟเชธเซเชฐเซเชธ เชกเซเชซเชฟเชจเซเชถเชจ) เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ. เชคเซเชจเชพ เชฎเชพเชเซ เชเชญเชพเชฐ, เช
เชฎเซ เชเช เชจเชตเซ เชเชจเซเชเชฟเชเซเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซเช เชเซเช: Rollout
, เชเซ เชตเชฟเชตเชฟเชง เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชตเชฟเชเชฒเซเชชเซ เชธเชพเชฅเซ เชตเชพเชฆเชณเซ-เชฒเซเชฒเชพ เช
เชจเซ เชเซเชจเซเชฐเซ เชเชฎเชพเชตเชเชจเซเช เชธเชเชเชพเชฒเชจ เชเชฐเซ เชเซ.
เชเชธเซเชเชฎ เชธเชเชธเชพเชงเชจ เชฆเซเชตเชพเชฐเชพ เชเชชเชฏเซเชเชฎเชพเช เชฒเซเชตเชพเชคเชพ เชเชฐเซเชเซ เชฐเซเชฒเชเชเชเซเชธ เชเชเชเซเชฐเซเชฒเชฐ
Rollout,
เชเซเชฌเชฐเชจเซเชเซเชธ เชฎเชพเชเซ เชฌเซเชฒเซ-เชเซเชฐเซเชจ เช เชจเซ เชเซเชจเซเชฐเซ เชเซเชตเซ เชตเชงเชพเชฐเชพเชจเซ เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเช เชตเซเชฏเซเชนเชฐเชเชจเชพเช เชฎเชพเชเซ เชชเชฐเชตเชพเชจเชเซ เชเชชเซ เชเซ. เชธเชเชธเชพเชงเชจRollout
เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เชธเชฎเชเชเซเชท เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซDeployment
, เชฎเชพเชคเซเชฐ เชตเชงเชพเชฐเชพเชจเซ เชเชฎเชพเชตเช เชตเซเชฏเซเชนเชฐเชเชจเชพ เชธเชพเชฅเซ.
เชฐเชฟเชธเซเชฐเซเชธDeployments
เชเชฎเชพเชตเช เชฎเชพเชเซ เชฌเซ เชตเซเชฏเซเชนเชฐเชเชจเชพ เชเซ:RollingUpdate
ะธRecreate
. เชเซ เชเซ เช เชตเซเชฏเซเชนเชฐเชเชจเชพ เชฎเซเชเชพ เชญเชพเชเชจเชพ เชเชฟเชธเซเชธเชพเชเชฎเชพเช เชฏเซเชเซเชฏ เชเซ, เชธเชฐเซเชตเชฐ เชชเชฐ เชเซเชฌ เชฎเซเชเชพ เชชเชพเชฏเชพ เชชเชฐ เชเชฎเชพเชตเช เชฎเชพเชเซ, เชตเชงเชพเชฐเชพเชจเซ เชตเซเชฏเซเชนเชฐเชเชจเชพเชเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชเซเชฎ เชเซ เชตเชพเชฆเชณเซ-เชฒเซเชฒเซ เช เชฅเชตเชพ เชเซเชจเซเชฐเซ, เชเซ เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเช เชเชเชเซเชฐเซเชฒเชฐเชฎเชพเช เชเชชเชฒเชฌเซเชง เชจเชฅเซ. เชเซเชฌเชฐเชจเซเชเซเชธเชฎเชพเช เช เชตเซเชฏเซเชนเชฐเชเชจเชพเชเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเซ, เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชเช เชคเซเชฎเชจเชพ เชเชฎเชพเชตเชเชจเซ เชเซเช เชชเชฐ เชธเซเชเซเชฐเชฟเชชเซเชเซ เชฒเชเชตเชพเชจเซ เชนเชคเซ. เชเชฐเซเชเซ เชฐเซเชฒเชเชเชเซเชธ เชเชเชเซเชฐเซเชฒเชฐ เช เชตเซเชฏเซเชนเชฐเชเชจเชพเชเชจเซ เชธเชฐเชณ, เชเซเชทเชฃเชพเชคเซเชฎเช, เชฐเซเชชเชฐเซเชเชพเชเชเชฟเชค เชชเชฐเชฟเชฎเชพเชฃเซ เชคเชฐเซเชเซ เชเชเชพเชเชฐ เชเชฐเซ เชเซ.
https://argoproj.github.io/argo-rollouts
เช เชฐเซเชเซ เชธเซเชเช เชชเชฃ เชเซ, เชเซ เชฐเซเชฒเชเชเชเซเชธ เชธเชพเชฅเซ เชตเชพเชชเชฐเชตเชพ เชฎเชพเชเซ เช เชจเซเชเซเชณ เชตเซเชฌ เชเชจเซเชเชฐเชซเซเชธ เชชเซเชฐเซเช เชชเชพเชกเซ เชเซ, เช เชฎเซ เชคเซเชจเชพ เชชเชฐ เชเชเชพเชฎเซ เชฒเซเชเชฎเชพเช เชเช เชจเชเชฐ เชจเชพเชเซเชถเซเช.
เชเชฐเซเชเซ เชฐเซเชฒเชเชเชเซเชธ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซ เชฐเชนเซเชฏเซเช เชเซ
เชธเชฐเซเชตเชฐ เชฌเชพเชเซ
kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml
เช เชฎเชพเชฐเชพ เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐ เชธเชฒเชเชฎเชฎเชพเช (เชจเซเชเซ เชเซเช) เช เชฎเซ เชชเชนเซเชฒเซเชฅเซ เช i/k8s/argo-rollouts/install.yaml เชคเชฐเซเชเซ 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 เชจเซ เชเชชเชฏเซเช เชเชฐเซเชถเซเช, .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
เชคเชฎเชพเชฐเชพ เชเซเชฒเชธเซเชเชฐเชฎเชพเช.
เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐ Yaml
เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐ เชฐเชฟเชชเซเชเซเชเชฐเซเชจเซ เช เชเชฆเชฐ เช เชฎเชพเชฐเซ เชชเชพเชธเซ เชธเซเชตเชพ เชเซ:
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
เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเชเชจเซ เชเซเชฎ เช เชเชพเชฎ เชเชฐเซ เชเซ. เชเซ เชเชชเชฃเซ เช
เชชเชกเซเช เชตเซเชฏเซเชนเชฐเชเชจเชพ เชธเซเช เชจ เชเชฐเซเช (เชเซเชฎ เชเซ เชเซเชจเซเชฐเซ เช
เชนเซเช) เชคเซ เชกเชฟเชซเซเชฒเซเช เชฐเซเชฒเชฟเชเช-เช
เชชเชกเซเช เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเชเชจเซ เชเซเชฎ เชตเชฐเซเชคเซ เชเซ.
เชเซเชจเซเชฐเซ เชเชฎเชพเชตเช เชฎเชพเชเซ เช เชฎเซ 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 เชเชเชธเชพเชฅเซ เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฎ เชเชฐเซ เชเซ:
เชชเชฐเชฟเชฃเชพเชฎ
เชฎเชจเซ CRD เชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซ เชตเชฟเชเชพเชฐ เชเชฐเซเชเชฐ เชเชฎเซ เชเซ เชเซ เชตเชงเชพเชฐเชพเชจเชพ เชชเซเชฐเชเชพเชฐเชจเชพเช เชเชฎเชพเชตเช เช เชฅเชตเชพ เชชเซเชฐเชคเชฟเชเซเชคเชฟเช, เชฐเซเชกเชพเชฏเชฐเซเชเซเช เชเซเชฐเชพเชซเชฟเช เชตเชเซเชฐเซเชจเซเช เชธเชเชเชพเชฒเชจ เชเชฐเซ เชเซ. เชคเซเชฎเชจเซ เชธเชพเชฅเซ เชเชพเชฎ เชธเชฐเชณเชคเชพเชฅเซ เชเชพเชฒเซ เชเซ. เชเชเชณ เชนเซเช เชเชฐเซเชเซ เชธเซเชเช เชธเชพเชฅเซ เชเชเซเชเชฐเชฃเชจเซเช เชชเชฐเซเชเซเชทเชฃ เชเชฐเชตเชพ เชฎเชพเชเชเซ เชเซเช.
เชเซ เชเซ, Argo CI เช
เชจเซ Flux CIเชจเซเช เชฎเซเชเซเช เชฎเชฐเซเชเชฐ เชเชตเซ เชฐเชนเซเชฏเซเช เชนเซเชฏ เชคเซเชตเซเช เชฒเชพเชเซ เชเซ, เชคเซเชฅเซ เชนเซเช เชจเชตเซ เชฐเซเชฒเซเช เชฌเชนเชพเชฐ เชจ เชเชตเซ เชคเซเชฏเชพเช เชธเซเชงเซ เชฐเชพเชน เชเซเช เชถเชเซเช เชเซเช:
เชถเซเช เชคเชฎเชจเซ Argo Rollouts เช เชฅเชตเชพ Argo CI เชจเซ เชเซเช เช เชจเซเชญเชต เชเซ?
เช เชฎเชพเชฐเชพ เชฌเซเชฒเซเช เชชเชฐ เช เชจเซเชฏ เชฒเซเชเซ เชชเชฃ เชตเชพเชเชเซ:
Nginx เชตเซเชฌ เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ เชตเชธเชเชค เชเชชเซเชฒเชฟเชเซเชถเชจเซเชจเซ เชฌเซเชฒเซ-เชเซเชฐเซเชจ เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเช เชเซเชฌเชฐเชจเซเชเซเชธ: เชธเชฟเชธเซเชเชฎ เชฐเชฟเชธเซเชฐเซเชธ เชฎเซเชจเซเชเชฎเซเชจเซเชเชจเซ เชเซเช เชตเชตเซเช เชถเชพ เชฎเชพเชเซ เชเชเชฒเซเช เชฎเชนเชคเซเชตเชชเซเชฐเซเชฃ เชเซ? เชนเชพเชถเชฟเชเซเชฐเซเชช เชเซเชจเซเชธเซเชฏเซเชฒเชจเชพ เชเซเชฌเชฐเชจเซเชเซเชธ เชเชฅเซเชฐเชพเชเชเซเชถเชจเชจเซ เชชเชฐเชฟเชเชฏ เชเซเชเชเชจ เชชเชพเชเชชเชฒเชพเชเชจ - เชเซเชฌเชฐเชจเซเชเชธ-เชจเซเชเชฟเชต เชชเชพเชเชชเชฒเชพเชเชจ Nginx เชฎเชพเชเซ เชกเชพเชฏเชจเซเชฎเชฟเช เชฎเซเชกเซเชฏเซเชฒ เชฌเชจเชพเชตเชตเซเช เชฐเซเชกเชฎเชพเชเชจ เชฎเชพเชเซ เชเซเชฒเชฟเชเซเชฐเชพเชฎ เชฌเซเช. เชคเชฎเชพเชฐเชพ เช เชจเซ เช เชจเซเชฏ เชฒเซเชเซ เชฎเชพเชเซ เชเซเชตเชจ เชเซเชตเซ เชฐเซเชคเซ เชธเชฐเชณ เชฌเชจเชพเชตเชตเซเช
เชธเซเชฐเซเชธ: www.habr.com