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.

werf - kā mākou mea hana no CI/CD ma Kubernetes (nānā a me ka hōʻike wikiō)

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.

werf - kā mākou mea hana no CI/CD ma Kubernetes (nānā a me ka hōʻike wikiō)

Aia kekahi mau memo koʻikoʻi ma ʻaneʻi:

  1. 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.
  2. 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.
  3. 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ā:

  1. 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.
  2. Ka helu o nā papa pono e hoemiia ma ka hui ana i na kaulahao o RUN-kauoha e like me ke ano.
  3. 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.
  4. 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.
  5. ʻ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:

  1. ʻ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).
  2. Makemake mākou ʻO ke kūpono ma kahi o ke kākau ʻana ma ka pūpū.
  3. 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?).
  4. 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.
  5. 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.
  6. ʻ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 me ka pūʻulu o nā pono hana ʻē aʻe, e like me buildah, nā mea hana maoli/img...

... 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?

werf - kā mākou mea hana no CI/CD ma Kubernetes (nānā a me ka hōʻike wikiō)

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.

werf - kā mākou mea hana no CI/CD ma Kubernetes (nānā a me ka hōʻike wikiō)

ʻ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.

werf - kā mākou mea hana no CI/CD ma Kubernetes (nānā a me ka hōʻike wikiō)

ʻ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.

werf - kā mākou mea hana no CI/CD ma Kubernetes (nānā a me ka hōʻike wikiō)

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.

werf - kā mākou mea hana no CI/CD ma Kubernetes (nānā a me ka hōʻike wikiō)

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).

werf - kā mākou mea hana no CI/CD ma Kubernetes (nānā a me ka hōʻike wikiō)

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.

werf - kā mākou mea hana no CI/CD ma Kubernetes (nānā a me ka hōʻike wikiō)

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?

  1. ʻ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.
  2. 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.
  3. ʻŌ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?
  4. 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 ...
  5. 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:

  1. 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);
  2. nā ʻōpala a pau i hoʻokuʻu ʻia i Kubernetes;
  3. 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:

  1. mea hōʻike;
  2. ʻike lawelawe;
  3. nui nā waiwai paʻamau;
  4. ʻāpana me ke kūlana o kēia manawa;
  5. nā hoʻololi i hana ʻia ma ke ʻano o ka webhook komo;
  6. 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.

werf - kā mākou mea hana no CI/CD ma Kubernetes (nānā a me ka hōʻike wikiō)

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:

werf - kā mākou mea hana no CI/CD ma Kubernetes (nānā a me ka hōʻike wikiō)

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:

werf - kā mākou mea hana no CI/CD ma Kubernetes (nānā a me ka hōʻike wikiō)

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:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka