Nā mea hoʻohana no Kubernetes: pehea e holo ai i nā noi kūlana
ʻO ka pilikia me nā noi stateful ma Kubernetes
He maʻalahi ka hoʻonohonoho ʻana, ka hoʻomaka ʻana a me ka hoʻonui hou ʻana i nā noi a me nā lawelawe i ka wā e pili ana i nā hihia i helu ʻia he stateless, ʻo ia hoʻi. me ka mālama ʻole i ka ʻikepili. He mea maʻalahi ka holo ʻana i ia mau lawelawe ma Kubernetes, me ka hoʻohana ʻana i kāna mau API maʻamau, no ka mea e hana ʻia nā mea āpau "ma waho o ka pahu": e like me nā hoʻonohonoho maʻamau, me ka ʻole o ka hoʻopili ʻana i nā kikoʻī a i ʻole ka kilokilo.
E hoʻopuka maʻalahi, e hoʻomaka i ʻelima mau kope o ka backend ma PHP/Ruby/Python i loko o kahi pūʻulu o nā ipu, pono ʻoe e hoʻonohonoho i kahi kikowaena hou 5 mau manawa a kope i nā kumu. No ka mea aia ka code kumu a me ka script init i ke kiʻi, ʻo ka hoʻonui ʻana i kahi palapala stateless e lilo i kumu haʻahaʻa. E like me ka ʻike pono ʻana o ka poʻe pā o nā ipu a me ka hoʻolālā microservice, hoʻomaka ka paʻakikī nā polokalamu kūlana, i.e. me ka hoʻomau ʻana o ka ʻikepili e like me nā waihona a me nā cache (MySQL, PostgreSQL, Redis, ElasticSearch, Cassandra...). Pili kēia i nā polokalamu ʻelua e hoʻokō kūʻokoʻa ana i kahi puʻupuʻu kōrum (no ka laʻana, Percona XtraDB a me Cassandra), a me nā polokalamu e koi ana i nā pono hoʻokele kaʻawale (e like me Redis, MySQL, PostgreSQL...).
Piʻi ka pilikia no ka mea ʻaʻole lawa ke kumu kumu a me ka hoʻomaka ʻana i ka lawelawe - pono ʻoe e hana i kekahi mau hana hou aʻe. Ma ka liʻiliʻi loa, e kope i ka ʻikepili a/a i ʻole e hui pū i ka pūʻulu. ʻOi aku ka pololei, pono kēia mau lawelawe i ka ʻike pehea e hoʻonui pono ai, hoʻohou a hoʻonohonoho hou iā lākou me ka ʻole o ka ʻikepili a i ʻole ka loaʻa ʻole o ka manawa. ʻO ka lawe ʻana i kēia mau pono i kapa ʻia ʻo "ʻike hana".
Nā mea hoʻohana CoreOS
I mea e "program" ka ʻike hana, i ka hopena o ka makahiki i hala ka papahana CoreOS hoopuka “kahi papa lako polokalamu hou” no ka paepae Kubernetes - Operators (mai ka ʻōlelo Pelekania “operation”, ʻo ia hoʻi, “operation”).
Nā mea hoʻohana e hoʻohana a hoʻonui i nā mana koʻikoʻi o Kubernetes (incl. Nā Mokuʻāina, e ʻike i ka ʻokoʻa ma lalo) e ʻae i nā loea DevOps e hoʻohui i ka ʻike hana i ke code noi.
Ka Manaʻo o ka Mea Hana - hāʻawi i ka mea hoʻohana me kahi API e hiki ai iā ʻoe ke hoʻokele i nā mea noi mokuʻāina he nui i loko o kahi pūʻulu Kubernetes, me ka noʻonoʻo ʻole i ka mea ma lalo o ka puʻupuʻu (he aha ka ʻikepili a me ka mea e hana ai me ia, he aha nā kauoha e pono e hoʻokō ʻia e mālama i ka pūʻulu. ). ʻO ka ʻoiaʻiʻo, ua hoʻolālā ʻia ka Operator e hoʻomaʻamaʻa i ka hana me ka noi i loko o ka pūʻulu e like me ka hiki, e hoʻomaʻamaʻa i ka hoʻokō ʻana i nā hana hana i pono e hoʻoponopono ʻia me ka lima.
Pehea e hana ai nā mea hana
Nā Hoʻopiʻi ʻAe ʻo Kubernetes iā ʻoe e kuhikuhi i ka helu i makemake ʻia o nā pods holo, a ʻo nā mea hoʻoponopono e hōʻoia i ka mālama ʻia ʻana o kā lākou helu (ma ka hana ʻana a me ka holoi ʻana i nā pods). Hana like kekahi Operator, hoʻohui i kahi pūʻulu o ka ʻike hana i kahi kumu Kubernetes maʻamau a me ka mea hoʻoponopono e hiki ai iā ʻoe ke hana i nā hana hou e kākoʻo i ka nui o nā mea noi.
Pehea kēia ʻokoʻa mai Nā Mokuʻāina, i hoʻolālā ʻia no nā noi e koi ana i ka pūʻulu e hāʻawi iā lākou i nā kumuwaiwai stateful e like me ka mālama ʻikepili a i ʻole IP static? No ia mau noi, hiki i nā mea hoʻohana ke hoʻohana Nā Mokuʻāina (ma kahi o Nā Hoʻopiʻi) i kumu, hāʻawi ʻoi aku ka automation: e hana i nā hana e pono ai inā pilikia, hana i nā backup, hoʻololi i ka hoʻonohonoho, etc.
A pēlā, pehea keia mau hana? ʻO ka mea hoʻohana he daemon mana e:
kau inoa i ka API hanana ma Kubernetes;
loaʻa iā ia ka ʻikepili e pili ana i ka ʻōnaehana (e pili ana i kāna Nā Hoʻopiʻi, pods, Services etc.);
loaa ikepili e pili ana Nā kumuwaiwai ʻekolu (e nānā i nā laʻana ma lalo);
pane i ka helehelena / loli Nā kumuwaiwai ʻekolu (no ka laʻana, e hoʻololi i ka nui, hoʻololi i ka mana, a pēlā aku);
pane i nā loli i ke kūlana o ka ʻōnaehana (e pili ana i kāna Nā Hoʻopiʻi, pods, Services etc.);
ka mea nui loa:
Kāhea i ka Kubernetes API e hana i nā mea a pau e pono ai (eia hou, kāna iho Nā Hoʻopiʻi, pods, Services...),
hana i kekahi mea kilokilo (no ka maʻalahi, hiki iā ʻoe ke noʻonoʻo e hele ka Operator i loko o nā pods iā lākou iho a kāhea i nā kauoha, no ka laʻana, e hui pū i kahi hui a i ʻole e hoʻomaikaʻi i ka ʻikepili i ka wā e hoʻonui ai i kahi mana).
ʻOiaʻiʻo, e like me ka ʻike ʻia mai ke kiʻi, ua hoʻohui ʻia kahi noi ʻokoʻa i Kubernetes (kahi maʻamau kuhikuhi i ka hana с Hoʻopiʻi), i kapa ʻia ʻo Operator. Noho ʻo ia i loko o kahi pod maʻamau (maʻamau hoʻokahi wale nō) a, ma ke ʻano he kānāwai, ʻo ia wale nō ke kuleana Mokuna inoa. Hoʻohana kēia mea hoʻohana i kāna API - ʻoiai ʻaʻole pololei, akā ma o Nā kumuwaiwai ʻekolu ma Kubernetes.
No laila, ma hope o kā mākou hana ʻana i loko Mokuna inoa Operator, hiki iā mākou ke hoʻohui iā ia Nā kumuwaiwai ʻekolu.
Ua hoʻokumu ʻo CoreOS i nā kumu nui i loaʻa e nā ʻenekinia i ka wā e hana ana ma luna o Operators. ʻOiai ʻo nā mea hoʻohana āpau he kanaka hoʻokahi (i hana ʻia no kahi noi kikoʻī me kāna mau hiʻohiʻona ponoʻī a me nā pono ponoʻī), pono e hoʻokumu ʻia kā lākou hana ʻana ma ke ʻano o ka hoʻolālā e kau nei i nā koi aʻe:
Pono e hoʻokomo ʻia ma o hoʻokahi kuhikuhi i ka hana: hana kubectl -f SOME_OPERATOR_URL/deployment.yaml - a ʻaʻole koi i nā hana hou aʻe.
Ke kau ʻana i kahi Operator ma Kubernetes, pono e hana ʻia kahi ʻano ʻaoʻao ʻekolu hou (Kumukumu Kolu). No ka hoʻomaka ʻana i nā hiʻohiʻona noiʻi (cluster instances) a hoʻokele hou iā lākou (hōʻano hou i nā mana, hoʻololi ʻana, etc.), e hoʻohana ka mea hoʻohana i kēia ʻano.
I ka wā hiki, pono ʻoe e hoʻohana i nā mea kahiko i kūkulu ʻia i loko o nā Kubernetes, e like me Services и Nā Hoʻopiʻie hoʻohana i ka code i hoʻāʻo maikaʻi ʻia a hoʻomaopopo ʻia.
Pono ka hoʻohālikelike hope o nā Operators a me ke kākoʻo no nā mana kahiko o nā kumuwaiwai i hana ʻia e ka mea hoʻohana.
Inā wehe ʻia ka Operator, pono e hoʻomau ka hana ponoʻī me ka ʻole o nā loli.
Hiki i nā mea hoʻohana ke wehewehe i ka mana noi i makemake ʻia a hoʻonohonoho i nā mea hou o ka palapala noi. ʻO ka nele o ka hoʻonui ʻana i nā polokalamu he kumu maʻamau o nā pilikia hana a me ka palekana, no laila pono nā mea hoʻohana e kōkua i nā mea hoʻohana i kēia mea.
Pono e hoʻāʻo ʻia nā mea hana me kahi mea hana e like me Chaos Monkey e ʻike ai i nā hemahema i nā pods, nā hoʻonohonoho, a me ka pūnaewele.
etcd Mea hoʻohana
Laʻana Hoʻokō Mea Hana - etcd mea hana, hoomakaukauia i ka lā i hoʻolaha ʻia ai kēia manaʻo. Hiki ke paʻakikī ka hoʻonohonoho pūʻulu etcd ma muli o ka pono e mālama i ka quorum, ka pono e hoʻonohonoho hou i ka lālā cluster, hana i nā backup, etc. No ka laʻana, ʻo ka hoʻonui lima ʻana i kahi puʻupuʻu etcd pono ʻoe e hana i kahi inoa DNS no kahi lālā cluster hou, e hoʻomaka i kahi hui etcd hou, a e makaʻala i ka pūʻulu e pili ana i ka lālā hou (etcdctl lālā hoʻohui). I ka hihia o ka Operator, pono wale ka mea hoʻohana e hoʻololi i ka nui o ka cluster - e hana maʻalahi nā mea āpau.
A no ka mea ua hana ʻia ʻo etcd ma CoreOS, he mea kūpono ke ʻike mua i kāna Operator. Pehea kana hana ana? Logic mea hana etcd Hoʻoholo ʻia e ʻekolu mau mea:
Nānā. Mālama ka mea hoʻohana i ke kūlana o ka pūʻulu me ka Kubernetes API.
Kānāwai. E ʻike i nā ʻokoʻa ma waena o ke kūlana o kēia manawa a me ka mea i makemake ʻia (i wehewehe ʻia e ka hoʻonohonoho hoʻohana).
Hana. Hoʻoholo i nā ʻokoʻa i ʻike ʻia me ka hoʻohana ʻana i nā API lawelawe etcd a/a i ʻole Kubernetes.
No ka hoʻokō ʻana i kēia loiloi, ua hoʻomākaukau ʻia nā hana i ka Operator Hana / Hoʻopau (ka hana ʻana a me ka holoi ʻana i nā lālā cluster etcd) a Hoʻohuli hou (hoʻololi i ka helu o nā lālā hui). Ua nānā ʻia ka pololei o kāna hana me ka hoʻohana ʻana i kahi pono i hana ʻia e like me Chaos Monkey mai Netflix, ʻo ia hoʻi. ka pepehi ʻana i nā pods etcd.
No ka hana piha o etcd, hāʻawi ka Operator i nā hiʻohiʻona hou: kope papaʻa (ʻokoʻa a ʻike ʻole ʻia e nā mea hoʻohana i ka hana ʻana i nā kope kope - ma ka config ua lawa ia e hoʻoholo ai i ka manawa e hana ai iā lākou a me ka nui o ka mālama ʻana - a me ka hoʻihoʻi hou ʻana o ka ʻikepili mai lākou) a hōʻano hou (ka hoʻonui ʻana i nā mea hoʻonohonoho etcd me ka ʻole o ka manawa hoʻomaha).
He aha ke ʻano o ka hana ʻana me kahi Operator?
$ kubectl create -f https://coreos.com/operators/etcd/latest/deployment.yaml
$ kubectl create -f https://coreos.com/operators/etcd/latest/example-etcd-cluster.yaml
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
etcd-cluster-0000 1/1 Running 0 23s
etcd-cluster-0001 1/1 Running 0 16s
etcd-cluster-0002 1/1 Running 0 8s
etcd-cluster-backup-tool-rhygq 1/1 Running 0 18s
ʻO ke kūlana o kēia manawa o etcd Operator he mana beta, e koi ana iā Kubernetes 1.5.3+ a me etcd 3.0+ e holo. Loaʻa nā kumu kumu a me nā palapala (me nā kuhikuhi no ka hoʻohana ʻana) ma GitHub.
Ua hana ʻia kekahi hiʻohiʻona hoʻokō mai CoreOS - Mea hana Prometheus, akā aia nō ma ka alpha version (ʻaʻole i hoʻokō ʻia nā hiʻohiʻona i hoʻolālā ʻia).
Kūlana a me nā kūlana
Ua hala nā mahina 5 mai ka hoʻolaha ʻana o nā Kubernetes Operators. Aia wale nō ʻelua mau hoʻokō i loaʻa i ka waihona CoreOS mana (no etcd a me Prometheus). ʻAʻole i hiki nā mea ʻelua i kā lākou mau mana paʻa, akā mālama ʻia nā hana i kēlā me kēia lā.
Manaʻo nā mea hoʻomohala "i ka wā e hiki mai ana kahi e hoʻokomo ai nā mea hoʻohana i nā Postgres Operators, Cassandra Operators a i ʻole Redis Operators ma kā lākou Kubernetes clusters a hana pū me nā mea hiki ke hoʻonui ʻia o kēia mau noi e like me ka maʻalahi e like me ka hoʻohana ʻana i nā replicas o nā palapala pūnaewele stateless i kēia lā." Ka mua Nā mea hana mai nā mea hoʻomohala ʻaoʻao ʻekolu ua hoʻomaka maoli e ʻike:
I ka hui nui loa o ʻEulopa free software FOSDEM, i mālama ʻia ma Pepeluali 2017 ma Brussels, ua hoʻolaha ʻo Josh Wood mai CoreOS i nā Operators ma hōʻike (Loaʻa kahi wikiō ma ka loulou!), pono e kōkua i ka ulu ʻana o ka kaulana o kēia manaʻo ma ke kaiāulu Open Source ākea.
PS Mahalo no kou hoihoi i ka ʻatikala! E kau inoa i kā mākou hub, i ʻole e poina i nā mea hou a me nā ʻike ma DevOps a me GNU/Linux system administration - e hoʻolaha mau mākou iā lākou!