ʻO kā mākou ʻike mai kahi makahiki o ka neʻe ʻana iā GitLab.com i Kubernetes

Nānā. unuhi.: Ua manaʻo ʻia ʻo Kubernetes ma GitLab kekahi o nā kumu nui ʻelua e hāpai i ka ulu ʻana o ka ʻoihana. Eia naʻe, a hiki i kēia manawa, ua kūkulu ʻia ka ʻōnaehana o ka lawelawe pūnaewele ʻo GitLab.com ma nā mīkini virtual, a ma kahi o hoʻokahi makahiki i hala aku nei ua hoʻomaka kona neʻe ʻana i K8s, ʻaʻole i pau. Ua hauʻoli mākou i ka hāʻawi ʻana i kahi unuhi o kahi ʻatikala hou a kahi ʻenekini GitLab SRE e pili ana i ke ʻano o kēia hana a me nā hopena a nā ʻenekini e komo nei i ka papahana.

ʻO kā mākou ʻike mai kahi makahiki o ka neʻe ʻana iā GitLab.com i Kubernetes

Ma kahi o hoʻokahi makahiki i kēia manawa, ke neʻe nei kā mākou mahele ʻoihana i nā lawelawe āpau e holo ana ma GitLab.com i Kubernetes. I loko o kēia manawa, ua loaʻa iā mākou nā pilikia e pili ana ʻaʻole wale i ka neʻe ʻana i nā lawelawe i Kubernetes, akā no ka hoʻokele ʻana i ka hoʻoili hybrid i ka wā o ka hoʻololi. E kūkākūkā ʻia nā haʻawina waiwai a mākou i aʻo ai ma kēia ʻatikala.

Mai ka hoʻomaka ʻana o GitLab.com, holo kāna mau kikowaena i ke ao ma nā mīkini virtual. Mālama ʻia kēia mau mīkini virtual e Chef a hoʻokomo ʻia me kā mākou pūʻolo Linux mana. Hoʻolālā hoʻolaha inā pono e hoʻonui hou ʻia ka noi, ʻo ia ka hōʻano hou ʻana i ka ʻauwaʻa kikowaena ma ke ʻano hoʻonohonoho, hoʻonohonoho ʻia me ka hoʻohana ʻana i kahi pipeline CI. ʻO kēiaʻano - akā lohi a liʻiliʻi hoʻōliu - hōʻoia e hoʻohana ʻo GitLab.com i ka hoʻonohonoho like a me nā hana hoʻonohonoho like me nā mea hoʻohana pūnaewele (hoʻokele ponoʻī) Hoʻokomo ʻia ʻo GitLab me ka hoʻohana ʻana i kā mākou pūʻulu Linux no kēia.

Hoʻohana mākou i kēia ʻano hana no ka mea he mea koʻikoʻi loa ia e ʻike i nā ʻeha a me nā hauʻoli i ʻike ʻia e nā lālā maʻamau o ke kaiāulu i ka wā e hoʻokomo a hoʻonohonoho i kā lākou mau kope o GitLab. Ua hana maikaʻi kēia ala no kekahi manawa, akā i ka wā i ʻoi aku ai ka nui o nā papahana ma GitLab ma mua o 10 miliona, ua ʻike mākou ʻaʻole ia i hoʻokō hou i kā mākou pono no ka hoʻonui ʻana a me ka hoʻolaha ʻana.

ʻO nā ʻanuʻu mua i nā Kubernetes a me GitLab ʻōiwi

Ua hana ʻia ka papahana ma 2017 Nā Palapala Kiʻi GitLab e hoʻomākaukau iā GitLab no ka hoʻolaha ʻana i ke ao, a e hiki ai i nā mea hoʻohana ke hoʻokomo iā GitLab ma nā pūʻulu Kubernetes. Ua ʻike mākou i ka neʻe ʻana iā GitLab i Kubernetes e hoʻonui i ka scalability o ka platform SaaS, e hoʻomaʻamaʻa i ka hoʻolaha ʻana, a e hoʻomaikaʻi i ka pono o nā kumuwaiwai computing. I ka manawa like, ua hilinaʻi ka nui o nā hana o kā mākou noi i nā ʻāpana NFS i kau ʻia, i hoʻolōʻihi i ka hoʻololi ʻana mai nā mīkini virtual.

ʻO ka paʻi ʻana i ke ao maoli a me nā Kubernetes i ʻae i kā mākou poʻe ʻenekinia e hoʻolālā i kahi hoʻololi lohi, i ka wā i haʻalele ai mākou i kekahi o nā mea hilinaʻi o ka noi ma ka mālama pūnaewele ʻoiai e hoʻomau ana i ka hoʻomohala ʻana i nā hiʻohiʻona hou. Mai ko mākou hoʻomaka ʻana e hoʻolālā i ka neʻe ʻana i ke kauwela o 2019, ua hoʻoholo ʻia ka nui o kēia mau palena, a ke holo nei ke kaʻina o ka neʻe ʻana iā GitLab.com i Kubernetes!

Nā hiʻohiʻona o GitLab.com ma Kubernetes

No GitLab.com, hoʻohana mākou i hoʻokahi pūʻulu GKE āpana e mālama i nā kaʻa noi āpau. No ka hoʻohaʻahaʻa i ka paʻakikī o ka neʻe ʻana (ua paʻakikī loa), ke nānā nei mākou i nā lawelawe i hilinaʻi ʻole i ka waihona kūloko a i ʻole NFS. Hoʻohana ʻo GitLab.com i kahi codebase monolithic Rails nui loa, a ke hele nei mākou i nā kaʻa e pili ana i nā ʻano haʻahaʻa hana i nā wahi hopena like ʻole i hoʻokaʻawale ʻia i loko o kā lākou mau puna node.

I ka hihia o ka frontend, ua māhele ʻia kēia mau ʻano i nā noi i ka pūnaewele, API, Git SSH/HTTPS a me Registry. I ka hihia o ke kua hope, hoʻokaʻawale mākou i nā hana ma ka pila e like me nā ʻano like ʻole e pili ana palena waiwai i koho mua ia, e ʻae iā mākou e hoʻonohonoho i nā Pahuhopu Hana-Level (SLO) no nā haʻahaʻa hana like ʻole.

Hoʻonohonoho ʻia kēia mau lawelawe ʻo GitLab.com me ka hoʻohana ʻana i kahi pakuhi GitLab Helm i hoʻololi ʻole ʻia. Hana ʻia ka hoʻonohonoho ʻana ma nā subcharts, hiki ke koho ʻia ke neʻe mālie mākou i nā lawelawe i ka hui. ʻOiai ua hoʻoholo mākou ʻaʻole e hoʻokomo i kekahi o kā mākou lawelawe mokuʻāina i ka neʻe ʻana, e like me Redis, Postgres, GitLab Pages a me Gitaly, me ka hoʻohana ʻana iā Kubernetes hiki iā mākou ke hōʻemi i ka nui o nā VM a Chef e mālama nei i kēia manawa.

Kubernetes Configuration Visibility and Management

Mālama ʻia nā hoʻonohonoho āpau e GitLab ponoʻī. No kēia, hoʻohana ʻia ʻekolu papahana hoʻonohonoho e pili ana iā Terraform a me Helm. Ke hoʻāʻo nei mākou e hoʻohana iā GitLab iā ia iho i ka wā e hiki ai ke holo iā GitLab, akā no nā hana hana, loaʻa iā mākou kahi hoʻonohonoho ʻokoʻa ʻo GitLab. Pono kēia e hōʻoia ʻaʻole ʻoe e hilinaʻi i ka loaʻa ʻana o GitLab.com i ka wā e hoʻokō ai i nā hoʻolaha a me nā hoʻonui ʻana o GitLab.com.

ʻOiai e holo ana kā mākou paipu no ka hui Kubernetes ma kahi hoʻonohonoho ʻokoʻa ʻo GitLab, aia nā aniani o nā waihona code i loaʻa i ka lehulehu ma nā ʻōlelo aʻe:

  • k8s-mau hana/gitlab-com — Ka papa hana hoʻonohonoho GitLab.com no ka pakuhi Helm GitLab;
  • k8s-mau hana/gitlab-helmfiles - Loaʻa nā hoʻonohonoho no nā lawelawe i pili ʻole me ka noi GitLab. Hoʻopili kēia i nā hoʻonohonoho no ka hoʻopaʻa ʻana a me ka nānā ʻana i ka cluster, a me nā mea hana i hoʻohui ʻia e like me PlantUML;
  • Gitlab-com-infrastructure — Hoʻonohonoho Terraform no nā Kubernetes a me nā ʻōnaehana VM hoʻoilina. Ma ʻaneʻi ʻoe e hoʻonohonoho i nā kumuwaiwai āpau e pono ai e holo i ka pūʻulu, me ka pūʻulu ponoʻī, nā loko node, nā moʻokāki lawelawe, a me nā hoʻopaʻa inoa IP.

