Kanaria deplojo estas tre efika maniero testi novan kodon sur subaro de uzantoj. Ĝi signife reduktas la trafikŝarĝon kiu povas esti problema dum la deplojprocezo, ĉar ĝi nur okazas ene de specifa subaro. Ĉi tiu noto estas dediĉita al kiel organizi tian deplojon uzante Kubernetes kaj deplojan aŭtomatigon. Ni supozas, ke vi scias ion pri Helm kaj Kubernetes-resursoj.
Simpla kanaria deplojo al Kubernetes inkluzivas du ŝlosilajn rimedojn: la servon mem kaj la disfaldan ilon. Kanaria deplojo funkcias per ununura servo, kiu interagas kun du malsamaj rimedoj servantaj ĝisdatigtrafikon. Unu el ĉi tiuj rimedoj funkcios kun la "kanaria" versio, kaj la dua funkcios kun la stabila versio. En ĉi tiu situacio, ni povas reguligi la nombron da kanariaj versioj por redukti la kvanton de trafiko necesa por servi. Se, ekzemple, vi preferas uzi Yaml, tiam ĝi aspektos tiel en Kubernetes:
kind: Deployment
metadata:
name: app-canary
labels:
app: app
spec:
replicas: 1
...
image: myapp:canary
---
kind: Deployment
metadata:
name: app
labels:
app: app
spec:
replicas: 5
...
image: myapp:stable
---
kind: Service
selector:
app: app # Selector will route traffic to both deployments.
Estas eĉ pli facile imagi ĉi tiun opcion uzante kubectl, kaj en
Aŭtomatigo de kanaria deplojo
Antaŭ ĉio, ni bezonas Helm-diagramon, kiu jam inkluzivas la rimedojn, kiujn ni diskutis supre. Ĝi devus aspekti kiel ĉi tio:
~/charts/app
├── Chart.yaml
├── README.md
├── templates
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ └── service.yaml
└── values.yaml
La bazo de la Helm-koncepto estas la administrado de plurversiaj eldonoj. La stabila versio estas nia ĉefa stabila branĉo de la projektkodo. Sed kun Helm ni povas disfaldi kanarian eldonon per nia eksperimenta kodo. La ĉefa afero estas konservi trafikan interŝanĝon inter la stabila versio kaj la kanaria liberigo. Ni administros ĉion ĉi uzante specialan elektilon:
selector:
app.kubernetes.io/name: myapp
Niaj "kanaraj" kaj stabilaj disfaldaj rimedoj indikos ĉi tiun etikedon sur la moduloj. Se ĉio estas agordita ĝuste, tiam dum la deplojo de la kanaria versio de nia Helm-diagramo-mapo ni vidos, ke trafiko estos direktita al la nove deplojitaj moduloj. La stabila versio de ĉi tiu komando aspektos jene:
helm upgrade
--install myapp
--namespace default
--set app.name=myapp # Goes into app.kubernetes.io/name
--set app.version=v1 # Goes into app.kubernetes.io/version
--set image.tag=stable
--set replicaCount=5
Nun ni kontrolu nian kanarian liberigon. Por deploji la kanarian version, ni devas memori du aferojn. La eldonnomo devas esti malsama por ke ni ne lanĉu ĝisdatigon al la nuna stabila versio. La versio kaj etikedo ankaŭ devas esti malsamaj por ke ni povu disfaldi alian kodon kaj identigi diferencojn per rimedetikedoj.
helm upgrade
--install myapp-canary
--namespace default
--set app.name=myapp # Goes into app.kubernetes.io/name
--set app.version=v2 # Goes into app.kubernetes.io/version
--set image.tag=canary
--set replicaCount=1
Tio estas ĉio! Se vi pingas la servon, vi povas vidi, ke la kanaria ĝisdatigo trafikas nur parton de la tempo.
Se vi serĉas deplojajn aŭtomatigajn ilojn, kiuj inkluzivas la priskribitan logikon, tiam atentu
fonto: www.habr.com