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:

  1. kau inoa i ka API hanana ma Kubernetes;
  2. 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.);
  3. loaa ikepili e pili ana Nā kumuwaiwai ʻekolu (e nānā i nā laʻana ma lalo);
  4. 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);
  5. pane i nā loli i ke kūlana o ka ʻōnaehana (e pili ana i kāna Nā Hoʻopiʻi, pods, Services etc.);
  6. ka mea nui loa:
    1. 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...),
    2. 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).

Nā mea hoʻohana no Kubernetes: pehea e holo ai i nā noi kūlana
ʻ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.

Laʻana no etcd (e nānā ma lalo no nā kikoʻī):

apiVersion: etcd.coreos.com/v1beta1
kind: Cluster
metadata:
  name: example-etcd-cluster
spec:
  size: 3
  version: 3.1.0

Laʻana no Elasticsearch:

apiVersion: enterprises.upmc.com/v1
kind: ElasticsearchCluster
metadata:
  name: example-es-cluster
spec:
  client-node-replicas: 3
  master-node-replicas: 2
  data-node-replicas: 3
  zones:
  - us-east-1c
  - us-east-1d
  - us-east-1e
  data-volume-size: 10Gi
  java-options: "-Xms1024m -Xmx1024m"
  snapshot:
    scheduler-enabled: true
    bucket-name: elasticsnapshots99
    cron-schedule: "@every 2m"
  storage:
    type: gp2
    storage-class-provisioner: kubernetes.io/aws-ebs

Nā koi no nā mea hana

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Inā wehe ʻia ka Operator, pono e hoʻomau ka hana ponoʻī me ka ʻole o nā loli.
  6. 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.
  7. 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:

  1. Nānā. Mālama ka mea hoʻohana i ke kūlana o ka pūʻulu me ka Kubernetes API.
  2. 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).
  3. 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.

Nā mea hoʻohana no Kubernetes: pehea e holo ai i nā noi kūlana

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!

Source: www.habr.com

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