werf - kā mākou mea hana no CI/CD ma Kubernetes (nānā a me ka hōʻike wikiō)
Mei 27 ma ke keʻena nui o ka hālāwai DevOpsConf 2019, i mālama ʻia ma ke ʻano he ʻahaʻaina. RIT++ 2019, ma ke ʻano he ʻāpana o ka ʻāpana "Hoʻouna Hoʻomau", ua hāʻawi ʻia kahi hōʻike "werf - kā mākou mea hana no CI/CD ma Kubernetes." Ke kamaʻilio nei no kēlā mau mea nā pilikia a me nā paʻakikī e kū nei nā mea a pau i ka wā e hoʻouna ai iā Kubernetes, a me nā nuances ʻaʻole hiki ke ʻike koke ʻia. Ke ʻimi nei i nā hoʻonā hiki, hōʻike mākou i ke ʻano o ka hoʻokō ʻia ʻana o kēia ma kahi hāmeʻa Open Source werf.
Mai ka hōʻike ʻana, ua hōʻea kā mākou mea hoʻohana (i ʻike mua ʻia he dapp) i kahi moʻolelo koʻikoʻi o 1000 mau hōkū ma GitHub - Lana ko mākou manaʻo e hoʻonui ʻia ke kaiāulu o nā mea hoʻohana i ke ola no nā ʻenekini DevOps he nui.
No laila, e hoʻolauna kākou wikiō o ka hōʻike (~ 47 mau minuke, ʻoi aku ka ʻike ma mua o ka ʻatikala) a me ka unuhi nui mai ia mea ma ke ʻano kikokikona. Hele!
Hāʻawi i ke code iā Kubernetes
ʻAʻole e pili hou ka kamaʻilio e pili ana i ka werf, akā e pili ana iā CI / CD ma Kubernetes, e hōʻike ana ua hoʻopili ʻia kā mākou polokalamu i nā pahu Docker. (Ua kamaʻilio wau e pili ana i kēia ma 2016 hōʻike), a e hoʻohana ʻia nā K8 e holo i ka hana (ʻoi aʻe e pili ana i kēia ma 2017 makahiki).
He aha ke ʻano o ka lawe ʻana ma Kubernetes?
Aia kahi waihona Git me ke code a me nā kuhikuhi no ke kūkulu ʻana. Kūkulu ʻia ka noi i kahi kiʻi Docker a paʻi ʻia ma ka Docker Registry.
Aia i loko o ka waihona like nā ʻōlelo aʻoaʻo e pili ana i ka hoʻonohonoho ʻana a me ka holo ʻana i ka noi. Ma ka pae hoʻolālā, hoʻouna ʻia kēia mau ʻōlelo aʻoaʻo iā Kubernetes, ka mea e loaʻa ai ke kiʻi i makemake ʻia mai ka papa inoa a hoʻomaka.
Eia kekahi, aia nā hoʻokolohua maʻamau. Hiki ke hana i kekahi o ia mau mea ke paʻi kiʻi. Hiki iā ʻoe (ma muli o nā ʻōlelo aʻoaʻo hoʻokahi) e kau i kahi kope o ka noi (ma kahi inoa inoa K8s ʻokoʻa a i ʻole hui pū kekahi) a holo i nā hoʻokolohua ma laila.
ʻO ka mea hope loa, pono ʻoe i kahi ʻōnaehana CI e loaʻa ana nā hanana mai Git (a i ʻole kaomi pihi) a kāhea i nā pae i koho ʻia: kūkulu, hoʻolaha, hoʻolaha, hoʻāʻo.
Aia kekahi mau memo koʻikoʻi ma ʻaneʻi:
No ka mea, loaʻa iā mākou kahi ʻōnaehana hiki ʻole ke hoʻololi (hoʻololi pono ʻole), ke kiʻi noiʻi i hoʻohana ʻia ma nā pae āpau (staging, production, etc.), pono kekahi. Ua kamaʻilio wau e pili ana i kēia me nā mea kikoʻī a me nā laʻana. maanei.
No ka mea, hahai mākou i ka ʻōnaehana ma ke ʻano he code code (IaC), ka palapala noi, nā kuhikuhi no ka hui ʻana a me ka hoʻomaka ʻana pololei i loko o ka waihona hoʻokahi. No ka ʻike hou aku e pili ana i kēia, e ʻike ka hoike like.
kaulahao lawe (ka lawe ana) ʻike pinepine mākou e like me kēia: ua ʻākoakoa ka noi, hoʻāʻo ʻia, hoʻokuʻu ʻia (pae hoʻokuʻu) a ʻo ia - ua lawe ʻia ka lawe ʻana. Akā i ka ʻoiaʻiʻo, loaʻa i ka mea hoʻohana ka mea āu i ʻōwili ai, ole a laila i ka wā i hāʻawi ai ʻoe i ka hana, a hiki iā ia ke hele i laila a hana kēia hana. No laila ke manaʻoʻiʻo nei au ua pau ke kaulahao hoʻouna wale nō ma ka pae hana(holo), a ʻoi aku ka pololei, ʻoiai i ka manawa i wehe ʻia ai ke code mai ka hana ʻana (e hoʻololi iā ia me kahi mea hou).
E hoʻi kāua i ka papahana hoʻopuka i luna ma Kubernetes: ʻaʻole i hana ʻia e mākou wale nō, akā na ka poʻe a pau i hana i kēia pilikia. ʻO ka ʻoiaʻiʻo, ua kapa ʻia kēia ʻano ʻo GitOps (hiki iā ʻoe ke heluhelu hou aʻe e pili ana i ka huaʻōlelo a me nā manaʻo ma hope maanei). E nānā kākou i nā pae o ka papahana.
Ke kahua kūkulu
Me he mea lā hiki iā ʻoe ke kamaʻilio e pili ana i ke kūkulu ʻana i nā kiʻi Docker ma 2019, ke ʻike nā mea āpau pehea e kākau ai i Dockerfiles a holo. docker build?.. Eia nā nuances aʻu e makemake ai e nānā:
Kaumaha kiʻi mea nui, no laila e hoʻohana pae-nuie waiho i loko o ke kiʻi wale i ka palapala noi i pono maoli no ka hana.
Ka helu o nā papa pono e hoemiia ma ka hui ana i na kaulahao o RUN-kauoha e like me ke ano.
Eia naʻe, hoʻohui kēia i nā pilikia hoʻopalolei ʻana, no ka mea i ka wā e hāʻule ai ka hui, pono ʻoe e ʻimi i ke kauoha kūpono mai ke kaulahao i hoʻokumu ai i ka pilikia.
Ka wikiwiki o ka hui koʻikoʻi no ka mea makemake mākou e ʻōwili koke i nā loli a ʻike i nā hopena. No ka laʻana, ʻaʻole ʻoe makemake e kūkulu hou i nā hilinaʻi i nā hale waihona ʻōlelo i kēlā me kēia manawa āu e kūkulu ai i kahi noi.
ʻO ka manawa pinepine mai kahi waihona Git āu e pono ai he nui na kii, hiki ke hoʻoholo ʻia e kahi hoʻonohonoho o Dockerfiles (a i kapa ʻia nā pae i hoʻokahi faila) a me kahi palapala Bash me kā lākou hui pū.
ʻO kēia wale nō ka piko o ka hau hau a nā mea a pau. Akā aia kekahi mau pilikia ʻē aʻe, ʻo ia hoʻi:
ʻO ka manawa pinepine ma ka pae hui e pono ai mākou i kahi mea mauna (no ka laʻana, hūnā i ka hopena o kahi kauoha e like me apt i kahi papa kuhikuhi ʻaoʻao ʻekolu).
Makemake mākou ʻO ke kūpono ma kahi o ke kākau ʻana ma ka pūpū.
Makemake mākou kūkulu me ka Docker ʻole (no ke aha mākou e makemake ai i kahi mīkini virtual hou e pono ai mākou e hoʻonohonoho i nā mea āpau no kēia, inā loaʻa iā mākou kahi hui Kubernetes i hiki ai iā mākou ke holo i nā ipu?).
Hui like, hiki ke hoʻomaopopo ʻia ma nā ʻano like ʻole: nā kauoha like ʻole mai ka Dockerfile (inā hoʻohana ʻia nā pae he nui), nā hana like ʻole o ka waihona like, nā Dockerfiles.
Huipuia mahele: Makemake mākou e hōʻiliʻili i nā mea i loko o nā pods "ephemeral" no ka mea nalowale kā lākou huna huna, ʻo ia hoʻi, pono e mālama ʻia ma kahi kaʻawale.
ʻO ka hope, ua kapa wau i ka piko o nā makemake hoʻokalakupua: He mea maikaʻi ke hele i ka waihona, kākau i kekahi kauoha a kiʻi i kahi kiʻi i mākaukau ʻia, i hui pū ʻia me ka ʻike pehea a me ka mea e hana pono ai. Eia naʻe, ʻaʻole maopopo iaʻu i hiki ke ʻike mua ʻia nā nuances āpau i kēia ala.
A eia nā papahana:
moby/buildkit - kahi mea kūkulu hale mai Docker Inc (ua hoʻohui ʻia i nā mana o Docker o kēia manawa), e hoʻāʻo nei e hoʻoponopono i kēia mau pilikia āpau;
kaniko - kahi mea kūkulu hale mai Google e ʻae iā ʻoe e kūkulu me ka ʻole o Docker;
Buildpacks.io - ʻO ka hoʻāʻo ʻana o CNCF e hana i ka hana kilokilo a, ʻo ia hoʻi, kahi hopena hoihoi me ka rebase no nā papa;
... a nānā i ka nui o nā hōkū iā lākou ma GitHub. ʻO ia hoʻi, ma kekahi ʻaoʻao, docker build aia a hiki ke hana i kekahi mea, akā i ka ʻoiaʻiʻo ʻaʻole i hoʻoholo ʻia ka pilikia - ʻo ka hōʻoia o kēia ka hoʻomohala like ʻana o nā ʻohi hōʻiliʻili ʻē aʻe, kēlā me kēia mea e hoʻonā i kekahi ʻāpana o nā pilikia.
Hui ma werf
No laila ua loaʻa iā mākou werf(ma mua kaulana like dapp) - He mea hoʻohana open source mai ka hui Flant, a mākou i hana ai no nā makahiki he nui. Ua hoʻomaka nā mea a pau i 5 mau makahiki i hala aku nei me nā palapala Bash e hoʻonui ana i ka hui ʻana o Dockerfiles, a no nā makahiki 3 i hala iho nei ua hoʻokō ʻia ka hoʻomohala piha ʻana i loko o ka hoʻolālā o hoʻokahi papahana me kāna waihona Git ponoʻī. (ma Ruby mua, a laila kākau hou ʻia e hele, a ma ka manawa like i kapa hou ʻia). He aha nā pilikia hui i hoʻoholo ʻia ma werf?
Ua hoʻokō ʻia nā pilikia i uhi ʻia i ka uliuli, ua hana ʻia ke kūkulu like ʻana i loko o ka hale hoʻokahi, a ua hoʻolālā ʻia nā pilikia i hōʻike ʻia i ka melemele e hoʻopau ʻia i ka hopena o ke kauwela.
Ka pae o ka paʻi ʻana ma ke kākau inoa (hoʻolaha)
Kāhea mākou docker push... - he aha ka mea paʻakikī e pili ana i ka hoʻouka ʻana i kahi kiʻi i ke kākau inoa? A laila kū mai ka nīnau: "He aha kaʻu e kau ai ma ke kiʻi?" Ke ala nei no ke kumu i loaʻa iā mākou ʻO Gitflow (a i ʻole ka hoʻolālā Git ʻē aʻe) a me nā Kubernetes, a ke hoʻāʻo nei ka ʻoihana e hōʻoia i ka mea e hana nei ma Kubernetes e hahai i ka mea e hana ai ma Git. Ma hope o nā mea a pau, ʻo Git wale nō kā mākou kumu o ka ʻoiaʻiʻo.
He aha ka paʻakikī o kēia? E hōʻoia i ka reproducibility: mai kahi commit ma Git, he mea hiki ʻole ke hoʻololi ʻia (hiki ʻole), i kahi kiʻi Docker, pono e mālama like.
He mea nui ia iā mākou hoʻoholo i ke kumu, no ka mea makemake mākou e hoʻomaopopo i ka mea i kūkulu ʻia ai ka noi e holo ana ma Kubernetes (a laila hiki iā mākou ke hana i nā diffs a me nā mea like).
Nā Kūlana Hoʻopaʻa inoa
He maʻalahi ka mea mua git tag. Loaʻa iā mākou kahi papa inoa me kahi kiʻi i hōʻailona ʻia e like me 1.0. Loaʻa i nā Kubernetes ke kahua a me ka hana ʻana, kahi i hoʻoili ʻia ai kēia kiʻi. Ma Git hana mākou i nā hana a i kekahi manawa mākou e kau inoa 2.0. Hōʻiliʻili mākou e like me nā ʻōlelo aʻoaʻo mai ka waihona a waiho i loko o ka papa inoa me ka tag 2.0. Holoi mākou i waho i ke kahua a, inā maikaʻi nā mea a pau, a laila i ka hana.
ʻO ka pilikia me kēia ala, ʻo ia ka mea i hoʻonohonoho mua i ka tag, a laila hoʻāʻo a ʻōwili ʻia. No ke aha mai? ʻO ka mea mua, ʻaʻole kūpono: ke hoʻopuka nei mākou i kahi mana o ka polokalamu a mākou i hoʻāʻo ʻole ai (ʻaʻole hiki iā mākou ke hana ʻē aʻe, no ka mea, i mea e nānā ai, pono mākou e kau i kahi hōʻailona). ʻO ka lua, ʻaʻole kūpono kēia ala me Gitflow.
ʻO ke koho lua git commit + hōʻailona. He hōʻailona ko ka lālā kumu 1.0; no ka mea i loko o ke kākau inoa - he kiʻi i kau ʻia i ka hana. Eia kekahi, loaʻa i ka hui Kubernetes nā hiʻohiʻona a me ka hoʻonohonoho ʻana. A laila hahai mākou iā Gitflow: ma ka lālā nui no ka hoʻomohala ʻana (develop) hana mākou i nā hiʻohiʻona hou, e hopena i ka hana me ka mea ʻike #c1. E hōʻiliʻili mākou a hoʻolaha iā ia i loko o ka papa inoa me ka hoʻohana ʻana i kēia mea ʻike (#c1). Me ka mea hōʻike like mākou e holo ai e nānā. Hana like mākou me nā commits #c2 и #c3.
Ke ʻike mākou ua lawa nā hiʻohiʻona, hoʻomaka mākou e hoʻopaʻa i nā mea āpau. E hana i lālā ma Git release_1.1 (ma ke kumu #c3 mai develop). ʻAʻohe pono e hōʻiliʻili i kēia hoʻokuʻu, no ka mea ... ua hana ʻia kēia ma ka pae mua. No laila, hiki iā mākou ke ʻōwili wale iā ia i ke kahua. Hoʻoponopono mākou i nā hewa i loko #c4 a like me ka ʻōwili ʻana i ke kahua. I ka manawa like, ke hoʻomau nei ka hoʻomohala ʻana develop, kahi e lawe ʻia ai nā loli i kēlā me kēia manawa release_1.1. I kekahi manawa, loaʻa iā mākou kahi hana i hōʻuluʻulu ʻia a hoʻouka ʻia i ka staging, a mākou e hauʻoli nei (#c25).
A laila hoʻohui mākou (me ka wikiwiki-i mua) i ka lālā hoʻokuʻu (release_1.1) ma ka haku. Hoʻokomo mākou i kahi hōʻailona me ka mana hou ma kēia hana (1.1). Akā, ua hōʻiliʻili ʻia kēia kiʻi i loko o ka papa inoa, no laila i ʻole e hōʻiliʻili hou, hoʻohui mākou i kahi hōʻailona lua i ke kiʻi i loaʻa (i kēia manawa he mau hōʻailona ma ka papa inoa. #c25 и 1.1). Ma hope o kēlā, ʻōwili mākou i ka hana.
Aia kekahi hemahema, hoʻokahi wale nō kiʻi i hoʻoili ʻia i ke kahua hoʻokūkū (#c25), a ma ka hana ʻana he ʻano ʻokoʻa (1.1), akā ʻike mākou ʻo "ke kino" kēia kiʻi like mai ka papa inoa.
ʻO ka hemahema maoli, ʻaʻohe kākoʻo no ka hui ʻana, pono ʻoe e hana wikiwiki.
Hiki iā mākou ke hele hou a hana i kahi hoʻopunipuni ... E nānā i kahi laʻana o kahi Dockerfile maʻalahi:
FROM ruby:2.3 as assets
RUN mkdir -p /app
WORKDIR /app
COPY . ./
RUN gem install bundler && bundle install
RUN bundle exec rake assets:precompile
CMD bundle exec puma -C config/puma.rb
FROM nginx:alpine
COPY --from=assets /app/public /usr/share/nginx/www/public
E kūkulu kākou i kahi faila mai ia mea mai e like me kēia kumu.
SHA256 mai nā mea ʻike o nā kiʻi i hoʻohana ʻia (ruby:2.3 и nginx:alpine), ʻo ia nā helu helu o kā lākou ʻike;
nā hui a pau (RUN, CMD etc.);
SHA256 mai nā faila i hoʻohui ʻia.
... a lawe i ka checksum (hou SHA256) mai ia faila. ʻO kēia pūlima nā mea a pau e wehewehe i nā mea o ke kiʻi Docker.
E hoʻi kāua i ke kiʻikuhi a ma kahi o ka commit e hoʻohana mākou i ia mau pūlima, i.e. e hōʻailona i nā kiʻi me nā pūlima.
I kēia manawa, i ka wā e pono ai, no ka laʻana, e hoʻohui i nā loli mai ka hoʻokuʻu ʻana i ka haku, hiki iā mākou ke hana i kahi hui hui maoli: e loaʻa iā ia kahi ʻike ʻokoʻa, akā ʻo ka pūlima like. Me ka mea hōʻike like e ʻōwili mākou i ke kiʻi i ka hana.
ʻO ka hemahema ʻo ia i kēia manawa ʻaʻole hiki ke hoʻoholo i ke ʻano o ka hana i hoʻokau ʻia i ka hana - hana wale nā checksums ma kahi ʻaoʻao. Hoʻoholo ʻia kēia pilikia e kahi papa hou me ka metadata - e haʻi hou aku wau iā ʻoe ma hope.
Kau ʻana ma werf
Ma werf ua hele hou aku mākou a ke hoʻomākaukau nei mākou e hana i kahi kūkulu i hoʻokaʻawale ʻia me kahi huna i mālama ʻole ʻia ma ka mīkini hoʻokahi ... No laila, ke kūkulu nei mākou i ʻelua ʻano kiʻi Docker, kapa mākou iā lākou. ke kahua и kiʻi.
Mālama ka werf Git waihona i nā ʻōlelo kuhikuhi kikoʻī e wehewehe i nā pae like ʻole o ke kūkulu ʻana (beforeInstall, e hoʻohui, ma mua o ka hoʻonohonoho, hoʻonoho). ʻOhi mākou i ke kiʻi pae mua me kahi pūlima i wehewehe ʻia e like me ka checksum o nā ʻanuʻu mua. A laila hoʻohui mākou i ke code kumu, no ke kiʻi pae hou mākou e helu ai i kāna checksum ... Hoʻopau hou ʻia kēia mau hana no nā pae āpau, ma muli o ka loaʻa ʻana o kahi kiʻi o ke kahua. A laila hana mākou i ke kiʻi hope loa, aia pū kekahi metadata e pili ana i kona kumu. A kau mākou i kēia kiʻi ma nā ʻano like ʻole (nā kikoʻī ma hope).
Inā paha ma hope o kēia ʻike ʻia kahi hana hou kahi i hoʻololi ʻia ai ke code noi. He aha ka hopena? No nā hoʻololi code, e hana ʻia kahi pākuʻi a e hoʻomākaukau ʻia kahi kiʻi pae hou. E hoʻoholo ʻia kona pūlima ma ke ʻano he checksum o ke kiʻi kahua kahiko a me ka pā hou. E hoʻokumu ʻia kahi kiʻi hope hou mai kēia kiʻi. Hiki ke hana like me nā hoʻololi i nā pae ʻē aʻe.
No laila, ʻo nā kiʻi kiʻi kiʻi he cache hiki ke mālama ʻia, a ua hoʻoili ʻia nā kiʻi i hana ʻia mai ia mea i ka Docker Registry.
Hoʻomaʻemaʻe i ka papa inoa
ʻAʻole mākou e kamaʻilio e pili ana i ka holoi ʻana i nā papa i waiho ʻia ma hope o ka holoi ʻana i nā hōʻailona - he hiʻohiʻona maʻamau kēia o ka Docker Registry ponoʻī. Ke kamaʻilio nei mākou e pili ana i kahi kūlana i ka wā e hōʻiliʻili ai ka nui o nā inoa Docker a maopopo mākou ʻaʻole pono mākou i kekahi o lākou, akā lawe lākou i kahi (a / a uku mākou no ia).
He aha nā hoʻolālā hoʻomaʻemaʻe?
ʻAʻole hiki iā ʻoe ke hana mai hoomaemae. I kekahi manawa, ʻoi aku ka maʻalahi o ka uku liʻiliʻi no kahi keu aku ma mua o ka wehe ʻana i kahi kuʻi nui o nā hōʻailona. Akā, hana wale kēia i kekahi wahi.
Hoʻopau piha. Inā holoi ʻoe i nā kiʻi āpau a kūkulu hou i nā kiʻi i kēia manawa i loko o ka ʻōnaehana CI, hiki mai kahi pilikia. Inā hoʻomaka hou ka pahu i ka hana ʻana, e hoʻouka ʻia kahi kiʻi hou nona - kahi kiʻi ʻaʻole i hoʻāʻo ʻia e kekahi. Hoʻopau kēia i ka manaʻo o ka ʻōnaehana pono ʻole.
ʻŌmaʻomaʻo ʻōmaʻomaʻo. Ua hoʻomaka ka nui o kahi papa inoa - hoʻouka mākou i nā kiʻi i kekahi. ʻO ka pilikia like me ke ʻano ma mua: i ka manawa hea e hiki ai iā ʻoe ke hoʻomaʻemaʻe i ka hoʻopaʻa inoa i hoʻomaka e kahe?
I ka manawa. Holoi i nā kiʻi āpau ma mua o 1 mahina? Akā e loaʻa maoli kahi lawelawe ʻaʻole i hoʻonui ʻia no hoʻokahi mahina ...
Nānā e hoʻoholo i ka mea hiki ke holoi ʻia.
ʻElua mau koho kūpono maoli: mai hoʻomaʻemaʻe a i ʻole hui pū ʻana o ka blue-green + me ka lima. Ma ka hihia hope, ke kamaʻilio nei mākou e pili ana i kēia: ke hoʻomaopopo ʻoe ua hiki i ka manawa e hoʻomaʻemaʻe i ka papa inoa, hana ʻoe i kahi mea hou a hoʻohui i nā kiʻi hou a pau iā ia i ka wā o, no ka laʻana, hoʻokahi mahina. A ma hope o hoʻokahi mahina, e ʻike i nā pods ma Kubernetes e hoʻohana mau nei i ka papa inoa kahiko, a e hoʻoili pū iā lākou i ka papa inoa hou.
He aha kā mākou i hele mai ai werf? ʻOhi mākou:
Ke poʻo Git: nā hōʻailona a pau, nā lālā a pau, me ka manaʻo e pono mākou i nā mea a pau i kau ʻia ma Git i nā kiʻi (a inā ʻaʻole, a laila pono mākou e holoi iā ia ma Git iho);
nā ʻōpala a pau i hoʻokuʻu ʻia i Kubernetes;
kahiko ReplicaSets (nā mea i hoʻokuʻu hou ʻia), a ke manaʻo nei mākou e nānā i nā hoʻokuʻu Helm a koho i nā kiʻi hou loa ma laila.
... a hana i kahi papa inoa keʻokeʻo mai kēia hoʻonohonoho - he papa inoa o nā kiʻi ʻaʻole mākou e holoi. Hoʻomaʻemaʻe mākou i nā mea ʻē aʻe a pau, ma hope o ka loaʻa ʻana o nā kiʻi ʻōpio makua ʻole a holoi pū kekahi.
Hoʻolālā pae
ʻO ka ʻōlelo hoʻolaha hilinaʻi
ʻO ka mea mua aʻu e makemake ai e huki i ka nānā ʻana i ka hoʻolaha ʻana, ʻo ia ka rollout o ka hoʻonohonoho waiwai hou, i haʻi ʻia me ka haʻi. ʻOkoʻa loa ka palapala YAML kumu e wehewehe ana i nā kumuwaiwai Kubernetes mai ka hopena e holo maoli ana i ka pūʻulu. No ka mea, hoʻohui ʻo Kubernetes i ka hoʻonohonoho:
mea hōʻike;
ʻike lawelawe;
nui nā waiwai paʻamau;
ʻāpana me ke kūlana o kēia manawa;
nā hoʻololi i hana ʻia ma ke ʻano o ka webhook komo;
ka hopena o ka hana a nā mea hoʻoponopono like ʻole (a me ka mea hoʻonohonoho).
No laila, ke ʻike ʻia kahi hoʻonohonoho kumu waiwai hou (hou), ʻaʻole hiki iā mākou ke lawe a kākau i ka hoʻonohonoho "ola" me ia (ola). No ka hana ʻana i kēia, pono mākou e hoʻohālikelike hou me ka hoʻonohonoho hope i noi ʻia (hoʻopili hope) a kaʻa i luna ola loaʻa i ka pā.
Kapa ʻia kēia ʻano hana Hui 2 ala. Hoʻohana ʻia, no ka laʻana, ma Helm.
Aia kekahi Hui 3 ala, ʻokoʻa i kēlā:
hoohalike ana hoʻopili hope и hou, nānā mākou i ka mea i holoi ʻia;
hoohalike ana hou и ola, nānā mākou i nā mea i hoʻohui ʻia a hoʻololi ʻia;
ua hoʻopili ʻia ka ʻāpana i hōʻuluʻulu ʻia ola.
Hoʻokomo mākou i 1000+ mau noi me Helm, no laila ke ola maoli nei mākou me ka hui ʻana 2-ala. Eia nō naʻe, he nui nā pilikia a mākou i hoʻoponopono ai me kā mākou pākuʻi, e kōkua iā Helm e hana maʻamau.
Ke kūlana rollout maoli
Ma hope o ka hana ʻana o kā mākou ʻōnaehana CI i kahi hoʻonohonoho hou no nā Kubernetes e pili ana i ka hanana aʻe, hoʻouna ia no ka hoʻohana (pili) i kahi hui - me ka Helm a i ʻole kubectl apply. A laila, hiki mai ka hui N-way i wehewehe mua ʻia, kahi i pane ʻia ai ka Kubernetes API i ka ʻōnaehana CI, a i kāna mea hoʻohana.
Eia naʻe, aia kahi pilikia nui: ma hope o nā mea a pau ʻAʻole manaʻo ka holomua o ka hoʻohana ʻana. Inā ʻike ʻo Kubernetes i nā hoʻololi e pono e hoʻopili ʻia a hoʻohana ʻia, ʻaʻole maopopo mākou i ka hopena. No ka laʻana, hiki ke holomua a hoʻomaka hou i nā pods ma ka frontend, akā ʻaʻole ma ka hope, a e loaʻa iā mākou nā mana like ʻole o nā kiʻi noi e holo nei.
No ka hana pololei ʻana i nā mea āpau, pono kēia papahana i kahi loulou hou - kahi tracker kūikawā e loaʻa ai ka ʻike kūlana mai ka Kubernetes API a hoʻouna iā ia no ka nānā hou ʻana i ke kūlana maoli o nā mea. Ua hana mākou i kahi waihona Open Source ma Go - cubedog(e nānā i kāna hoʻolaha maanei), ka mea e hoʻoponopono ai i kēia pilikia a kūkulu ʻia i werf.
Hoʻonohonoho ʻia ke ʻano o kēia tracker ma ka pae werf me ka hoʻohana ʻana i nā annotations i kau ʻia ma Deployments a i ʻole StatefulSets. Hōʻike nui - fail-mode - hoʻomaopopo i kēia mau manaʻo:
IgnoreAndContinueDeployProcess - ke nānā ʻole nei mākou i nā pilikia o ka ʻōwili ʻana i kēia ʻāpana a hoʻomau i ka waiho ʻana;
FailWholeDeployProcessImmediately - ka hewa i loko o kēia ʻāpana e hoʻōki i ke kaʻina hana;
HopeUntilEndOfDeployProcess - Manaʻolana mākou e hana kēia ʻāpana ma ka hopena o ka hoʻolaha.
No ka laʻana, ʻo kēia hui pū ʻana o nā kumuwaiwai a me nā waiwai hōʻike fail-mode:
Ke kau nei mākou no ka manawa mua, ʻaʻole mākaukau ka waihona (MongoDB) - E hāʻule nā hoʻohana. Akā hiki iā ʻoe ke kali i ka manawa e hoʻomaka ai, a e hoʻomau ʻia ke kau ʻana.
ʻElua mau hōʻike hou aku no kubedog ma werf:
failures-allowed-per-replica - ka helu o nā hāʻule i ʻae ʻia no kēlā me kēia kope;
show-logs-until - hoʻoponopono i ka manawa a hiki i ka werf e hōʻike ai (ma stdout) i nā lāʻau mai nā pods āpau i ʻōwili ʻia. ʻO ka paʻamau PodIsReady (e haʻalele i nā memo a mākou makemake ʻole i ka wā e hoʻomaka ai ke kaʻa i ka pod), akā kūpono nā waiwai: ControllerIsReady и EndOfDeploy.
He aha hou aʻe kā mākou e makemake ai mai ka hoʻolaha ʻana?
Ma waho aʻe o nā mea ʻelua i wehewehe ʻia, makemake mākou:
e ʻike lāʻau lāʻau - a me nā mea pono wale nō, ʻaʻole nā mea āpau i ka lālani;
ala holomua, no ka mea, inā e kau ka hana "me ka leo" no kekahi mau minuke, he mea nui e hoʻomaopopo i ka mea e hana nei ma laila;
i hoʻihoʻi ʻakomi inā i hewa kekahi mea (a no laila he mea koʻikoʻi ke ʻike i ke kūlana maoli o ka hoʻolaha ʻana). Pono ka ʻōwili ʻana i ka atomic: a hiki i ka hopena, a i ʻole e hoʻi nā mea a pau i kona kūlana mua.
Nā hopena
No mākou ma ke ʻano he hui, e hoʻokō i nā nuances i wehewehe ʻia ma nā ʻano like ʻole o ka lawe ʻana (kūkulu, hoʻolaha, hoʻolaha), ua lawa kahi ʻōnaehana CI a me ka pono. werf.
Ma kahi o ka hopena:
Me ke kōkua o werf, ua holomua maikaʻi mākou i ka hoʻoponopono ʻana i nā pilikia he nui no nā ʻenekini DevOps a e hauʻoli paha inā hoʻāʻo ka lehulehu ākea i kēia pono i ka hana. E maʻalahi ka loaʻa ʻana o kahi hopena maikaʻi me ka hui pū.
Nā wikiō a me nā paheʻe
Video mai ka hana (~ 47 minuke):
Hōʻike i ka hōʻike:
PS
Nā hōʻike ʻē aʻe e pili ana iā Kubernetes ma kā mākou blog: