Nā mea hana no nā mea hoʻomohala o nā noi e holo ana ma Kubernetes
ʻO kahi ala hou i nā hana e hoʻonā i nā pilikia ʻoihana koʻikoʻi. Hiki i nā pahu a me nā mea hoʻokani pila ke maʻalahi i nā papahana o nā mea paʻakikī, e hoʻomaʻamaʻa i ka hoʻokuʻu ʻana i nā mana hou, e hoʻolilo iā lākou i hilinaʻi, akā i ka manawa like lākou e hana ai i nā pilikia hou no nā mea hoʻomohala. ʻO ka mea papahana, ʻo ka mea mua, mālama i kāna code: ka hale hana, ka maikaʻi, ka hana, ka nani - a ʻaʻole pehea e hana ai ma Kubernetes a pehea e hoʻāʻo ai a hoʻopau iā ia ma hope o ka hana ʻana i nā loli liʻiliʻi. No laila, he mea maʻamau ka hoʻomohala ʻana o nā mea hana no Kubernetes, e kōkua ana i ka hoʻoponopono ʻana i nā pilikia o nā mea hoʻomohala "archaic" a ʻae iā lākou e nānā i ka mea nui.
Hāʻawi kēia loiloi i ka ʻike pōkole e pili ana i kekahi o nā mea hana e maʻalahi ai ke ola no ka mea papahana nona ka code e holo ana ma ka podʻax o kahi hui Kubernetes.
Nā mea kōkua maʻalahi
Kubectl-debug
ʻO ka laina lalo: hoʻohui i kāu pahu i kahi Pod a ʻike i ka mea e hana ai i loko.
ʻO kēia plugin no kubectl hiki iā ʻoe ke hana i kahi pahu hou i loko o ka pod o ka hoihoi, e kaʻana like i ke kaʻina hana me nā ipu ʻē aʻe. I loko o ia mea hiki iā ʻoe ke debug i ka hana o ka pod: nānā i ka pūnaewele, hoʻolohe i ka neʻe ʻana o ka pūnaewele, hana i kahi strace o ke kaʻina hana hoihoi, etc.
Hiki iā ʻoe ke hoʻololi i ka pahu hana ma ka holo ʻana chroot /proc/PID/root - hiki ke maʻalahi kēia i ka wā e pono ai ʻoe e kiʻi i kahi pūpū aʻa i loko o kahi pahu i hoʻonohonoho ʻia ai i ka hōʻike securityContext.runAs.
He mea maʻalahi a maikaʻi ka mea hana, no laila hiki ke hoʻohana i kēlā me kēia mea hoʻomohala. Ua kākau hou mākou e pili ana iā ia ma ʻokoʻa ka ʻatikala.
telepresence
ʻO ka laina lalo: e hoʻoili i ka palapala noi i kāu kamepiula. E hoʻomohala a hoʻopau i ka ʻāina.
ʻO ka manaʻo o kēia snap-in ʻo ia ka hoʻomaka ʻana i kahi pahu me ka noi ma ka kamepiula mea hoʻohana kūloko a hoʻololi i nā kaʻa a pau mai ka puʻupuʻu i laila a i hope. ʻAe kēia ala iā ʻoe e hoʻomohala kūloko ma ka hoʻoponopono ʻana i nā faila i kāu IDE punahele: e loaʻa koke nā hopena.
ʻO nā mea maikaʻi o ka holo ʻana ma ka ʻāina ʻo ia ka ʻoluʻolu o nā hoʻoponopono a me nā hopena koke, ka hiki ke debug i ka noi ma ke ʻano maʻamau. ʻO ka ʻaoʻao haʻahaʻa ʻo ia ke koi ʻana i ka wikiwiki pili, ʻike nui ʻia inā pono ʻoe e hana me kahi noi me ka RPS kiʻekiʻe a me ke kaʻa. Eia kekahi, loaʻa iā Telepresence nā pilikia me nā piʻi nui ma Windows, hiki ke lilo i palena hoʻoholo no nā mea hoʻomohala maʻa i kēia OS.
Ua hōʻike mua mākou i kā mākou ʻike no ka hoʻohana ʻana i Telepresence maanei.
Ksync
ʻO ka laina lalo: ʻaneʻane hikiwawe ka hoʻonohonoho ʻana o ke code me ka ipu i loko o ka pūʻulu.
Hāʻawi ka pono iā ʻoe e hoʻonohonoho i nā ʻike o kahi papa kuhikuhi kūloko me ka papa kuhikuhi o kahi pahu e holo ana i ka hui. He kūpono ia mea hana no nā mea hoʻomohala i ka kākau ʻana i nā ʻōlelo papahana, nona ka pilikia nui i ka hāʻawi ʻana i ke code i kahi pahu holo. Hoʻolālā ʻia ʻo Ksync e hoʻomaha i kēia poʻo.
Ke hoʻomaka mua ʻia e ke kauoha ksync init Hoʻokumu ʻia kahi DaemonSet i loko o ka pūpū, i hoʻohana ʻia e nānā i ke kūlana o ka ʻōnaehana faila o ka ipu i koho ʻia. Ma kāna kamepiula kūloko, holo ka mea hoʻomohala i ke kauoha ksync watch, nāna e nānā i nā hoʻonohonoho a me nā holo hui pū, ka mea e hoʻonohonoho pololei i nā faila me ka pūʻulu.
ʻO nā mea a pau e aʻo iā ksync i ka mea e hoʻohui pū me ka mea. Eia kekahi laʻana, kēia kauoha:
...e hana i kahi kiaʻi i kapa ʻia myprojectkahi e ʻimi ai i kahi pod me kahi lepili app=backend a e hoʻāʻo e hoʻonohonoho i ka papa kuhikuhi kūloko /home/user/myproject/ me ka papa helu /var/www/myproject/ ma ka ipu i kapaia php.
Nā pilikia a me nā memo ma ksync mai kā mākou ʻike:
Pono e hoʻohana ʻia ma nā node pūʻulu Kubernetes overlay2 ma ke ʻano he mea hoʻokele mālama no Docker. ʻAʻole e hana ka pono me nā mea ʻē aʻe.
I ka hoʻohana ʻana iā Windows ma ke ʻano he OS mea kūʻai aku, ʻaʻole hiki ke hana pololei ka ʻōnaehana waihona. Ua ʻike ʻia kēia bug i ka wā e hana ana me nā papa kuhikuhi nui - me ka nui o nā faila nested a me nā papa kuhikuhi. Ua hana mākou pili pili i ka papahana syncthing, akā ʻaʻohe holomua ma ia mea (mai ka hoʻomaka ʻana o Iulai).
E hoʻohana i ka faila .stignore e kuhikuhi i nā ala a i ʻole nā faila faila ʻaʻole pono e hoʻonohonoho ʻia (no ka laʻana, nā papa kuhikuhi app/cache и .git).
Ma ka paʻamau, e hoʻomaka hou ʻo ksync i ka pahu i ka wā e loli ai nā faila. No Node.js he mea maʻalahi kēia, akā no PHP ʻaʻole pono. ʻOi aku ka maikaʻi e hoʻopau i ka opcache a hoʻohana i ka hae --reload=false.
Hiki ke hoʻoponopono ʻia ka hoʻonohonoho i nā manawa a pau $HOME/.ksync/ksync.yaml.
ʻO Squash
ʻO ka laina lalo: nā kaʻina hana debug i loko o ka pūʻulu.
Hoʻolālā ʻia kēia mea hana no ka hoʻopau ʻana i nā kaʻina hana i loko o nā pods. He mea maʻalahi ka mea hoʻohana a hiki iā ʻoe ke koho i ka debugger makemake (e nānā ma lalo) a me ka namespace + pod, i ke kaʻina hana e pono ai ʻoe e komo. Kākoʻo ʻia i kēia manawa:
delve - no nā polokalamu Go;
GDB - ma o ka mamao mamao + ka hoʻouna ʻana i ke awa;
ʻO ka hoʻouna ʻana i ke awa JDWP no ka hoʻopau ʻana i nā noi Java.
Ma ka ʻaoʻao IDE, loaʻa ke kākoʻo ma VScode (hoʻohana hoʻopau), akā naʻe, ʻo nā hoʻolālā no kēia makahiki (2019) me Eclipse a me Intellij.
No ka hoʻopau ʻana i nā kaʻina hana, holo ʻo Squash i kahi pahu waiwai ma nā nodes cluster, no laila pono ʻoe e hoʻomaʻamaʻa mua iā ʻoe iho me nā hiki. ʻano palekana e pale i nā pilikia palekana.
Nā hoʻonā piha
E neʻe kākou i ka puʻupuʻu kaumaha - ʻoi aku ka nui o nā papahana "nui" i hoʻolālā ʻia e hoʻokō koke i nā pono o nā mea hoʻomohala.
NB: Ma kēia papa inoa, ʻoiaʻiʻo, aia kahi wahi no kā mākou mea hoʻohana Open Source werf (ʻike mua ʻia ʻo dapp). Eia naʻe, ua kākau mua mākou a kamaʻilio e pili ana iā ia ma mua o hoʻokahi manawa, a no laila ua hoʻoholo e hoʻokomo ʻole i loko o ka loiloi. No ka poʻe e makemake ana e kamaʻāina hou i kona hiki, paipai mākou e heluhelu/hoʻolohe i ka hōʻike "ʻO werf kā mākou mea hana no CI/CD ma Kubernetes".
DevSpace
ʻO ka laina lalo: no ka poʻe makemake e hoʻomaka i ka hana ma Kubernetes, akā ʻaʻole makemake e komo hohonu i loko o kāna ululāʻau.
ʻO kahi hoʻonā mai ka hui o ka inoa like, e hāʻawi ana i nā pūʻulu hoʻokele me nā Kubernetes no ka hoʻomohala ʻana i ka hui. Hoʻokumu ʻia ka pono no nā pūʻulu kalepa, akā hana maikaʻi me nā mea ʻē aʻe.
Ke holo i ke kauoha devspace init i loko o ka papahana papahana e hāʻawi ʻia iā ʻoe (ma ka launa pū):
koho i kahi hui Kubernetes hana,
hoʻohana i kēia manawa Dockerfile (a i ʻole e hana i kahi mea hou) e hana i kahi pahu e pili ana iā ia,
koho i kahi waihona no ka mālama ʻana i nā kiʻi pahu, etc.
Ma hope o kēia mau hana hoʻomākaukau, hiki iā ʻoe ke hoʻomaka i ka hoʻomohala ʻana ma ka holo ʻana i ke kauoha devspace dev. E kūkulu ia i ka ipu, e hoʻouka i ka waihona, e ʻōwili i ka hoʻoili ʻana i ka hui a hoʻomaka i ka hoʻouna ʻana i ke awa a me ka synchronization o ka ipu me ka papa kuhikuhi kūloko.
ʻO ke koho, e hoʻoneʻe ʻia ʻoe e neʻe i ka pahu i ka pahu. ʻAʻole pono ʻoe e hōʻole, no ka mea ʻoiaʻiʻo, hoʻomaka ka pahu me ke kauoha hiamoe, a no ka hoʻāʻo maoli ʻana pono e hoʻokuʻu ʻia ka noi me ka lima.
ʻO ka hope, ka hui devspace deploy ʻōwili i ka noi a me nā ʻōnaehana pili i ka hui, a laila hoʻomaka nā mea a pau e hana i ke ʻano hakakā.
Mālama ʻia nā hoʻonohonoho papahana āpau i kahi faila devspace.yaml. Ma waho aʻe o nā hoʻonohonoho hoʻomohala hoʻomohala, hiki iā ʻoe ke ʻike i kahi wehewehe o ka ʻōnaehana i loko, e like me nā hōʻike Kubernetes maʻamau, maʻalahi loa.
Hoʻolālā a me nā pae nui o ka hana ʻana me DevSpace
Eia hou, maʻalahi ka hoʻohui ʻana i kahi mea i koho mua ʻia (no ka laʻana, kahi MySQL DBMS) a i ʻole kahi pakuhi Helm i ka papahana. Heluhelu hou aku ma palapala - ʻaʻole paʻakikī.
Ke koi nei kēia pono mai Google e uhi i nā pono āpau o kahi mea hoʻomohala e holo ana kāna code ma kahi hui Kubernetes. ʻAʻole maʻalahi ka hoʻomaka ʻana e hoʻohana e like me devspace: ʻaʻohe interactive, ʻike ʻōlelo a me ka hana ʻana Dockerfile ʻAʻole lākou e hāʻawi iā ʻoe ma ʻaneʻi.
Eia naʻe, inā ʻaʻole hoʻoweliweli kēia iā ʻoe, eia ka mea a Skaffold e ʻae iā ʻoe e hana:
E hahai i nā hoʻololi kumu kumu.
E hui pū me ka pahu pod inā ʻaʻole pono ia e hui.
E hōʻiliʻili i nā pahu me ke code, inā i unuhi ʻia ka ʻōlelo, a i ʻole e hōʻuluʻulu i nā mea hana a hoʻopaʻa iā lākou i loko o nā pahu.
Hoʻopili a hoʻouka i nā kiʻi i ka Docker Registry.
E hoʻolālā i kahi noi i loko o kahi hui me ka kubectl, Helm a i ʻole kustomize.
Hana i ka hoʻouna ʻana i ke awa.
Debug palapala noi i kākau ʻia ma Java, Node.js, Python.
Hōʻike ʻia ke kahe hana ma nā ʻano like ʻole i ka faila skaffold.yaml. No kahi papahana, hiki iā ʻoe ke wehewehe i kekahi mau profiles kahi e hiki ai iā ʻoe ke hoʻololi ʻāpana a i ʻole ke hoʻololi piha ʻana i ka hui a me nā pae hoʻolālā. No ka laʻana, no ka hoʻomohala ʻana, e kuhikuhi i kahi kiʻi kumu kūpono no ka mea hoʻomohala, a no ka hana ʻana a me ka hana ʻana - kahi liʻiliʻi (+ hoʻohana securityContext nā ipu a i ʻole e wehewehe hou i ka pūʻulu kahi e kau ʻia ai ka noi).
Hiki ke kūkulu ʻia nā pahu Docker ma ka ʻāina a ma kahi mamao paha: in Google Cloud Build a i ʻole ma kahi hui e hoʻohana ana Kaniko. Kākoʻo ʻia ʻo Bazel a me Jib Maven/Gradle. No ka hōʻailona ʻana, kākoʻo ʻo Skaffold i nā hoʻolālā he nui: e git commit hash, lā / manawa, sha256-sum o nā kumu, etc.
Ma kahi kaʻawale, pono e ʻike i ka hiki ke hoʻāʻo i nā ipu. Hāʻawi ka pahu pahu-structure-test framework i kēia mau ʻano hōʻoia:
Ke hoʻokō nei i nā kauoha i loko o ka pōʻaiapili o kahi pahu me ka nānā ʻana i nā kūlana puka a me ka nānā ʻana i ka huaʻōlelo o ke kauoha.
Ke nānā nei i ka loaʻa ʻana o nā faila i loko o ka pahu a hoʻohālikelike i nā ʻano i kuhikuhi ʻia.
Ka mālama ʻana i nā waihona waihona me ka hoʻohana ʻana i nā ʻōlelo maʻamau.
Hōʻoia kiʻi metadata (ENV, ENTRYPOINT, VOLUMES a laila.).
Ke nānā nei i ka hoʻokō laikini.
ʻAʻole hoʻokō ʻia ka hoʻonohonoho ʻana i nā faila me ka ipu i ke ala maikaʻi loa: Hoʻokumu wale ʻo Skaffold i kahi waihona me nā kumu, kope a wehe ʻia i loko o ka ipu (pono e hoʻokomo ʻia ka tar). No laila, inā ʻo kāu hana nui ka code synchronization, ʻoi aku ka maikaʻi o ka nānā ʻana i kahi hopena kūikawā (ksync).
Nā pae nui o ka hana Skaffold
Ma keʻano laulā, ʻaʻole ʻae ka hāmeʻa iā ʻoe e hoʻokaʻawale mai nā hōʻike Kubernetes a ʻaʻohe mea pili, no laila paʻakikī paha ka haku. Akā ʻo kēia hoʻi kona pono - ʻoi aku ke kūʻokoʻa o ka hana.
ʻŌlelo: TypeScript (Ua hoʻolālā ʻia e hoʻokaʻawale i ka papahana i nā ʻāpana he nui, aia kekahi ma Go, a hana pū kekahi i SDK no ka hana ʻana i nā mea hoʻohui i TypeScript/JavaScript a me Go).
Laikini: Laikini Apache 2.0.
E like me Skaffold, manaʻo ʻo Garden e hoʻokaʻawale i nā kaʻina o ka hāʻawi ʻana i nā code noi i ka hui K8s. No ka hana ʻana i kēia, pono ʻoe e wehewehe i ke ʻano o ka papahana ma kahi faila YAML, a laila holo i ke kauoha garden dev. E hana ʻo ia i nā mea kilokilo a pau:
E hōʻiliʻili i nā pahu me nā ʻāpana like ʻole o ka papahana.
Hana i ka hoʻohui ʻana a me nā hoʻokolohua ʻāpana, inā i wehewehe ʻia kekahi.
Holoi i nā ʻāpana papahana a pau i ka hui.
Inā hoʻololi ke kumu kumu, e hoʻomaka hou ka pipeline holoʻokoʻa.
ʻO ka manaʻo nui o ka hoʻohana ʻana i kēia hāmeʻa ʻo ia ka kaʻana like ʻana i kahi pūʻulu mamao me kahi hui hoʻomohala. I kēia hihia, inā ua hana mua ʻia kekahi o ka hale a me ka hoʻāʻo ʻana, e wikiwiki loa kēia i ke kaʻina holoʻokoʻa, no ka mea hiki iā Garden ke hoʻohana i nā hopena i hūnā ʻia.
Hiki i kahi module papahana ke lilo i ipu, kahi pahu Maven, kahi pakuhi Helm, kahi hōʻike no kubectl apply a i ʻole kahi hana OpenFaaS. Eia kekahi, hiki ke huki ʻia kekahi o nā modula mai kahi waihona Git mamao. Hiki i kekahi module ke wehewehe i nā lawelawe, nā hana, a me nā ho'āʻo. Hiki i nā lawelawe a me nā hana ke loaʻa nā hilinaʻi, no laila hiki iā ʻoe ke hoʻoholo i ke kaʻina hana o kahi lawelawe kūikawā a hoʻonohonoho i ka hoʻomaka ʻana o nā hana a me nā hoʻāʻo.
Hāʻawi ʻo Garden i ka mea hoʻohana me kahi dashboard nani (i kēia manawa i loko kūlana hoʻokolohua), e hōʻike ana i ka pakuhi papahana: nā ʻāpana, ke kaʻina hui, ka hoʻokō ʻana i nā hana a me nā hoʻāʻo, nā pilina a me nā hilinaʻi. Ma ka polokalamu kele pūnaewele, hiki iā ʻoe ke ʻike i nā moʻolelo o nā ʻāpana papahana āpau a nānā i ka mea i hoʻopuka ʻia e kekahi ʻāpana ma o HTTP (inā, ʻoiaʻiʻo, ua haʻi ʻia kahi kumu waiwai komo no ia).
Panel no ka māla
Loaʻa i kēia mea hana ke ʻano hoʻouka hou, e hoʻonohonoho wale ana i nā hoʻololi script me ka ipu i loko o ka pūʻulu, e wikiwiki loa i ke kaʻina hana debugging noi. He maikaʻi ka māla ka palapala aole ino hoʻonohonoho hoʻohālike, hiki iā ʻoe ke maʻa koke iā ia a hoʻomaka e hoʻohana. ʻOiaʻiʻo, ua paʻi mākou i kēia manawa unuhi ʻatikala mai kona mau mea kakau.
hopena
ʻOiaʻiʻo, ʻaʻole i kaupalena ʻia kēia papa inoa o nā mea hana no ka hoʻomohala ʻana a me ka hoʻopau ʻana i nā noi ma Kubernetes. Nui aʻe nā pono pono a me nā pono kūpono, inā ʻaʻole he ʻatikala kaʻawale, a laila ʻōlelo ʻia. E haʻi mai iā mākou i kāu mea e hoʻohana ai, he aha nā pilikia āu i hālāwai ai a pehea ʻoe i hoʻoponopono ai iā lākou!