Hoʻohana ʻo Canary me ka hoʻohana ʻana iā Jenkins-X Istio Flagger
E hana mākou i ka hoʻoili lima ʻana o Canary ma o GitOps a me ka hoʻokumu ʻana/hoʻololi ʻana i nā kumuwaiwai Kubernetes nui. Kuhi ʻia kēia ʻatikala no ka hoʻomaka ʻana me ke ʻano o ka hana ʻana ma Kubernetes Canary, no ka mea, aia nā ala ʻoi aku ka maikaʻi o ka automation, a mākou e noʻonoʻo ai i nā ʻatikala aʻe.
Me ka hoʻolālā Canary, hoʻohana mua ʻia nā mea hou i kahi ʻāpana o nā mea hoʻohana. Ma o ka nānā ʻana, ka ʻikepili log, ka hoʻāʻo lima, a i ʻole nā ala pane ʻē aʻe, hoʻāʻo ʻia ka hoʻokuʻu ʻana ma mua o ka hoʻokuʻu ʻia ʻana i nā mea hoʻohana āpau.
Kubernetes Deployment (hōʻano hou ʻia)
ʻO ka hoʻolālā paʻamau no ka Kubernetes Deployment he rolling-update, kahi i hoʻokuʻu ʻia ai kekahi helu o nā pods me nā mana hou o nā kiʻi. Inā hana ʻia lākou me ka pilikia ʻole, hoʻopau ʻia nā pods me nā kiʻi kahiko, a hana ʻia nā pods hou i ka like.
GitOps
Hoʻohana mākou iā GitOps i kēia hiʻohiʻona no ka mea:
e hoʻohana ana iā Git i kumu hoʻokahi o ka ʻoiaʻiʻo
hoʻohana mākou i nā hana Git no ke kūkulu ʻana a me ka hoʻolaha ʻana (ʻaʻohe kauoha ʻē aʻe ma mua o ka git tag / merge pono)
Pākuhi:
E hoʻomaʻamaʻa maikaʻi kāua - e loaʻa i hoʻokahi waihona no ke code noi a hoʻokahi no ka ʻoihana.
Waihona palapala noi
He Python + Flask API maʻalahi kēia e hoʻihoʻi i kahi pane e like me JSON. E kūkulu mākou i ka pōʻai ma o GitlabCI a pana i ka hopena i ka Registry Gitlab. I loko o ke kākau inoa ʻelua mau mana hoʻokuʻu ʻokoʻa:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
ʻO ka ʻokoʻa wale nō ma waena o lākou ʻo ka hoʻololi ʻana i ka faila JSON i hoʻihoʻi ʻia. Hoʻohana mākou i kēia noi e ʻike maʻalahi i ka mana a mākou e kamaʻilio nei.
Hale waihona waiwai
Ma kēia turnip e hoʻokau mākou ma o GitlabCI i Kubernetes, .gitlab-ci.yml penei:
No ka hoʻomaka ʻana i ka hana mua, hiki iā ʻoe ke hoʻomaka i ka pipeline GitlabCI me ka lima ma ka lālā kumu. Ma hope o kēlā kubectl pono e hoʻopuka i kēia mau mea:
ʻIke mākou app deployment me 10 replicas a me app-canary me 0. Aia kekahi LoadBalancer kahi e hiki ai iā mākou ke komo ma o curl ma o waho IP:
while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done
ʻIke mākou ua hoʻihoʻi wale kā mākou noi hōʻike "v1".
Ke hoʻokō nei i ka hoʻolaha Canary
KaʻAnuʻu Hana 1: hoʻokuʻu i kahi mana hou no kekahi mau mea hoʻohana
Hoʻonoho mākou i ka helu o nā replicas i 1 ma ka faila deploy-canary.yaml a me ke kiʻi mana hou:
Paipai mākou i kēia mau hoʻololi i ka waihona kahi e hoʻomaka ai ka hoʻoili ʻana (ma GitlabCI) a ʻike i ka hopena:
E kuhikuhi kā mākou lawelawe i nā hoʻolālā ʻelua, no ka mea, aia nā mea ʻelua i ka mea koho app. Ma muli o ka hoʻololi ʻana o Kubernetes, pono mākou e ʻike i nā pane like ʻole no ~10% o nā noi:
ʻO ke kūlana o kēia manawa o kā mākou noi (GitOps, i lawe ʻia mai Git ma ke ʻano he kumu hoʻokahi o ka ʻoiaʻiʻo) ʻo ia ka loaʻa ʻana o ʻelua hoʻolālā me nā replicas ikaika, hoʻokahi no kēlā me kēia mana.
~ 10% o nā mea hoʻohana e kamaʻāina me kahi mana hou a hoʻāʻo ʻole ʻia. ʻO ka manawa kēia e nānā ai i nā hewa i nā lāʻau a me ka nānā ʻana i ka ʻikepili e ʻike i nā pilikia.
KaʻAnuʻu Hana 2: E hoʻokuʻu i ka mana hou i nā mea hoʻohana a pau
Ua hoʻoholo mākou ua holo maikaʻi nā mea āpau a i kēia manawa pono mākou e ʻōwili i ka mana hou i nā mea hoʻohana āpau. No ka hana ʻana i kēia, hoʻonui wale mākou deploy.yaml hoʻokomo i kahi mana hou o ke kiʻi a me ka helu o nā replicas like me 10. In deploy-canary.yaml hoʻonoho mākou i ka helu o nā replicas i 0. Ma hope o ka hoʻolaha ʻana, penei ka hopena:
E hōʻuluʻulu
Noʻu, ʻo ka holo ʻana i ka hoʻoili lima me kēia ala e kōkua i ka hoʻomaopopo ʻana i ka maʻalahi hiki ke hoʻonohonoho ʻia me ka hoʻohana ʻana i k8s. Ma muli o ka ʻae ʻana o Kubernetes iā ʻoe e hoʻololi i nā mea āpau ma o ka API, hiki ke hoʻohana ʻia kēia mau ʻanuʻu ma o nā palapala.
ʻO kahi mea ʻē aʻe e pono e hoʻokō ʻia he wahi hōʻike hōʻike (LoadBalancer a i ʻole ma o Ingress) kahi e hiki ai ke komo i ka mana hou. Hiki ke hoʻohana ʻia no ka mākaʻikaʻi lima.
Ma nā ʻatikala e hiki mai ana, e nānā mākou i nā hoʻonā ʻokoʻa ʻē aʻe e hoʻokō i ka hapa nui o nā mea a mākou i hana ai.
E heluhelu pū i nā ʻatikala ʻē aʻe ma kā mākou blog: