Operatè pou Kubernetes: ki jan yo kouri aplikasyon pou eta

Pwoblèm nan ak aplikasyon leta nan Kubernetes

Konfigirasyon, lansman ak plis echèl aplikasyon ak sèvis yo fasil lè li rive nan ka ki klase kòm apatrid, i.e. san yo pa sove done yo. Li se pratik yo kouri sèvis sa yo nan Kubernetes, lè l sèvi avèk API estanda li yo, paske tout bagay k ap pase "soti nan bwat la": dapre konfigirasyon estanda, san yo pa enplike okenn spesifik oswa majik.

Senpleman mete, pou lanse senk plis kopi backend nan PHP/Ruby/Python nan yon gwoup resipyan, ou sèlman bezwen mete kanpe yon nouvo sèvè 5 fwa epi kopye sous yo. Depi tou de kòd sous la ak script init la nan imaj la, dekale yon aplikasyon apatrid vin konplètman elemantè. Kòm fanatik nan resipyan ak achitekti mikwosèvis yo konnen byen, difikilte a kòmanse ak aplikasyon leta yo, i.e. ak pèsistans done tankou baz done ak kachèt (MySQL, PostgreSQL, Redis, ElasticSearch, Cassandra...). Sa a aplike a tou de lojisyèl ki poukont aplike yon gwoup kowòm (pa egzanp, Percona XtraDB ak Cassandra), ak lojisyèl ki mande pou sèvis piblik separe (tankou Redis, MySQL, PostgreSQL...).

Difikilte rive paske kòd sous la ak lanse sèvis la pa ase ankò - ou bezwen fè kèk etap plis. Omwen, kopye done yo epi/oswa rantre nan gwoup la. Plis jisteman, sèvis sa yo mande pou yon konpreyansyon sou ki jan yo byen echèl, mete ajou ak rkonfigirasyon yo san pèt done oswa indisponibilite tanporè. Lè w pran bezwen sa yo an kont yo rele "konesans operasyonèl".

Operatè CoreOS

Yo nan lòd yo "pwograme" konesans operasyonèl, fen ane pase a pwojè CoreOS entwodwi "yon nouvo klas lojisyèl" pou platfòm Kubernetes - Operatè (ki soti nan lang angle "operasyon", sa vle di "operasyon").

Operatè yo itilize ak pwolonje kapasite debaz Kubernetes (inkl. StatefulSets, gade diferans ki anba a) pèmèt espesyalis DevOps yo ajoute konesans operasyonèl nan kòd aplikasyon an.

Objektif Operatè a — bay itilizatè a yon API ki pèmèt ou jere plizyè antite aplikasyon eta nan yon gwoup Kubernetes, san yo pa reflechi sou sa ki anba kapo a (ki done ak sa pou w fè ak li, ki kòmandman toujou bezwen egzekite pou kenbe gwoup la). ). An reyalite, Operatè a fèt pou senplifye travay la ak aplikasyon an nan gwoup la otank posib, otomatize ekzekisyon travay operasyonèl ki te deja rezoud manyèlman.

Ki jan operatè yo travay

ReplicaSets Kubernetes pèmèt ou presize kantite ou vle nan gous kouri, ak kontwolè asire ke nimewo yo kenbe (pa kreye ak efase gous). Yon Operatè travay menm jan an, ajoute yon seri konesans operasyonèl nan yon resous estanda Kubernetes ak kontwolè ki pèmèt ou fè lòt aksyon pou sipòte kantite antite aplikasyon yo mande yo.

Ki jan sa a diferan de StatefulSets, ki fèt pou aplikasyon ki mande gwoup la bay yo ak resous eta tankou depo done oswa IP estatik? Pou aplikasyon sa yo, Operatè yo ka itilize StatefulSets (olye de ReplicaSets) kòm yon baz, ofrann automatisation adisyonèl: fè aksyon ki nesesè yo nan ka aksidan, fè sovgad, mete ajou konfigirasyon an, elatriye.

