Te Whakatairanga Canary ma te whakamahi i a Jenkins-X Istio Flagger
Ka mahia e matou te tohatoha Canary ma te ringa o GitOps me te hanga/whakarereke i nga rauemi matua Kubernetes. Ko te tikanga tenei tuhinga mo te whakataki me pehea te mahi i roto i te Kubernetes Canary, na te mea he maha ake nga tikanga mo te mahi aunoa, ka whakaarohia e tatou i roto i nga tuhinga e whai ake nei.
Ma te rautaki Canary, ka tono tuatahi nga whakahoutanga ki tetahi waahanga o nga kaiwhakamahi. Na roto i te aro turuki, i nga raraunga rangitaki, i nga whakamatautau a-ringa, i etahi atu huarahi urupare ranei, ka whakamatauhia te tukunga i mua i te tuku ki nga kaiwhakamahi katoa.
Te Whakataunga Kubernetes (whakahoutanga hurihuri)
Ko te rautaki taunoa mo Kubernetes Deployment kei te huri-whakahou, i reira ka whakarewahia te maha o nga putunga me nga putanga hou o nga whakaahua. Mena i hangaia kaore he raruraru, ka mutu nga pene me nga ahua tawhito o nga whakaahua, ka hangaia nga pene hou i roto i te whakarara.
GitOps
Ka whakamahia e matou a GitOps i tenei tauira na te mea:
te whakamahi i a Git hei puna kotahi o te pono
Ka whakamahia e matou nga Mahi a Git mo te hanga me te tuku (kaore he whakahau i tua atu i te git tag/hanumi e hiahiatia ana)
Hei tauira:
Me mahi pai - kia kotahi te putunga mo te waehere tono me tetahi mo nga hanganga.
Pupuri tono
He Python+Flask API tino ngawari tenei e whakahoki mai ana i te urupare hei JSON. Ka hangaia e matou te kete ma te GitlabCI ka pana te hua ki te Rehita Gitlab. I roto i te rehita e rua nga putanga tuku rereke:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Ko te rereketanga anake i waenga i a raatau ko te huringa o te konae JSON kua whakahokia. Ka whakamahia e matou tenei tono ki te tiro ngawari ki te ahua o te putanga e korero ana matou.
Pupuri hangahanga
I tenei kemu ka tukuna ma te GitlabCI ki Kubernetes, .gitlab-ci.yml penei te ahua:
Kia mahara ko te tuku-taupānga kaore ano kia tautuhia he tauira.
Te mahi tukunga tuatahi
Hei tiimata i te tukunga tuatahi, ka taea e koe te tiimata i te paipa GitlabCI i runga i te peka matua. I muri i tera kubectl me whakaputa nga mea e whai ake nei:
Ka kite tatou app deployment with 10 replicas and app-canary with 0. He LoadBalancer ano ka taea e tatou te uru atu curl mā IP waho:
while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done
Ka kite matou ko ta maatau tono whakamatautau ka hoki mai "v1".
Te whakahaere i te tohatoha Canary
Hipanga 1: tuku he putanga hou mo etahi kaiwhakamahi
Ka tautuhia e matou te maha o nga tauira ki te 1 i roto i te konae deploy-canary.yaml me te ahua putanga hou:
Ka panaia e matou enei huringa ki te putunga ka tiimata te tuku (ma GitlabCI) ka kite i te hua:
Ka tohu ta maatau Ratonga ki nga waahanga e rua, na te mea kei a raua te kaiwhiri tono. Na te mahi matapōkere taunoa a Kubernetes, me kite tatou i nga whakautu rereke mo ~10% o nga tono:
Ko te ahuatanga o to maatau tono (GitOps, i tangohia mai i a Git hei Puna Kotahi o te Pono) ko te aroaro o nga waahanga e rua me nga tauira kaha, kotahi mo ia putanga.
~10% o nga kaiwhakamahi ka waia ki tetahi putanga hou, ka whakamatau pohehe. Ko te wa tenei ki te tirotiro mo nga hapa i roto i nga raarangi me nga raraunga aroturuki ki te rapu raru.
Hipanga 2: Tukuna te putanga hou ki nga kaiwhakamahi katoa
I whakatauhia e maatau i pai nga mea katoa, a inaianei me whakaputa te putanga hou ki nga kaiwhakamahi katoa. Hei mahi i tenei ka whakahou noa matou deploy.yaml te whakauru i tetahi putanga hou o te ahua me te maha o nga tauira rite ki te 10. In deploy-canary.yaml ka tautuhia e matou te maha o nga tauira ki te 0. I muri i te tukunga, ka penei te hua:
Hei whakariterite
Ki ahau nei, ko te whakahaere a-ringa i te horahanga ma tenei huarahi ka maarama te ngawari ki te whirihora ma te whakamahi i nga k8s. I te mea ka taea e Kubernetes te whakahou i nga mea katoa ma te API, ka taea te mahi aunoa i enei mahi ma nga tuhinga.
Ko tetahi atu mea e tika ana kia whakatinanahia he waahi whakauru whakamatautau (LoadBalancer, ma te Ingress ranei) ka taea te uru atu ki te putanga hou. Ka taea te whakamahi mo te tirotiro a-ringa.
I nga tuhinga a muri ake nei, ka tirohia e matou etahi atu otinga aunoa e whakatinana ana i te nuinga o nga mea kua mahia e matou.
Panuihia etahi atu tuhinga i runga i ta maatau blog: