เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเปเบเบปเบงเบเบงเบเบเบธเบกเบเบฒเบเบเบดเบเบเบฑเปเบ k8s-native Argo Rollouts เปเบฅเบฐ GitlabCI เปเบเบทเปเบญเปเบเบตเบเปเบเป Canary deployment เบเบฑเบ Kubernetes.
เบเบปเบเบเบงเบฒเบกเปเบเบเบธเบเบเบตเป
เบเบฒเบเบเบณเปเบเป Canary เปเบ Kubernetes #1: Gitlab CI - (เบซเบปเบงโเบเปเปโเบเบตเป)
- เบเบฒเบเบเบณเปเบเป Canary เปเบเบเปเบเป Istio
- เบเบฒเบเบเบณเปเบเป Canary เปเบเบเปเบเป Jenkins-X Istio Flagger
เบเบฒเบเบเบณเปเบเป Canary
เบเบงเบเปเบฎเบปเบฒเบซเบงเบฑเบเบงเปเบฒเบเปเบฒเบเบเบฐเบญเปเบฒเบ
เบเบฒเบเปเบเบตเบเบเบปเบง Argo
Argo Rollouts เปเบกเปเบเบเบปเบงเบเบงเบเบเบธเบกเบเบฒเบเบเบดเบเบเบฑเปเบเบเบทเปเบเปเบกเบทเบญเบ Kubernetes. เบกเบฑเบเบชเบฐเบซเบเบญเบ CRD (Custom Resource Definition) เบชเปเบฒเบฅเบฑเบ Kubernetes. เบเปเบเบญเบเปเบเบเบฑเบเบกเบฑเบ, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบเปเบฒเปเบเปเบซเบเปเบงเบเบเบฒเบเปเบซเบกเป: Rollout
, เปเบเบดเปเบเบเบฑเบเบเบฒเบเบเบฒเบเปเบเปเบชเบตเบเปเบฒ-เบชเบตเบเบฝเบง เปเบฅเบฐ canary เบเบตเปเบกเบตเบเบฒเบเปเบฅเบทเบญเบเปเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเปเบฒเบเป.
เบเบปเบงเบเบงเบเบเบธเบก Argo Rollouts เบเบตเปเปเบเปเปเบเบเบเบฑเบเบเบฐเบเบฒเบเบญเบเปเบเบเบเบณเบเบปเบเปเบญเบ
Rollout,
เบญเบฐเบเบธเบเบฒเบเปเบซเปเปเบเปเบเบปเบเบฅเบฐเบเบธเบเปเบเบตเปเบกเปเบเบตเบกเปเบเบฑเปเบ: เบชเบตเบเปเบฒ-เบชเบตเบเบฝเบง เปเบฅเบฐ canary เบชเปเบฒเบฅเบฑเบ Kubernetes. เบเบฑเบเบเบฐเบเบฒเบเบญเบRollout
เบชเบฐเบซเบเบญเบเบซเบเปเบฒเบเบตเปเบเบฝเบเปเบเบปเปเบฒDeployment
, เบเบฝเบเปเบเปเบกเบตเบเบธเบเบเบฐเบชเบฒเบเบเบฒเบเบเปเบฒเปเบเปเปเบเบตเปเบกเปเบเบตเบก.
เบเบฑเบเบเบฐเบเบฒเบเบญเบDeployments
เบกเบตโเบชเบญเบโเบเบธเบโเบเบฐโเบชเบฒเบโเบชเปเบฒโเบฅเบฑเบโเบเบฒเบโเบเปเบฒโเปเบเปโ:RollingUpdate
ะธRecreate
. เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบปเบเบฅเบฐเบเบธเบเปเบซเบผเบปเปเบฒเบเบตเปเปเบกเปเบเปเบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบเบเปเบฅเบฐเบเบตเบชเปเบงเบเปเบซเบเป, เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเปเบเปเบเบฑเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเปเบเบเบฐเบซเบเบฒเบเปเบซเบเปเบซเบผเบฒเบ, เบเบธเบเบเบฐเบชเบฒเบเปเบเบตเปเบกเปเบเบตเบกเปเบกเปเบเบเบทเบเบเปเบฒเปเบเป, เปเบเบฑเปเบ: เบชเบตเบเบฝเบงเบชเบตเบเปเบฒเบซเบผเบท canary, เบเบตเปเบเปเปเบกเบตเบขเบนเปเปเบเบเบปเบงเบเบงเบเบเบธเบกเบเบฒเบเบเบฑเบเปเบเป. เปเบเบทเปเบญเปเบเปเบเบธเบเบเบฐเบชเบฒเบเปเบซเบผเบปเปเบฒเบเบตเปเปเบ Kubernetes, เบเบนเปเปเบเปเบเปเบญเบเบเบฝเบเบชเบฐเบเบฃเบดเบเบขเบนเปเปเบเบดเบเบชเบธเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเปเบเบญเบเบเบงเบเปเบเบปเบฒ. 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
เปเบ turnip เปเบเบเบชเปเบฒเบเบเบทเปเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ (เปเบเบดเปเบเบเปเบฒเบเบฅเบธเปเบกเบเบตเป) เบเบงเบเปเบฎเบปเบฒเปเบเปเปเบเบตเปเบก install.yaml เปเบเบฑเบ i/k8s/argo-rollouts/install.yaml เปเบฅเปเบง. เบงเบดเบเบตเบเบตเป GitlabCI เบเบฐเบเบดเบเบเบฑเปเบเบกเบฑเบเปเบเบปเปเบฒเปเบเปเบเบเบธเปเบก.
เบเปเบฒเบเบฅเบนเบเบเปเบฒ (เบเบฅเบฑเบเบญเบดเบ kubectl)
เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบปเบงเบขเปเบฒเบ
เบกเบฑเบเปเบเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบตเปเบเบตเบเบตเปเบเบฐเบกเบต repositories เปเบเบเบเปเบฒเบเบซเบฒเบเบชเปเบฒเบฅเบฑเบเบฅเบฐเบซเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบฅเบฐเปเบเบเบชเปเบฒเบเบเบทเปเบเบเบฒเบ.
Repository เบชเปเบฒเบฅเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ
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, เปเบเบดเปเบเบเบฐเบเบฐเบเบญเบเบเปเบงเบ config เบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบ 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
เปเบฎเบฑเบเบงเบฝเบเบเบทเบเบฑเบเบเบฑเบ Deployment. เบเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเปเปเบเปเบเปเบฒเบเบปเบเบเบธเบเบเบฐเบชเบฒเบเบเบฒเบเบเบฑเบเบเบธเบ (เปเบเบฑเปเบ canary เบเบตเปเบเบตเป) เบกเบฑเบเบเบฐเบเบฐเบเบดเบเบฑเบเบเบทเบเบฑเบเบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเปเบฅเบทเปเบญเบเบเบฒเบเบเบฑเบเบเบธเบ.
เบเบงเบเปเบฎเบปเบฒเบเปเบฒเบเบปเบเบชเบญเบเบเบฑเปเบเบเบญเบเปเบ yaml เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเปเบเป canary:
- 10% เบเบญเบโเบเบฒเบโเบเบฐโเบฅเบฒโเบเบญเบ Canary (เบฅเปโเบเปเบฒโเบชเปเบฒโเบฅเบฑเบโเบเบนเปโเบกเบท OKโ)
- 50% เบเบฒเบเบเบฐเบฅเบฒเบเบญเบเปเบ canary (เบฅเปเบเปเบฒ 2 เบเบฒเบเบตเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบชเบทเบเบเปเป 100%)
เบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบฑเบเบเบฑเปเบเบเบฐเบเบดเบเบฑเบเปเบเบทเปเบญเบเบเบปเปเบ
เบซเบผเบฑเบโเบเบฒเบโเบเบฒเบโเบเปเบฒโเปเบเปโเปเบโเปเบเบทเปเบญเบโเบเบปเปเบโ, เบเบฑเบโเบเบฐโเบเบฒโเบเบญเบโเบเบญเบโเบเบงเบโเปเบฎเบปเบฒโเบเบฐโเบกเบตโเบฅเบฑเบโเบชเบฐโเบเบฐโเบเบฑเปเบโเบเบตเปโ:
เปเบฅเบฐเบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเบเบฒเบเบเบญเบเบฎเบฑเบเบเบฝเบเปเบเปเบเบฒเบเบชเบฐเบเบฑเบเบเปเบฒเบญเบดเบเบเบญเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ:
เบเบฐเบเบดเบเบฑเบเบเบฒเบเบชเบปเปเบ Canary
เบเบฑเปเบเบเบญเบเบเบต 1: 10% เบเบฒเบเบเบฐเบฅเบฒเบเบญเบ
เปเบเบทเปเบญเปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเบเบณเปเบเป canary, เบเบงเบเปเบฎเบปเบฒเบเบฝเบเปเบเปเบเปเบญเบเบเบฒเบเบเปเบฝเบเปเบงเบตเบเบฑเบเบฎเบนเบเบเบฒเบเบเบฑเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบกเบฑเบเปเบฎเบฑเบเบเบฑเบเบเบฒเบเบเบณเปเบเป:
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 เบเบฐเบเบดเบเบฑเบเปเบฅเบฐเบเบงเบเปเบฎเบปเบฒเปเบซเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบ:
เบเบฝเบงเบเบตเปเบเปเบฒเบเบงเบเปเบฎเบปเบฒเปเบเบปเปเบฒเปเบเบดเบเบเบฒเบเบเปเบฅเบดเบเบฒเบ:
เบเบดเปเบเปเบซเบเป! เบเบงเบเปเบฎเบปเบฒเบขเบนเปเปเบเบเบฒเบเบเบญเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ canary เบเบญเบเบเบงเบเปเบฎเบปเบฒ. เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบเบดเปเบเบเบงเบฒเบกเบเบทเบเบซเบเปเบฒเปเบเบเบเบฒเบเปเบฅเปเบ:
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โ% เบเบฐโเปเบฅเบตเปเบกโเบเบปเปเบโ:
เปเบฅเบฐโเบเบปเบโเบเบฐโเบฅเบดเบโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโ:
เปเบฅเบฐเบเบฒเบเบเบปเบเบเบงเบเบเบทเบเบเบฒเบเปเบเบตเบเบเบปเบง:
เบเบฒเบเบเบณเปเบเป Canary เบชเบณเปเบฅเบฑเบเปเบฅเปเบง.
เบเบปเบงเบขเปเบฒเบเปเบเบตเปเบกเปเบเบตเบกเบเบฑเบ Argo Rollouts
เบกเบตเบเบปเบงเบขเปเบฒเบเปเบเบตเปเบกเปเบเบตเบกเบขเบนเปเบเบตเปเบเบตเป, เปเบเบฑเปเบ: เบงเบดเบเบตเบเบฒเบเบเบฑเปเบเบเบปเบงเบขเปเบฒเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเปเบฅเบฐเบเบฒเบเบเบฝเบเบเบฝเบเปเบเบเบญเบตเบเปเบชเป canary:
เบงเบดเบเบตเปเบญเบเปเบฝเบงเบเบฑเบ Argo Rollouts เปเบฅเบฐ Argo CI
เบเปเบญเบเบเปเปเบเบฐเบเปเบฒเบงเบดเบเบตเปเบญเบเบตเปเปเบเปเป, เบกเบฑเบเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบงเปเบฒ Argo Rollouts เปเบฅเบฐ Argo CI เปเบฎเบฑเบเบงเบฝเบเบฎเปเบงเบกเบเบฑเบเปเบเบงเปเบ:
เบเบปเบเปเบเปเบฎเบฑเบ
เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเปเปเบกเบฑเบเปเบเบงเบเบงเบฒเบกเบเบดเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเป CRDs เบเบตเปเบเบฑเบเบเบฒเบเบเบฒเบเบชเปเบฒเบเบเบฐเปเบเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเปเปเบเบตเปเบกเปเบเบตเบกเบซเบผเบท replicasets, redirect traffic, เปเบฅเบฐเบญเบทเปเบเป. เบเบฒเบโเปเบฎเบฑเบโเบงเบฝเบโเบเบฑเบโเปเบเบปเบฒโเปเบเบปเปเบฒโเปเบเบฑเบโเปเบโเปเบเปโเบเปเบฝเบโ. เบเปเปเปเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเบขเบฒเบเบเบฐเบเบปเบเบชเบญเบเบเบฒเบเปเบเบทเปเบญเบกเปเบเบเบเบฑเบ Argo CI.
เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เปเบเบดเปเบเบเบทเบงเปเบฒเบกเบตเบเบฒเบเบฅเบงเบกเบเบปเบงเปเบซเบเปเบเบญเบ Argo CI เปเบฅเบฐ Flux CI เบเบฐเบกเบฒเปเบเบดเบ, เบเบฑเปเบเบเบฑเปเบเบเปเบญเบเบญเบฒเบเบเบฐเบฅเปเบเปเบฒเบเบปเบเบเปเบงเบฒเบเบฒเบเบเปเบญเบเปเบซเบกเปเบญเบญเบเบกเบฒ:
เบเปเบฒเบเปเบเบตเบเบกเบตเบเบฐเบชเบปเบเบเบฒเบเบเบฑเบ Argo Rollouts เบซเบผเบท Argo CI เบเป?
เบญเปเบฒเบเบเบปเบเบเบงเบฒเบกเบญเบทเปเบเปเปเบ blog เบเบญเบเบเบงเบเปเบฎเบปเบฒ:
เบเบฒเบเบเบณเปเบเปเบชเบตเบเปเบฒ-เบชเบตเบเบฝเบงเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบฒเบเบฎเบฝเบ spring เบเบฑเบเปเบเบตเบเปเบงเบตเปเบงเบฑเบ Nginx Kubernetes: เปเบเบฑเบเบซเบเบฑเบเบกเบฑเบเบเบถเปเบเบชเบณเบเบฑเบเบซเบผเบฒเบเปเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบเบเบฑเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒเบเบญเบเบเบญเบเบฅเบฐเบเบปเบ? เบเบฒเบเปเบเบฐเบเปเบฒเบเบฒเบเบญเบฐเบเบธเบเบฒเบ Kubernetes เบเบญเบเบเบปเบเบชเบธเบ Hashicorp เบเปเป Tekton - Kubernetes-native pipelines เบเบฒเบเบเปเปเบชเปเบฒเบเปเบกเบเบนเบเปเบเบเปเบเบทเปเบญเบเปเบซเบงเบชเปเบฒเบฅเบฑเบ Nginx Telegram bot เบชเปเบฒเบฅเบฑเบ Redmine. เบงเบดเบเบตเบเบฒเบเปเบฎเบฑเบเปเบซเปเบเบตเบงเบดเบเบเปเบฒเบเบชเปเบฒเบฅเบฑเบเบเบปเบงเบเปเบฒเบเปเบญเบเปเบฅเบฐเบเบปเบเบญเบทเปเบ
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com