Se konsa, kijan tout bagay sa yo ap mache? Operatè a se yon demon manadjè ki:

  1. abònman nan API evènman an nan Kubernetes;
  2. resevwa nan men li done sou sistèm nan (sou li ReplicaSets, gous, Sèvis ak sou sa.);
  3. resevwa done sou Resous Twazyèm Pati (gade egzanp ki anba a);
  4. reyaji nan aparans/chanjman Resous Twazyèm Pati (pou egzanp, chanje gwosè a, chanje vèsyon an, ak sou sa);
  5. reyaji a chanjman nan eta a nan sistèm nan (sou li ReplicaSets, gous, Sèvis ak sou sa.);
  6. pi enpòtan an:
    1. mande API Kubernetes pou kreye tout sa li bezwen (ankò, pwòp li yo ReplicaSets, gous, Sèvis...),
    2. fè kèk majik (pou senplifye, ou ka panse ke Operatè a antre nan gous yo tèt yo epi li rele kòmandman, pou egzanp, rantre nan yon gwoup oswa amelyore fòma done a lè mete ajou yon vèsyon).

Operatè pou Kubernetes: ki jan yo kouri aplikasyon pou eta
An reyalite, jan yo ka wè nan foto a, se yon aplikasyon separe tou senpleman ajoute nan Kubernetes (yon regilye deplwaman с ReplicaSet), ki rele Operatè a. Li ap viv nan yon gous òdinè (anjeneral jis youn) epi, kòm yon règ, responsab sèlman pou li yo Espas non. Aplikasyon operatè sa a aplike API li yo - byenke pa dirèkteman, men atravè Resous Twazyèm Pati nan Kubernetes.

Kidonk, apre nou fin kreye nan Espas non Operatè, nou ka ajoute nan li Resous Twazyèm Pati.

Egzanp pou etcd (gade pi ba a pou plis detay):

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

Egzanp pou 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

Kondisyon pou Operatè yo

CoreOS te fòme modèl prensipal yo te jwenn pa enjenyè pandan y ap travay sou Operatè yo. Malgre lefèt ke tout Operatè yo se endividyèl (kreye pou yon aplikasyon espesifik ak karakteristik pwòp li yo ak bezwen), kreyasyon yo dwe baze sou yon kalite fondasyon ki enpoze kondisyon sa yo:

  1. Enstalasyon dwe fèt atravè yon sèl deplwaman: kubectl kreye -f SOME_OPERATOR_URL/deployment.yaml - epi yo pa mande pou aksyon adisyonèl.
  2. Lè w ap enstale yon Operatè nan Kubernetes, yo dwe kreye yon nouvo tip twazyèm pati (ThirdPartyResource). Pou lanse ka aplikasyon yo (enstans gwoup) epi jere yo plis (mete ajou vèsyon, redimensionnement, elatriye), itilizatè a pral sèvi ak kalite sa a.
  3. Chak fwa sa posib, ou ta dwe itilize primitif yo bati nan Kubernetes, tankou Sèvis и ReplicaSetspou itilize kòd ki byen teste e ki konprann.
  4. Mande konpatibilite bak nan Operatè yo ak sipò pou ansyen vèsyon resous itilizatè yo kreye.
  5. Si yo retire Operatè a, aplikasyon an li menm ta dwe kontinye fonksyone san okenn chanjman.
  6. Itilizatè yo ta dwe kapab defini vèsyon aplikasyon an vle epi òganize mizajou vèsyon aplikasyon an. Mank mizajou lojisyèl se yon sous komen nan pwoblèm operasyonèl ak sekirite, kidonk Operatè yo dwe ede itilizatè yo nan zafè sa a.
  7. Operatè yo ta dwe teste ak yon zouti tankou Chaos Monkey, ki idantifye echèk potansyèl nan gous, konfigirasyon, ak rezo a.

etcd Operatè

