Waendeshaji wa Kubernetes: jinsi ya kuendesha programu za hali ya juu

Tatizo la maombi ya hali katika Kubernetes

Usanidi, uzinduzi na kuongeza zaidi programu na huduma ni rahisi linapokuja suala la kesi zilizoainishwa kama zisizo na uraia, i.e. bila kuhifadhi data. Ni rahisi kuendesha huduma kama hizo huko Kubernetes, kwa kutumia API zake za kawaida, kwa sababu kila kitu hufanyika "nje ya sanduku": kulingana na usanidi wa kawaida, bila kuhusisha maalum au uchawi.

Kuweka tu, kuzindua nakala tano zaidi za backend katika PHP/Ruby/Python katika nguzo ya vyombo, unahitaji tu kusanidi seva mpya mara 5 na kunakili vyanzo. Kwa kuwa msimbo wa chanzo na hati ya init ziko kwenye picha, kuongeza programu isiyo na uraia inakuwa jambo la msingi kabisa. Kama mashabiki wa vyombo na usanifu wa huduma ndogo wanajua vizuri, ugumu huanza na programu za serikali, i.e. yenye kuendelea kwa data kama hifadhidata na kache (MySQL, PostgreSQL, Redis, ElasticSearch, Cassandra...). Hii inatumika kwa programu zote mbili ambazo hutekeleza kikundi cha akidi kwa kujitegemea (kwa mfano, Percona XtraDB na Cassandra), na programu inayohitaji huduma tofauti za usimamizi (kama vile Redis, MySQL, PostgreSQL...).

Ugumu hutokea kwa sababu msimbo wa chanzo na kuzindua huduma haitoshi tena - unahitaji kufanya hatua zaidi. Kwa uchache, nakili data na/au ujiunge na kikundi. Kwa usahihi zaidi, huduma hizi zinahitaji uelewa wa jinsi ya kutathmini vyema, kusasisha na kusanidi upya bila kupoteza data au kutopatikana kwa muda. Kuzingatia mahitaji haya kunaitwa "maarifa ya uendeshaji".

Waendeshaji wa CoreOS

Ili "programu" ujuzi wa uendeshaji, mwishoni mwa mwaka jana mradi wa CoreOS kuletwa "darasa jipya la programu" kwa ajili ya jukwaa la Kubernetes - Waendeshaji (kutoka "operesheni" ya Kiingereza, yaani "operesheni").

Waendeshaji wanaotumia na kupanua uwezo wa msingi wa Kubernetes (pamoja na. StatefulSets, angalia tofauti iliyo hapa chini) ruhusu wataalamu wa DevOps kuongeza maarifa ya uendeshaji kwenye msimbo wa programu.

Kusudi la Opereta - mpe mtumiaji API ambayo hukuruhusu kudhibiti vyombo vingi vya utumizi wa serikali kwenye nguzo ya Kubernetes, bila kufikiria juu ya kile kilicho chini ya kofia (data gani na nini cha kufanya nayo, ni amri gani bado zinahitaji kutekelezwa ili kudumisha nguzo hiyo. ) Kwa kweli, Opereta imeundwa ili kurahisisha kazi na programu ndani ya nguzo kadiri inavyowezekana, ikifanya otomatiki utekelezaji wa kazi za uendeshaji ambazo hapo awali zilipaswa kutatuliwa kwa mikono.

Jinsi Waendeshaji Hufanya Kazi

ReplicaSets Kubernetes hukuruhusu kutaja nambari inayotaka ya maganda ya kukimbia, na watawala wanahakikisha kuwa nambari yao inadumishwa (kwa kuunda na kufuta maganda). Opereta hufanya kazi kwa njia sawa, akiongeza seti ya maarifa ya uendeshaji kwa rasilimali na kidhibiti cha Kubernetes ambacho hukuruhusu kufanya vitendo vya ziada ili kusaidia idadi inayohitajika ya huluki za programu.

Hii ni tofauti gani na StatefulSets, iliyoundwa kwa ajili ya programu zinazohitaji nguzo kuzipa rasilimali za hali ya juu kama vile hifadhi ya data au IP tuli? Kwa programu kama hizo, Waendeshaji wanaweza kutumia StatefulSets (badala ya ReplicaSets) kama msingi, sadaka otomatiki ya ziada: fanya vitendo muhimu katika kesi ya ajali, fanya nakala, sasisha usanidi, nk.

