Operaturi għal Kubernetes: kif tmexxi applikazzjonijiet stateful

Il-problema bl-applikazzjonijiet stateful f'Kubernetes

Il-konfigurazzjoni, it-tnedija u l-iskala ulterjuri tal-applikazzjonijiet u s-servizzi huma faċli fejn jidħlu każijiet ikklassifikati bħala mingħajr stat, i.e. mingħajr ma tissejvja d-data. Huwa konvenjenti li tmexxi servizzi bħal dawn f'Kubernetes, billi tuża l-API standard tagħha, għax kollox jiġri "barra mill-kaxxa": skont konfigurazzjonijiet standard, mingħajr ma tinvolvi xi ispeċifiċitajiet jew maġija.

Fi kliem sempliċi, biex tniedi ħames kopji oħra tal-backend f'PHP/Ruby/Python f'grupp ta' kontenituri, għandek bżonn biss li twaqqaf server ġdid 5 darbiet u tikkopja s-sorsi. Peress li kemm il-kodiċi tas-sors kif ukoll l-iskrittura init huma fl-immaġini, l-iskala ta 'applikazzjoni mingħajr stat isir kompletament elementari. Kif jafu sew il-partitarji tal-kontenituri u l-arkitettura tal-mikroservizz, id-diffikultà tibda minn apps stateful, i.e. b'persistenza tad-dejta bħal databases u caches (MySQL, PostgreSQL, Redis, ElasticSearch, Cassandra...). Dan japplika kemm għal softwer li jimplimenta b'mod indipendenti raggruppament ta' kworum (pereżempju, Percona XtraDB u Cassandra), kif ukoll għal softwer li jeħtieġ utilitajiet ta' ġestjoni separati (bħal Redis, MySQL, PostgreSQL...).

Jqumu diffikultajiet minħabba li l-kodiċi tas-sors u t-tnedija tas-servizz m'għadhomx biżżejjed - jeħtieġ li twettaq xi passi oħra. Bħala minimu, ikkopja d-dejta u/jew ingħaqad mal-cluster. B'mod aktar preċiż, dawn is-servizzi jeħtieġu fehim ta 'kif jiġu skalati, aġġornati u kkonfigurati mill-ġdid sew mingħajr telf ta' data jew indisponibbiltà temporanja. Li jitqiesu dawn il-ħtiġijiet jissejjaħ "għarfien operattiv".

Operaturi CoreOS

Sabiex "programm" għarfien operattiv, tard is-sena li għaddiet il-proġett CoreOS daħħal "klassi ġdida ta' softwer" għall-pjattaforma Kubernetes - Operaturi (mill-Ingliż "operazzjoni", jiġifieri "operazzjoni").

Operaturi li jużaw u jestendu l-kapaċitajiet ewlenin ta’ Kubernetes (inkl. StatefulSets, ara d-differenza hawn taħt) jippermettu lill-ispeċjalisti DevOps biex iżidu għarfien operattiv mal-kodiċi tal-applikazzjoni.

Għan tal-Operatur — ipprovdi lill-utent b’API li tippermettilek timmaniġġja entitajiet multipli ta’ applikazzjoni fi stat ta’ raggruppament ta’ Kubernetes, mingħajr ma taħseb dwar x’inhu taħt il-kappa (x’dejta u x’għandek tagħmel magħha, liema kmandi għad iridu jiġu eżegwiti biex jinżamm il-cluster). ). Fil-fatt, l-Operatur huwa ddisinjat biex jissimplifika x-xogħol bl-applikazzjoni fi ħdan il-cluster kemm jista 'jkun, awtomatizza l-eżekuzzjoni ta' kompiti operattivi li qabel kellhom jiġu solvuti manwalment.

Kif Jaħdmu l-Operaturi

ReplicaSets Kubernetes jippermettilek li tispeċifika n-numru mixtieq ta 'miżwed li jaħdmu, u l-kontrolluri jiżguraw li n-numru tagħhom jinżamm (billi joħolqu u jħassru l-imżiewed). Operatur jaħdem b'mod simili, billi jżid sett ta 'għarfien operattiv ma' riżors u kontrollur standard Kubernetes li jippermettilek twettaq azzjonijiet addizzjonali biex tappoġġja n-numru meħtieġ ta 'entitajiet tal-applikazzjoni.

Dan kif huwa differenti minn StatefulSets, iddisinjat għal applikazzjonijiet li jeħtieġu li l-cluster jipprovdilhom riżorsi stateful bħal ħażna tad-dejta jew IPs statiċi? Għal applikazzjonijiet bħal dawn, Operaturi jistgħu jużaw StatefulSets (minflok ReplicaSets) bħala bażi, offerta awtomazzjoni addizzjonali: twettaq l-azzjonijiet meħtieġa f'każ ta 'ħabtiet, tagħmel backups, aġġorna l-konfigurazzjoni, eċċ.

