ʻO ka hoʻolālā Canary kahi ala maikaʻi loa e hoʻāʻo ai i nā code hou ma kahi ʻāpana o nā mea hoʻohana. Hoʻemi nui ia i ka ukana kaʻa i hiki ke pilikia i ka wā o ka waiho ʻana no ka mea aia wale nō i loko o kahi ʻāpana kikoʻī. Hoʻolaʻa ʻia kēia memo i ka hoʻonohonoho ʻana i kēlā ʻano hoʻolālā me ka hoʻohana ʻana i nā Kubernetes a me ka automation deployment. Manaʻo mākou ua ʻike ʻoe i kekahi mea e pili ana i nā kumuwaiwai Helm a me Kubernetes.
ʻO kahi hoʻolaha canary maʻalahi iā Kubernetes e loaʻa i ʻelua kumu waiwai nui: ʻo ka lawelawe ponoʻī a me ka hāmeʻa hoʻolaha. Hana ʻia ka hoʻolaha ʻana o Canary ma o kahi lawelawe hoʻokahi e launa pū me ʻelua mau kumuwaiwai like ʻole e lawelawe ana i ka loli hou. E hana kekahi o kēia mau kumuwaiwai me ka mana "canary", a ʻo ka lua e hana me ka mana paʻa. Ma kēia kūlana, hiki iā mākou ke hoʻoponopono i ka helu o nā mana canary i mea e hōʻemi ai i ka nui o ke kaʻa e pono ai e lawelawe. Inā, no ka laʻana, makemake ʻoe e hoʻohana iā Yaml, a laila e like me kēia ma 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.
ʻOi aku ka maʻalahi o ka noʻonoʻo ʻana i kēia koho me ka hoʻohana ʻana i kubectl, a i loko
ʻO ka hoʻokomo ʻana i ka canary
ʻO ka mea mua, pono mākou i kahi palapala palapala Helm, kahi i loaʻa i nā kumuwaiwai a mākou i kūkākūkā ai ma luna. Pono e like me kēia:
~/charts/app
├── Chart.yaml
├── README.md
├── templates
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ └── service.yaml
└── values.yaml
ʻO ke kumu o ka manaʻo Helm ka hoʻokele ʻana i nā hoʻokuʻu multi-version. ʻO ka mana paʻa ko mākou lālā paʻa nui o ke code papahana. Akā me Helm hiki iā mākou ke kau i kahi hoʻokuʻu canary me kā mākou code hoʻokolohua. ʻO ka mea nui ʻo ka mālama ʻana i ka hoʻololi ʻana ma waena o ka mana paʻa a me ka hoʻokuʻu canary. E mālama mākou i kēia me ka hoʻohana ʻana i kahi mea koho kūikawā:
selector:
app.kubernetes.io/name: myapp
ʻO kā mākou "canary" a me nā kumu waiwai hoʻolālā paʻa e hōʻike i kēia lepili ma nā modula. Inā hoʻonohonoho pono ʻia nā mea a pau, a laila i ka wā o ka hoʻolaha ʻana i ka mana canary o kā mākou palapala palapala Helm e ʻike mākou e alakaʻi ʻia ke kaʻa i nā modules hou i kau ʻia. ʻO ka mana paʻa o kēia kauoha e like me kēia:
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
I kēia manawa, e nānā kāua i kā mākou hoʻokuʻu ʻana i ka canary. No ke kau ʻana i ka mana canary, pono mākou e hoʻomanaʻo i ʻelua mau mea. Pono e ʻokoʻa ka inoa hoʻokuʻu i ʻole mākou e ʻōwili i kahi mea hou i ka mana paʻa o kēia manawa. Pono ʻokoʻa ka mana a me ka hōʻailona i hiki iā mākou ke kau i nā code ʻē aʻe a ʻike i nā ʻokoʻa ma o nā hōʻailona waiwai.
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
ʻo ia wale nō! Inā ʻoe e ping i ka lawelawe, hiki iā ʻoe ke ʻike i ka hele ʻana o ka canary i nā ala hele i kahi hapa o ka manawa.
Inā ʻoe e ʻimi nei i nā hāmeʻa automation deployment e loaʻa ana i ka logic i wehewehe ʻia, a laila e hoʻolohe
Source: www.habr.com