Hivyo, haya yote yanafanyaje kazi? Opereta ni daemon ya meneja ambayo:

  1. hujiandikisha kwa API ya tukio huko Kubernetes;
  2. inapokea kutoka kwake data kuhusu mfumo (kuhusu ReplicaSets, ganda, Huduma Nakadhalika.);
  3. hupokea data kuhusu Rasilimali za Mtu wa Tatu (tazama mifano hapa chini);
  4. humenyuka kwa mwonekano/mabadiliko Rasilimali za Mtu wa Tatu (kwa mfano, kubadilisha ukubwa, kubadilisha toleo, na kadhalika);
  5. humenyuka kwa mabadiliko katika hali ya mfumo (kuhusu ReplicaSets, ganda, Huduma Nakadhalika.);
  6. muhimu zaidi:
    1. wito kwa Kubernetes API kuunda kila kitu kinachohitaji (tena, yake mwenyewe ReplicaSets, ganda, Huduma..),
    2. hufanya uchawi fulani (ili kurahisisha, unaweza kufikiria kuwa Opereta huingia kwenye maganda yenyewe na huita amri, kwa mfano, kujiunga na kikundi au kuboresha umbizo la data wakati wa kusasisha toleo).

Waendeshaji wa Kubernetes: jinsi ya kuendesha programu za hali ya juu
Kwa kweli, kama inavyoonekana kutoka kwa picha, programu tofauti inaongezwa tu kwa Kubernetes (ya kawaida Kuhamishwa с ReplicaSet), ambayo inaitwa Opereta. Inaishi kwenye ganda la kawaida (kawaida moja tu) na, kama sheria, inawajibika tu kwa ajili yake Nafasi ya jina. Programu tumizi hii ya waendeshaji hutumia API yake - ingawa sio moja kwa moja, lakini kupitia Rasilimali za Mtu wa Tatu katika Kubernetes.

Kwa hivyo, baada ya kuunda ndani Nafasi ya jina Opereta, tunaweza kuiongeza Rasilimali za Mtu wa Tatu.

Mfano kwa nk (tazama hapa chini kwa maelezo):

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

Mfano wa 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

Mahitaji kwa Waendeshaji

CoreOS ilitengeneza mifumo kuu iliyopatikana na wahandisi wakati wa kufanya kazi kwenye Opereta. Licha ya ukweli kwamba Waendeshaji wote ni mtu binafsi (iliyoundwa kwa ajili ya maombi maalum na sifa na mahitaji yake), uundaji wao lazima uwe msingi wa aina ya mfumo unaoweka mahitaji yafuatayo:

  1. Ufungaji lazima ufanyike kwa njia moja Kuhamishwa: kubectl create -f SOME_OPERATOR_URL/deployment.yaml - na hauhitaji vitendo vya ziada.
  2. Wakati wa kusakinisha Opereta katika Kubernetes, aina mpya ya wahusika wengine lazima iundwe (Rasilimali ya Wahusika wa Tatu). Ili kuzindua matukio ya programu (matukio ya makundi) na kuyadhibiti zaidi (kusasisha matoleo, kubadilisha ukubwa, n.k.), mtumiaji atatumia aina hii.
  3. Wakati wowote inapowezekana, unapaswa kutumia primitives zilizojengwa katika Kubernetes, kama vile Huduma ΠΈ ReplicaSetskutumia kanuni zilizojaribiwa vizuri na zinazoeleweka.
  4. Inahitaji uoanifu wa nyuma wa Waendeshaji na usaidizi kwa matoleo ya zamani ya rasilimali zilizoundwa na watumiaji.
  5. Ikiwa Opereta itaondolewa, programu yenyewe inapaswa kuendelea kufanya kazi bila mabadiliko.
  6. Watumiaji wanapaswa kuwa na uwezo wa kufafanua toleo la programu inayotakiwa na kupanga masasisho ya toleo la programu. Ukosefu wa sasisho za programu ni chanzo cha kawaida cha matatizo ya uendeshaji na usalama, hivyo Waendeshaji lazima wasaidie watumiaji katika suala hili.
  7. Waendeshaji wanapaswa kujaribiwa kwa zana kama vile Chaos Monkey, ambayo hutambua matatizo yanayoweza kutokea katika maganda, usanidi na mtandao.

nk Opereta

