Операторҳо барои Kubernetes: чӣ гуна иҷро кардани барномаҳои давлатӣ

Мушкилот бо барномаҳои давлатӣ дар Kubernetes

Конфигуратсия, роҳандозӣ ва миқёси минбаъдаи замимаҳо ва хидматҳо ҳангоми сухан дар бораи парвандаҳои ҳамчун бешаҳрвандӣ таснифшуда осон аст, яъне. бе сарфаи маълумот. Иҷрои чунин хидматҳо дар Kubernetes бо истифода аз API-ҳои стандартии он қулай аст, зеро ҳама чиз "аз қуттӣ" рӯй медиҳад: мувофиқи конфигуратсияҳои стандартӣ, бидуни ҷалби ягон мушаххасот ё ҷодугарӣ.

Оддӣ карда гӯем, барои ба кор андохтани панҷ нусхаи дигари пуштибон дар PHP/Ruby/Python дар кластери контейнерҳо, шумо бояд танҳо 5 маротиба сервери нав насб кунед ва манбаъҳоро нусхабардорӣ кунед. Азбаски ҳам рамзи ибтидоӣ ва ҳам скрипти ибтидоӣ дар тасвир ҳастанд, миқёси барномаи бидуни шаҳрвандӣ комилан оддӣ мешавад. Тавре ки мухлисони контейнерҳо ва меъмории микросервис хуб медонанд, мушкилот аз он оғоз мешавад барномаҳои давлатӣ, яъне. бо устувории додаҳо ба монанди пойгоҳи додаҳо ва кэшҳо (MySQL, PostgreSQL, Redis, ElasticSearch, Cassandra...). Ин ба ҳам нармафзоре, ки мустақилона кластери кворумро амалӣ мекунад (масалан, Percona XtraDB ва Cassandra) ва нармафзоре, ки утилитаҳои идоракунии алоҳидаро талаб мекунад (ба монанди Redis, MySQL, PostgreSQL...).

Мушкилот аз он сабаб ба миён меоянд, ки рамзи сарчашма ва оғози хидмат дигар кофӣ нестанд - шумо бояд якчанд қадамҳои дигарро иҷро кунед. Ҳадди ақал маълумотро нусхабардорӣ кунед ва/ё ба кластер ҳамроҳ шавед. Аниқтараш, ин хидматҳо фаҳмиши дурусти миқёс, навсозӣ ва аз нав танзимкунии онҳоро бидуни талафи маълумот ё дастрасии муваққатӣ талаб мекунанд. Ба назар гирифтани ин талаботро «донишҳои амалиётӣ» меноманд.

Операторҳои CoreOS

Барои "барнома" кардани донишҳои амалиётӣ, дар охири соли гузашта лоиҳаи CoreOS муаррифӣ кард "синфи нави нармафзор" барои платформаи Kubernetes - Операторҳо (аз "амалиёт", яъне "амалиёт").

Оператороне, ки қобилиятҳои асосии Kubernetes-ро истифода мебаранд ва васеъ мекунанд (аз ҷумла. Маҷмӯаҳои давлатӣ, фарқиятро дар зер бубинед) ба мутахассисони DevOps имкон диҳед, ки дониши амалиётро ба рамзи барнома илова кунанд.

Мақсади оператор — ба корбар API-ро пешниҳод кунед, ки ба шумо имкон медиҳад, ки объектҳои сершумори барномаҳои давлатиро дар кластери Kubernetes идора кунед, бидуни андеша дар бораи он, ки дар зери сарпӯш чӣ аст (кадом маълумот ва бо он чӣ кор кардан лозим аст, барои нигоҳ доштани кластер кадом фармонҳоро иҷро кардан лозим аст) ). Дарвоқеъ, Оператор барои содда кардани кор бо замима дар дохили кластер тарҳрезӣ шудааст, ки иҷрои вазифаҳои оперативиро, ки қаблан бояд дастӣ ҳал мешуд, автоматӣ кунад.

Чӣ тавр Операторҳо кор мекунанд

ReplicaSets Kubernetes ба шумо имкон медиҳад, ки шумораи дилхоҳи подкҳои фаъолро муайян кунед ва контроллерҳо нигоҳ доштани шумораи онҳоро таъмин мекунанд (бо эҷод ва нест кардани подкҳо). Оператор бо ҳамин тарз кор карда, маҷмӯи донишҳои амалиётиро ба манбаи стандартӣ ва контролери Kubernetes илова мекунад, ки ба шумо имкон медиҳад амалҳои иловагиро барои дастгирии шумораи зарурии объектҳои барнома иҷро кунед.

Ин аз он чӣ фарқ дорад Маҷмӯаҳои давлатӣ, барои барномаҳое тарҳрезӣ шудааст, ки кластер барои таъмини онҳо бо захираҳои давлатӣ ба монанди нигаҳдории додаҳо ё IP-ҳои статикӣ талаб мекунанд? Барои чунин барномаҳо, Операторҳо метавонанд истифода баранд Маҷмӯаҳои давлатӣ (ба ҷои ReplicaSets) ҳамчун асос, пешниҳод автоматикунонии иловагй: дар ҳолати садама амалҳои заруриро иҷро кунед, нусхабардорӣ кунед, конфигуратсияро навсозӣ кунед ва ғайра.