ʻO kā mākou ʻike mai kahi makahiki o ka neʻe ʻana iā GitLab.com i Kubernetes
Hōʻike ʻia ka ʻike lehulehu ke hoʻololi ʻia. hōʻuluʻulu pōkole me kahi loulou i ka ʻokoʻa kikoʻī a SRE e loiloi ma mua o ka hoʻololi ʻana i ka pūʻulu.

No SRE, alakaʻi ka loulou i kahi kikoʻī kikoʻī i ka hoʻonohonoho ʻana o GitLab, i hoʻohana ʻia no ka hana a me ke komo ʻana i kaupalena ʻia. Hāʻawi kēia i nā limahana a me ke kaiāulu, me ka ʻole o ke komo ʻana i ka papahana hana (kahi i wehe wale ʻia i nā SRE), e nānā i nā hoʻololi hoʻonohonoho i manaʻo ʻia. Ma ka hoʻohui ʻana i kahi hiʻohiʻona GitLab lehulehu no ka code me kahi hiʻohiʻona pilikino no nā pipeline CI, mālama mākou i kahi kahe hana hoʻokahi me ka hōʻoia ʻana i ke kūʻokoʻa mai GitLab.com no nā hoʻonohonoho hoʻonohonoho.

ʻO ka mea a mākou i ʻike ai i ka wā o ka neʻe ʻana

I ka wā o ka neʻe ʻana, ua loaʻa ka ʻike e pili ana mākou i nā neʻe a me nā hoʻolālā hou ma Kubernetes.

1. Hoʻonui ʻia nā kumukūʻai ma muli o ke kaʻa ʻana ma waena o nā wahi hiki ke loaʻa

ʻO kā mākou ʻike mai kahi makahiki o ka neʻe ʻana iā GitLab.com i Kubernetes
Nā helu helu puka i kēlā me kēia lā (bytes i kēlā me kēia lā) no ka ʻauwaʻa waihona Git ma GitLab.com

Māhele ʻo Google i kāna pūnaewele i nā ʻāpana. Hoʻokaʻawale ʻia kēlā mau mea i nā ʻāpana hiki (AZ). Hoʻopili ʻia ʻo Git hosting me ka nui o ka ʻikepili, no laila he mea nui iā mākou ke kāohi i ka puka o ka pūnaewele. No nā kaʻa kūloko, manuahi wale ka puka ʻana inā noho ʻo ia i loko o ka ʻāpana loaʻa like. E like me kēia kākau ʻana, ke lawelawe nei mākou ma kahi o 100 TB o ka ʻikepili i kahi lā hana maʻamau (a ʻo ia wale nō no nā waihona Git). ʻO nā lawelawe i noho i nā mīkini virtual like i kā mākou topology-based VM kahiko e holo nei i nā pods Kubernetes like ʻole. 'O ia ho'i, hiki i kekahi mau ka'a ka'a ma mua o ka VM ke hele ma waho o nā wahi i loa'a.

Hiki i nā pū'ulu GKE āpana iā 'oe ke ho'oka'awale i nā 'Aina Loa'a he nui no ka ho'opau 'ana. Ke noʻonoʻo nei mākou i ka hiki e hoʻokaʻawale i ka pūʻulu GKE āpana i nā pūʻulu ʻāpana hoʻokahi no nā lawelawe e hoʻohua nui i nā kaʻa. E hōʻemi kēia i nā kumukūʻai puka ʻoiai e mālama ana i ka redudancy pae cluster.

2. Nā palena, nā noi waiwai a me ka hoʻonui

ʻO kā mākou ʻike mai kahi makahiki o ka neʻe ʻana iā GitLab.com i Kubernetes
ʻO ka helu o nā replicas e hoʻoponopono ana i nā kaʻa hana ma registry.gitlab.com. Piʻi nā kaʻa ma ~15:00 UTC.

Ua hoʻomaka kā mākou moʻolelo neʻe i ʻAukake 2019, i ka wā i neʻe ai mākou i kā mākou lawelawe mua, ka GitLab Container Registry, i Kubernetes. He koho maikaʻi kēia ʻoihana koʻikoʻi, kaʻaahi kiʻekiʻe no ka neʻe mua ʻana no ka mea he noi mokuʻāina ʻole me ka liʻiliʻi o nā hilinaʻi waho. ʻO ka pilikia mua i loaʻa iā mākou he helu nui o nā pods i hoʻokuʻu ʻia ma muli o ka nele o ka hoʻomanaʻo ma nā nodes. Ma muli o kēia, pono mākou e hoʻololi i nā noi a me nā palena.