Mfano wa Utekelezaji wa Opereta - Opereta nk, tayari siku ya kutangazwa kwa dhana hii. Usanidi wa nguzo za etcd unaweza kuwa tata kwa sababu ya hitaji la kudumisha akidi, hitaji la kusanidi upya uanachama wa nguzo, kuunda nakala rudufu, n.k. Kwa mfano, kuongeza mwenyewe nguzo ya etcd inamaanisha kuwa unahitaji kuunda jina la DNS kwa mshiriki mpya wa nguzo, anza huluki mpya ya nk, na kuonya nguzo kuhusu mwanachama mpya (etcdctl member ongeza) Katika kesi ya Opereta, mtumiaji atahitaji tu kubadilisha ukubwa wa nguzo - kila kitu kingine kitatokea moja kwa moja.

Na kwa kuwa etcd pia iliundwa katika CoreOS, ilikuwa ni busara kuona Opereta wake akionekana kwanza. Anafanyaje kazi? Mantiki ya waendeshaji nk imedhamiriwa na vipengele vitatu:

  1. Angalia. Opereta hufuatilia hali ya nguzo kwa kutumia API ya Kubernetes.
  2. Uchambuzi. Hupata tofauti kati ya hali ya sasa na inayotakiwa (inayofafanuliwa na usanidi wa mtumiaji).
  3. Kitendo. Husuluhisha tofauti zilizogunduliwa kwa kutumia etcd na/au API za huduma za Kubernetes.

Waendeshaji wa Kubernetes: jinsi ya kuendesha programu za hali ya juu

Ili kutekeleza mantiki hii, kazi zimeandaliwa katika Opereta Unda/haribu (kuunda na kufuta wanachama wa nguzo etcd) na Resize (mabadiliko ya idadi ya washiriki wa nguzo). Usahihi wa uendeshaji wake uliangaliwa kwa kutumia matumizi yaliyoundwa kwa mfano wa Tumbili wa Chaos kutoka Netflix, i.e. kuua etcd maganda nasibu.

Kwa uendeshaji kamili wa etcd, Opereta hutoa vipengele vya ziada: Backup (otomatiki na isiyoonekana kwa watumiaji kuunda nakala za chelezo - katika usanidi inatosha kuamua ni mara ngapi kuzifanya na ni ngapi kuhifadhi - na urejesho wa data kutoka kwao) na Kuboresha (kusasisha usakinishaji wa etcd bila kukatika).

Je, kufanya kazi na Opereta kunaonekanaje?

$ 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

Hali ya sasa ya etcd Operator ni toleo la beta, linalohitaji Kubernetes 1.5.3+ na etcd 3.0+ ili kuendeshwa. Chanzo kanuni na nyaraka (ikiwa ni pamoja na maelekezo kwa ajili ya matumizi) zinapatikana katika GitHub.

Mfano mwingine wa utekelezaji kutoka kwa CoreOS umeundwa - Prometheus Opereta, lakini bado iko katika toleo la alpha (si vipengele vyote vilivyopangwa vimetekelezwa).

Hali na matarajio

Miezi 5 imepita tangu kutangazwa kwa Waendeshaji wa Kubernetes. Bado kuna utekelezaji mbili tu unaopatikana kwenye hazina rasmi ya CoreOS (kwa etcd na Prometheus). Wote wawili bado hawajafikia matoleo yao thabiti, lakini ahadi huzingatiwa kila siku.

Watengenezaji wanatazamia "wakati ujao ambapo watumiaji husakinisha Viendeshaji vya Postgres, Viendeshaji vya Cassandra, au Viendeshaji vya Redis kwenye makundi yao ya Kubernetes na kufanya kazi na vyombo vinavyoweza kupanuka vya programu hizi kwa urahisi kama vile kupeleka nakala za programu zisizo na uraia ilivyo leo." Kwanza Waendeshaji kutoka kwa wasanidi wengine kweli ilianza kuonekana:

Katika mkutano mkubwa wa Ulaya wa programu huria FOSDEM, ambao ulifanyika Februari 2017 huko Brussels, Josh Wood kutoka CoreOS alitangaza Operators katika ripoti (video inapatikana kwenye kiungo!), ambayo inapaswa kuchangia ukuaji wa umaarufu wa dhana hii katika jumuiya pana ya Open Source.

PS Asante kwa maslahi yako katika makala! Jiandikishe kwa kitovu chetu, ili usikose nyenzo na mapishi mapya kwenye DevOps na usimamizi wa mfumo wa GNU/Linux - tutazichapisha mara kwa mara!

Chanzo: mapenzi.com

Kuongeza maoni