Ва ҳамин тавр, ин ҳама чӣ гуна кор мекунад? Оператор як демони менеҷер аст, ки:

  1. ба рӯйдодҳои API дар Kubernetes обуна мешавад;
  2. аз он маълумот дар бораи система мегирад (дар бораи он ReplicaSets, pods, Хизматрасониҳо ва ғайра.);
  3. дар бораи маълумот мегирад Захираҳои тарафи сеюм (ба мисолҳои зер нигаред);
  4. ба намуди зоҳирӣ / тағирот вокуниш нишон медиҳад Захираҳои тарафи сеюм (масалан, барои тағир додани андоза, тағир додани версия ва ғайра);
  5. ба тағйирот дар ҳолати система вокуниш нишон медиҳад (дар бораи он ReplicaSets, pods, Хизматрасониҳо ва ғайра.);
  6. муҳимтарин:
    1. ба API Kubernetes даъват мекунад, то ҳама чизеро, ки ба он ниёз дорад (боз худаш ReplicaSets, pods, Хизматрасониҳо...),
    2. ҷодугарӣ мекунад (барои содда кардан, шумо метавонед фикр кунед, ки Оператор худаш ба қуттиҳо даромада, фармонҳоро даъват мекунад, масалан, барои ҳамроҳ шудан ба кластер ё навсозии формати маълумот ҳангоми навсозии версия).

Операторҳо барои Kubernetes: чӣ гуна иҷро кардани барномаҳои давлатӣ
Дар асл, тавре ки аз расм дида мешавад, ба Kubernetes як барномаи алоҳида илова карда мешавад (муқаррарӣ љойгиркунии с ReplicaSet), ки Оператор номида мешавад. Он дар як паҳлӯи оддӣ зиндагӣ мекунад (одатан танҳо як) ва чун қоида, танҳо барои он масъул аст Фазои ном. Ин барномаи оператор API-и худро амалӣ мекунад - гарчанде ки мустақиман не, балки тавассути Захираҳои тарафи сеюм дар Кубернетес.

Ҳамин тариқ, пас аз он ки мо дар Фазои ном Оператор, мо метавонем ба он илова кунем Захираҳои тарафи сеюм.

Мисол барои etcd (барои тафсилот ба поён нигаред):

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

Мисол барои 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

Талабот ба операторон

CoreOS намунаҳои асосиеро, ки муҳандисон ҳангоми кор дар Операторҳо ба даст овардаанд, таҳия кардааст. Сарфи назар аз он, ки ҳама Операторҳо инфиродӣ мебошанд (барои як барномаи мушаххас бо хусусиятҳо ва ниёзҳои худ сохта шудаанд), эҷоди онҳо бояд ба як навъ чаҳорчӯба асос ёбад, ки талаботи зеринро ба миён меорад:

  1. Насбкунӣ бояд ба воситаи ягона анҷом дода шавад љойгиркунии: kubectl эҷод -f SOME_OPERATOR_URL/deployment.yaml - ва амалҳои иловагӣ талаб намекунанд.
  2. Ҳангоми насб кардани Оператор дар Kubernetes, бояд навъи нави тарафи сеюм эҷод карда шавад (Resource ThirdParty). Барои оғоз кардани мисолҳои барнома (инстансияҳои кластер) ва идоракунии минбаъдаи онҳо (навсозии версияҳо, тағир додани андоза ва ғайра), корбар аз ин намуд истифода мебарад.
  3. То ҳадди имкон, шумо бояд примитивҳои дар Kubernetes сохташударо истифода баред, масалан Хизматрасониҳо и ReplicaSetsки коди санчидашуда ва фахмо истифода шавад.
  4. Мутобиқати бозгашти Операторҳо ва дастгирии версияҳои кӯҳнаи захираҳои аз ҷониби корбар эҷодшударо талаб мекунад.
  5. Агар Оператор хориҷ карда шавад, худи барнома бояд бидуни тағирот корашро идома диҳад.
  6. Истифодабарандагон бояд версияи дилхоҳи барномаро муайян кунанд ва навсозиҳои версияи барномаро ташкил кунанд. Набудани навсозии нармафзор манбаи маъмули мушкилоти амалиётӣ ва амниятӣ мебошад, бинобар ин Операторон бояд дар ин масъала ба корбарон кумак кунанд.
  7. Операторҳо бояд бо асбобе ба монанди Chaos Monkey санҷида шаванд, ки нокомиҳои эҳтимолиро дар подкӯҳҳо, конфигуратсияҳо ва шабака муайян мекунад.

Operator etcd