Egzanp Aplikasyon Operatè - Etcd Operatè, prepare nan jou anons la nan konsèp sa a. Konfigirasyon gwoup etcd la ka konplèks akòz nesesite pou kenbe kowòm, bezwen pou rekonfigire manm gwoup, kreye sovgad, elatriye. Pou egzanp, manyèlman dekale yon gwoup etcd vle di ke ou bezwen kreye yon non DNS pou yon nouvo manm gwoup, kòmanse yon nouvo antite etcd, epi avèti gwoup la sou nouvo manm lan (etcdctl manm ajoute). Nan ka Operatè a, itilizatè a pral sèlman bezwen chanje gwosè gwoup la - tout lòt bagay pral rive otomatikman.

Epi depi etcd te kreye tou nan CoreOS, li te byen lojik pou wè Operatè li yo parèt an premye. Ki jan li travay? Operatè lojik elatriye se detèmine pa twa eleman:

  1. Obsève. Operatè a kontwole eta gwoup la lè l sèvi avèk Kubernetes API.
  2. Analiz. Jwenn diferans ki genyen ant estati aktyèl la ak sila a vle (defini pa konfigirasyon itilizatè a).
  3. Aksyon. Rezoud diferans ki detekte lè l sèvi avèk etcd ak/oswa API sèvis Kubernetes.

Operatè pou Kubernetes: ki jan yo kouri aplikasyon pou eta

Pou aplike lojik sa a, fonksyon yo te prepare nan Operatè a Kreye/Detwi (kreye ak efase manm gwoup etcd) ak Resize (chanjman nan kantite manm gwoup la). Yo te tcheke kòrèkteman nan operasyon li yo lè l sèvi avèk yon sèvis piblik ki te kreye nan resanblans Chaos Monkey soti nan Netflix, i.e. touye gous etcd owaza.

Pou operasyon konplè nan etcd, Operatè a bay karakteristik adisyonèl: Backup (otomatik ak envizib pou itilizatè yo kreye kopi backup - nan konfigirasyon an li ase pou detèmine konbyen fwa yo fè yo ak konbyen yo estoke - ak restorasyon ki vin apre nan done ki soti nan yo) ak Upgrade (mete ajou enstalasyon etcd san D ').

Ki jan travay ak yon Operatè sanble?

$ 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

Estati aktyèl la nan etcd Operator se yon vèsyon beta, ki egzije Kubernetes 1.5.3+ ak etcd 3.0+ pou kouri. Kòd sous ak dokiman (ki gen ladan enstriksyon pou itilize) yo disponib nan GitHub.

Yon lòt egzanp aplikasyon nan CoreOS te kreye - Operatè Prometheus, men li toujou nan vèsyon alfa (se pa tout karakteristik planifye yo te aplike).

Estati ak kandida

5 mwa pase depi anons Operatè Kubernetes yo. Genyen toujou sèlman de aplikasyon ki disponib nan depo ofisyèl CoreOS (pou etcd ak Prometheus). Tou de poko rive nan vèsyon ki estab yo, men komèt yo obsève sou yon baz chak jou.

Devlopè yo anvizaje "yon avni kote itilizatè yo enstale Operatè Postgres, Operatè Cassandra oswa Operatè Redis sou grap Kubernetes yo epi travay ak antite ki kapab évolutive nan aplikasyon sa yo osi fasil ke deplwaye kopi aplikasyon entènèt apatrid jodi a." Premye Operatè ki soti nan devlopè twazyèm pati reyèlman te kòmanse parèt:

Nan pi gwo konferans sou lojisyèl gratis Ewopeyen an FOSDEM, ki te fèt nan mwa fevriye 2017 nan Brussels, Josh Wood soti nan CoreOS te anonse Operatè yo nan rapò (yon videyo ki disponib nan lyen an!), ki ta dwe kontribye nan kwasans popilarite konsèp sa a nan pi laj kominote Open Source la.

PS Mèsi pou enterè ou nan atik la! Abònman nan sant nou an, pou nou pa rate nouvo materyèl ak resèt sou DevOps ak administrasyon sistèm GNU/Linux - nou pral pibliye yo regilyèman!

Sous: www.habr.com

Add nouvo kòmantè