Ua ʻike ʻia i ka hihia o kahi noi kahi e hoʻonui ai ka hoʻohana ʻana i ka hoʻomanaʻo i ka manawa, nā haʻahaʻa haʻahaʻa no nā noi (ka mālama ʻana i ka hoʻomanaʻo no kēlā me kēia pod) i hui pū ʻia me kahi palena paʻakikī "maʻalahi" i ka hoʻohana ʻana i alakaʻi i ka saturation. (ka huikau) nā nodes a me kahi kiʻekiʻe o nā kipaku. No ka hoʻoponopono ʻana i kēia pilikia, ʻo ia ua hoʻoholoʻia e hoʻonui i nā noi a me nā palena haʻahaʻa. Lawe kēia i ke kaomi mai nā node a hōʻoia i ka pōʻaiapuni ola o nā pods ʻaʻole i hoʻokau nui i ka node. I kēia manawa, hoʻomaka mākou i ka neʻe ʻana me ka noi lokomaikaʻi (a aneane like) a hoʻopaʻa i nā waiwai, hoʻoponopono iā lākou e like me ka mea e pono ai.

3. Nā ana a me nā lāʻau

ʻO kā mākou ʻike mai kahi makahiki o ka neʻe ʻana iā GitLab.com i Kubernetes
Hoʻopili ka māhele ʻōnaehana i ka latency, ka helu hewa a me ka saturation me ka hoʻokomo ʻia pahuhopu pae lawelawe (SLO) pili i loaʻa maʻamau o kā mākou ʻōnaehana.

I ka makahiki i hala aku nei, ʻo kekahi o nā hanana koʻikoʻi i ka mahele ʻoihana ʻo ia ka hoʻomaikaʻi ʻana i ka nānā ʻana a me ka hana pū ʻana me nā SLO. Ua ʻae nā SLO iā mākou e hoʻonohonoho i nā pahuhopu no nā lawelawe pākahi a mākou i nānā pono ai i ka wā o ka neʻe ʻana. Akā ʻoiai me kēia ʻike maikaʻi ʻana, ʻaʻole hiki ke ʻike koke i nā pilikia me ka hoʻohana ʻana i nā metric a me nā mākaʻikaʻi. No ka laʻana, ma ka nānā ʻana i ka latency a me nā helu kuhi, ʻaʻole mākou e uhi piha i nā hihia hoʻohana a pau no kahi lawelawe e neʻe nei.

Ua ʻike koke ʻia kēia pilikia ma hope o ka neʻe ʻana i kekahi mau haʻahaʻa hana i ka pūʻulu. Ua lilo ia i mea koʻikoʻi i ka wā e pono ai mākou e nānā i nā hana i liʻiliʻi ka helu o nā noi, akā loaʻa nā hilinaʻi kikoʻī kikoʻī. ʻO kekahi o nā haʻawina koʻikoʻi mai ka neʻe ʻana, ʻo ia ka pono e noʻonoʻo ʻaʻole wale i nā metric i ka wā e nānā ai, akā ʻo nā lāʻau a me ka "huelo lōʻihi" (e pili ana kēia pela ko lakou mahele ana ma ka pakuhi - approx. unuhi.) hewa. I kēia manawa no kēlā me kēia neʻe ʻana mākou i kahi papa inoa kikoʻī o nā nīnau log (nā nīnau log) a e hoʻolālā i nā kaʻina hana rollback maopopo e hiki ke hoʻoneʻe ʻia mai kahi neʻe a i kahi aʻe inā e kū mai nā pilikia.

ʻO ka lawelawe ʻana i nā noi like ʻole ma ka ʻōnaehana VM kahiko a me nā ʻōnaehana hoʻokumu Kubernetes hou i hōʻike i kahi paʻakikī kūʻokoʻa. ʻAʻole like me ka neʻe ʻana a me ka hoʻoneʻe ʻana (ka hoʻololi wikiwiki ʻana o nā noi "e like me" i kahi ʻōnaehana hou; hiki ke heluhelu ʻia nā kikoʻī hou aku, no ka laʻana, maanei - kokoke. unuhi.), ʻo ka hana like ʻana ma nā VM "kahiko" a me nā Kubernetes e koi aku i nā mea hana nānā e kūpono me nā kaiapuni ʻelua a hiki ke hoʻohui i nā metric i hoʻokahi ʻike. He mea nui e hoʻohana mākou i nā dashboard like a me nā nīnau log e hoʻokō i ka nānā mau ʻana i ka wā hoʻololi.

4. Ke hoʻololi ʻana i nā kaʻa i kahi hui hou