Allura, kif jaħdem dan kollu? L-operatur huwa daemon tal-maniġer li:

  1. jissottoskrivi għall-API tal-avveniment f'Kubernetes;
  2. jirċievi mingħandu data dwar is-sistema (dwar tagħha ReplicaSets, Imżiewed, Servizzi u l-bqija.);
  3. jirċievi data dwar Riżorsi ta' Partijiet Terzi (ara l-eżempji hawn taħt);
  4. jirreaġixxi għad-dehra/bidla Riżorsi ta' Partijiet Terzi (per eżempju, biex tibdel id-daqs, tibdel il-verżjoni, eċċ);
  5. jirreaġixxi għal bidliet fl-istat tas-sistema (dwar tagħha ReplicaSets, Imżiewed, Servizzi u l-bqija.);
  6. l-aktar importanti:
    1. jitlob lill-API Kubernetes biex toħloq dak kollu li teħtieġ (għal darb'oħra, tagħha stess ReplicaSets, Imżiewed, Servizzi...),
    2. twettaq xi maġija (biex tissimplifika, tista 'taħseb li l-Operatur jidħol fil-miżwed infushom u jsejjaħ kmandi, pereżempju, biex jingħaqad ma' cluster jew biex jaġġorna l-format tad-dejta meta jaġġorna verżjoni).

Operaturi għal Kubernetes: kif tmexxi applikazzjonijiet stateful
Fil-fatt, kif jidher mill-istampa, applikazzjoni separata hija sempliċement miżjuda ma 'Kubernetes (regolari iskjerament с ReplicaSet), li jissejjaħ l-Operatur. Jgħix fi pod ordinarju (ġeneralment wieħed biss) u, bħala regola, huwa responsabbli biss għal tiegħu Ispazju tal-isem. Din l-applikazzjoni tal-operatur timplimenta l-API tagħha - għalkemm mhux direttament, iżda permezz Riżorsi ta' Partijiet Terzi fil-Kubernetes.

Għalhekk, wara li ħloqna fil Ispazju tal-isem Operatur, nistgħu nżidu miegħu Riżorsi ta' Partijiet Terzi.

Eżempju għal etcd (ara hawn taħt għad-dettalji):

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

Eżempju għal 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

Ħtiġiet għall-Operaturi

CoreOS ifformula l-mudelli ewlenin miksuba mill-inġiniera waqt li kienu qed jaħdmu fuq Operaturi. Minkejja l-fatt li l-Operaturi kollha huma individwali (maħluqa għal applikazzjoni speċifika bil-karatteristiċi u l-ħtiġijiet tagħha stess), il-ħolqien tagħhom għandu jkun ibbażat fuq tip ta’ qafas li jimponi r-rekwiżiti li ġejjin:

  1. L-installazzjoni għandha ssir permezz ta 'wieħed iskjerament: kubectl toħloq -f SOME_OPERATOR_URL/deployment.yaml - u ma jeħtiġux azzjonijiet addizzjonali.
  2. Meta tinstalla Operatur f'Kubernetes, irid jinħoloq tip ġdid ta' parti terza (ThirdPartyResource). Biex tniedi każijiet ta 'applikazzjoni (istanzi ta' raggruppament) u jimmaniġġjawhom aktar (aġġornament tal-verżjonijiet, tibdil fid-daqs, eċċ.), l-utent se juża dan it-tip.
  3. Kull meta jkun possibbli, għandek tuża l-primittivi mibnija f'Kubernetes, bħal Servizzi и ReplicaSetsli tuża kodiċi ttestjat tajjeb u li jinftiehem.
  4. Jeħtieġ kompatibilità b'lura ta 'Operaturi u appoġġ għal verżjonijiet eqdem ta' riżorsi maħluqa mill-utent.
  5. Jekk l-Operatur jitneħħa, l-applikazzjoni nnifisha għandha tkompli taħdem mingħajr bidliet.
  6. L-utenti għandhom ikunu jistgħu jiddefinixxu l-verżjoni tal-applikazzjoni mixtieqa u orkestraw l-aġġornamenti tal-verżjoni tal-applikazzjoni. In-nuqqas ta' aġġornamenti tas-softwer huwa sors komuni ta' problemi operattivi u ta' sigurtà, għalhekk l-Operaturi għandhom jgħinu lill-utenti f'din il-kwistjoni.
  7. L-operaturi għandhom jiġu ttestjati b'għodda bħal Chaos Monkey, li tidentifika fallimenti potenzjali fil-miżwed, il-konfigurazzjonijiet u n-netwerk.

Operatur etcd