Намунаи амалисозии оператор - Оператор etcd, тайёр карда шудааст дар рузи эълон карда шудани ин концепция. Конфигуратсияи кластери etcd метавонад аз сабаби зарурати нигоҳ доштани кворум, зарурати аз нав танзим кардани узвияти кластер, эҷоди нусхаҳои эҳтиётӣ ва ғайра мураккаб бошад. Масалан, ба таври дастӣ васеъ кардани кластери etcd маънои онро дорад, ки ба шумо лозим аст, ки номи DNS-ро барои узви нави кластер эҷод кунед, объекти нави etcd-ро оғоз кунед ва кластерро дар бораи аъзои нав огоҳ кунед (аъзои etcdctl илова кунед). Дар мавриди Оператор, корбар бояд танҳо андозаи кластерро тағир диҳад - ҳама чиз ба таври худкор сурат мегирад.

Ва азбаски etcd низ дар CoreOS сохта шудааст, дидани аввалин оператори он комилан мантиқӣ буд. Ӯ чӣ гуна кор мекунад? Мантиқи оператор ва ғайра бо се ҷузъ муайян карда мешавад:

  1. Мушоҳида кунед. Оператор ҳолати кластерро бо истифода аз API Kubernetes назорат мекунад.
  2. Таҳлил. Фарқи байни ҳолати кунунӣ ва ҳолати дилхоҳро пайдо мекунад (бо конфигуратсияи корбар муайян карда мешавад).
  3. Амал. Тафовутҳои ошкоршударо бо истифода аз API-ҳои хидмати etcd ва/ё Kubernetes ҳал мекунад.

Операторҳо барои Kubernetes: чӣ гуна иҷро кардани барномаҳои давлатӣ

Барои татбиқи ин мантиқ дар Оператор функсияҳо омода карда шудаанд Эҷод / Нобуд (таъсис ва нест кардани аъзоёни кластери etcd) ва Resize (тағйирёбии шумораи аъзоёни кластер). Дурустии кори он бо истифода аз утилитае, ки дар шабеҳи Chaos Monkey аз Netflix сохта шудааст, тафтиш карда шуд, яъне. ба таври тасодуфӣ куштани pods etcd.

Барои кори пурраи etcd, Оператор хусусиятҳои иловагӣ медиҳад: кадани (автоматӣ ва ба корбарон ноаён эҷод кардани нусхаҳои эҳтиётӣ - дар конфигуратсия барои муайян кардани он ки чӣ тавр зуд-зуд сохтани онҳо ва чанд нигоҳ доштан лозим аст - ва барқарорсозии минбаъдаи маълумот аз онҳо) ва азнавсозӣ (навсозии насбҳои ва ғайра бе бекористии).

Кор бо Оператор чӣ гуна аст?

$ 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

Ҳолати кунунии etcd Operator версияи бета мебошад, ки барои кор кардан Kubernetes 1.5.3+ ва etcd 3.0+-ро талаб мекунад. Рамзи манбаъ ва ҳуҷҷатҳо (аз ҷумла дастур оид ба истифода) дар ин ҷо дастрас аст GitHub.

Намунаи дигари татбиқи CoreOS офарида шудааст - Оператор Prometheus, аммо он ҳоло ҳам дар версияи алфа аст (на ҳама хусусиятҳои ба нақша гирифташуда амалӣ карда шудаанд).

Вазъият ва дурнамои

Аз эълони Операторҳои Kubernetes 5 моҳ гузашт. Дар анбори расмии CoreOS то ҳол танҳо ду татбиқ мавҷуд аст (барои etcd ва Prometheus). Ҳарду то ҳол ба версияҳои устувори худ нарасидаанд, аммо ӯҳдадориҳо ҳамарӯза мушоҳида карда мешаванд.

Таҳиягарон "ояндаеро дар назар доранд, ки дар он корбарон Операторҳои Postgres, Cassandra Operators ё Redis-ро дар кластерҳои Kubernetes-и худ насб мекунанд ва бо объектҳои миқёспазири ин барномаҳо ба осонӣ кор мекунанд, ба мисли ҷойгиркунии репликаҳои веб-барномаҳои бидуни шаҳрвандӣ имрӯз." Аввал Операторҳо аз таҳиягарони тарафи сеюм воқеан пайдо шудан гирифт:

Дар калонтарин конфронси нармафзори озоди аврупоӣ FOSDEM, ки моҳи феврали соли 2017 дар Брюссел баргузор шуд, Ҷош Вуд аз CoreOS Операторонро эълон кард хисобот (видео дар истиноди дастрас аст!), ки бояд ба афзоиши маъруфияти ин консепсия дар ҷомеаи васеътари Source мусоидат кунад.

PS Ташаккур барои таваҷҷӯҳи шумо ба мақола! Ба маркази мо обуна шавед, то аз даст надиҳед маводҳо ва дастурҳои навро дар бораи DevOps ва маъмурияти системаи GNU/Linux - мо онҳоро мунтазам нашр хоҳем кард!

Манбаъ: will.com

Илова Эзоҳ