No GitLab.com, ua hoʻolaʻa ʻia kahi hapa o nā kikowaena pae kanary. Hāʻawi ʻo Canary Park i kā mākou papahana kūloko a hiki pū kekahi hiki i nā mea hoʻohana. Akā ua hoʻolālā mua ʻia e hoʻāʻo i nā loli i hana ʻia i ka ʻōnaehana a me ka noi. Ua hoʻomaka ka lawelawe neʻe mua ma ka ʻae ʻana i ka nui o nā kaʻa i loko, a ke hoʻomau nei mākou i ka hoʻohana ʻana i kēia ʻano hana e hōʻoia i ka hoʻokō ʻana o nā SLO ma mua o ka hoʻouna ʻana i nā kaʻa āpau i ka hui.

I ka hihia o ka neʻe ʻana, ʻo ia hoʻi, e hoʻouna mua ʻia nā noi i nā papahana kūloko i Kubernetes, a laila hoʻololi mākou i ke koena o ke kaʻa i ka pūʻulu ma o ka hoʻololi ʻana i ke kaumaha no ka hope ma o HAProxy. I ka wā o ka neʻe ʻana mai VM a i Kubernetes, ua ʻike ʻia he mea maikaʻi loa ka loaʻa ʻana o kahi ala maʻalahi e hoʻihoʻi hou i ke kaʻa ma waena o nā ʻōnaehana kahiko a me nā mea hou, a no laila, e hoʻomau i nā ʻōnaehana kahiko no ka rollback i nā lā mua ma hope o ka neʻe ʻana.

5. Mālama ʻia nā mana o nā pods a me ko lākou hoʻohana ʻana

Ua ʻike koke ʻia kēia pilikia: ua hoʻomaka koke nā pods no ka lawelawe Registry, akā ʻo ka hoʻomaka ʻana i nā pods no Sidekiq ua hiki i ka elua minuke. Ua lilo ka lōʻihi o ka manawa hoʻomaka no Sidekiq pods i pilikia i ka wā i hoʻomaka ai mākou e neʻe i nā haʻahaʻa hana i Kubernetes no nā limahana e pono e hoʻoponopono wikiwiki i nā hana a me ka wikiwiki.

Ma kēia hihia, ʻo ka haʻawina ʻoiai ʻo Kubernetes' Horizontal Pod Autoscaler (HPA) e mālama pono i ka ulu ʻana o ka kaʻa, pono e noʻonoʻo i nā ʻano o nā haʻahaʻa hana a hoʻokaʻawale i nā mana kaʻawale i nā pods (ʻoi loa ke hāʻawi like ʻole ʻia ka noi). I kā mākou hihia, ua piʻi koke ka hana, e alakaʻi ana i ka wikiwiki wikiwiki, i alakaʻi i ka saturation o nā kumuwaiwai CPU ma mua o ko mākou manawa e hoʻonui i ka wai node.

Loaʻa mau ka hoʻowalewale e ʻoki i ka nui o ka puʻupuʻu, akā naʻe, i ka wā i loaʻa mua ai nā pilikia hana, ke hoʻomaka nei mākou me kahi kālā pod maikaʻi a hoʻemi ʻia ma hope, e nānā pono ana i nā SLO. ʻO ka hoʻolaha ʻana i nā pods no ka lawelawe ʻo Sidekiq ua wikiwiki loa a i kēia manawa e lawe ma kahi o 40 kekona ma ka awelika. Mai ka ho'ēmiʻana i ka manawa hoʻomaka o nā pods Ua lanakila ʻo GitLab.com a me kā mākou mea hoʻohana i nā hoʻonohonoho hoʻonohonoho ponoʻī e hana pū ana me ka pakuhi GitLab Helm.

hopena

Ma hope o ka neʻe ʻana i kēlā me kēia lawelawe, hauʻoli mākou i nā pōmaikaʻi o ka hoʻohana ʻana iā Kubernetes i ka hana ʻana: ʻoi aku ka wikiwiki a me ka palekana o ka hoʻolaha ʻana i nā noi, ka hoʻonui ʻana, a me ka hoʻokaʻawale ʻana i nā kumuwaiwai. Eia kekahi, ʻoi aku ka maikaʻi o ka neʻe ʻana ma mua o ka lawelawe GitLab.com. ʻO kēlā me kēia hoʻomaikaʻi ʻana i ka pakuhi Helm kūhelu e pōmaikaʻi i kāna mea hoʻohana.

Manaʻo wau ua hauʻoli ʻoe i ka moʻolelo o kā mākou huakaʻi neʻe mai Kubernetes. Ke hoʻomau nei mākou i ka neʻe ʻana i nā lawelawe hou a pau i ka pūʻulu. Hiki ke loaʻa nā ʻike hou aʻe ma kēia mau puke:

PS mai ka unuhi

E heluhelu pū ma kā mākou blog:

Source: www.habr.com

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