Eżempju ta' Implimentazzjoni ta' Operatur - Operatur etcd, ippreparat fil-jum tat-tħabbir ta’ dan il-kunċett. Il-konfigurazzjoni tal-cluster etcd tista 'tkun kumplessa minħabba l-ħtieġa li jinżamm kworum, il-ħtieġa li terġa' tiġi kkonfigurata s-sħubija tal-cluster, toħloq backups, eċċ. Pereżempju, l-iskala manwalment ta' cluster etcd tfisser li għandek bżonn toħloq isem DNS għal membru ġdid ta' cluster, tibda entità ġdida ta' etcd, u tavża lill-cluster dwar il-membru l-ġdid (membru etcdctl add). Fil-każ tal-Operatur, l-utent ikollu bżonn biss li jibdel id-daqs tal-cluster - kull ħaġa oħra se jiġri awtomatikament.

U peress li etcd inħoloq ukoll f'CoreOS, kien pjuttost loġiku li tara l-Operatur tiegħu jidher l-ewwel. Kif jaħdem? Il-loġika tal-operatur eċċd hija determinata minn tliet komponenti:

  1. Osserva. L-operatur jimmonitorja l-istat tal-cluster billi juża l-API Kubernetes.
  2. Analiżi. Isib differenzi bejn l-istatus attwali u dak mixtieq (definit mill-konfigurazzjoni tal-utent).
  3. Azzjoni. Issolvi d-differenzi misjuba billi tuża l-APIs tas-servizz etcd u/jew Kubernetes.

Operaturi għal Kubernetes: kif tmexxi applikazzjonijiet stateful

Biex tiġi implimentata din il-loġika, ġew ippreparati funzjonijiet fl-Operatur Oħloq/Eqred (il-ħolqien u t-tħassir tal-membri tal-cluster etcd) u Resize (bidla fin-numru ta' membri tal-cluster). Il-korrettezza tat-tħaddim tagħha ġiet iċċekkjata bl-użu ta 'utilità maħluqa bix-xebh ta' Chaos Monkey minn Netflix, i.e. qtil etcd imżiewed bl-addoċċ.

Għal tħaddim sħiħ ta' etcd, l-Operatur jipprovdi karatteristiċi addizzjonali: Backup (ħolqien awtomatiku u inviżibbli għall-utenti ta 'kopji ta' backup - fil-konfigurazzjoni huwa biżżejjed li jiġi ddeterminat kemm-il darba jagħmluhom u kemm għandhom jaħżnu - u r-restawr sussegwenti ta 'data minnhom) u Taġġorna (taġġorna installazzjonijiet etcd mingħajr waqfien).

Kif jidher li taħdem ma' Operatur?

$ 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

L-istatus attwali ta' etcd Operator huwa verżjoni beta, li teħtieġ Kubernetes 1.5.3+ u etcd 3.0+ biex jaħdmu. Il-kodiċi tas-sors u d-dokumentazzjoni (inklużi l-istruzzjonijiet għall-użu) huma disponibbli fuq GitHub.

Inħolqot eżempju ieħor ta' implimentazzjoni minn CoreOS - Operatur Prometheus, iżda għadu fil-verżjoni alpha (mhux il-karatteristiċi kollha ppjanati ġew implimentati).

Status u prospetti

Għaddew 5 xhur mit-tħabbira tal-Operaturi Kubernetes. Għad hemm żewġ implimentazzjonijiet biss disponibbli fir-repożitorju uffiċjali tal-CoreOS (għal etcd u Prometheus). It-tnejn għadhom ma laħqux il-verżjonijiet stabbli tagħhom, iżda l-impenji huma osservati fuq bażi ta 'kuljum.

L-iżviluppaturi jipprevedu "ġejjieni li fih l-utenti jinstallaw Operaturi Postgres, Operaturi Cassandra jew Operaturi Redis fuq il-clusters Kubernetes tagħhom u jaħdmu mal-entitajiet skalabbli ta' dawn l-applikazzjonijiet faċilment daqs l-iskjerament ta' repliki ta' applikazzjonijiet tal-web mingħajr stat." L-ewwel Operaturi minn żviluppaturi terzi verament beda jidher:

Fl-akbar konferenza Ewropea tas-software ħieles FOSDEM, li saret fi Frar 2017 fi Brussell, Josh Wood minn CoreOS ħabbar Operaturi fi tirrapporta (video huwa disponibbli fuq il-link!), li għandu jikkontribwixxi għat-tkabbir tal-popolarità ta 'dan il-kunċett fil-komunità usa' Open Source.

PS Grazzi tal-interess tiegħek fl-artiklu! Abbona għall-hub tagħna, sabiex ma titlifx materjali u riċetti ġodda dwar l-amministrazzjoni tas-sistema DevOps u GNU/Linux - aħna se nippubblikawhom regolarment!

Sors: www.habr.com

Żid kumment