Kubernetes үчүн операторлор: мамлекеттик тиркемелерди кантип иштетүү керек

Kubernetesтеги штаттык тиркемелердеги көйгөй

Конфигурациялоо, ишке киргизүү жана тиркемелерди жана кызматтарды андан ары масштабдоо жарандыгы жок деп классификацияланган учурларга келгенде оңой, б.а. маалыматтарды сактабастан. Мындай кызматтарды Kubernetes'те анын стандарттуу API'лерин колдонуу менен иштетүү ыңгайлуу, анткени бардыгы "кутудан тышкары" болот: стандарттуу конфигурацияларга ылайык, эч кандай өзгөчөлүктөр же сыйкырчылыксыз.

Жөнөкөй сөз менен айтканда, контейнерлердин кластеринде PHP/Ruby/Python тилдеринде башка беш нусканы ишке киргизүү үчүн жаңы серверди 5 жолу орнотуп, булактарды көчүрүү керек. Булак коду да, init скрипти да сүрөттө болгондуктан, жарандыгы жок тиркемени масштабдоо толугу менен элементардык болуп калат. Контейнерлердин жана микросервис архитектурасынын күйөрмандары жакшы билгендей, кыйынчылык андан башталат мамлекеттик колдонмолор, б.а. маалымат базалары жана кэштер (MySQL, PostgreSQL, Redis, ElasticSearch, Cassandra...) сыяктуу берилиштердин туруктуулугу менен. Бул кворум кластерин өз алдынча ишке ашырган программалык камсыздоого (мисалы, Percona XtraDB жана Cassandra) жана өзүнчө башкаруу утилиталарын талап кылган программага (мисалы, Redis, MySQL, PostgreSQL...) тиешелүү.

Булак коду жана кызматты ишке киргизүү мындан ары жетишсиз болгондуктан, кыйынчылыктар пайда болот - дагы бир нече кадамдарды жасашыңыз керек. Жок дегенде, маалыматтарды көчүрүп жана/же кластерге кошулуңуз. Тагыраак айтканда, бул кызматтар маалымат жоготуусуз же убактылуу жеткиликсиздиксиз аларды кантип туура масштабдоо, жаңыртуу жана кайра конфигурациялоону түшүнүүнү талап кылат. Бул муктаждыктарды эске алуу "ишкердик билим" деп аталат.

CoreOS операторлору

Операциялык билимди "программалоо" үчүн, өткөн жылдын аягында CoreOS долбоору берилген Kubernetes платформасы үчүн "жаңы программалык камсыздоо классы" - Операторлор (англисчеден "operation", б.а. "операция").

Kubernetesтин негизги мүмкүнчүлүктөрүн колдонгон жана кеңейткен операторлор (анын ичинде. StatefulSets, төмөндөгү айырманы караңыз) DevOps адистерине колдонмо кодуна операциялык билимди кошууга мүмкүнчүлүк берет.

Оператордун максаты — колдонуучуга API менен камсыз кылуу, бул сизге Kubernetes кластериндеги бир нече мамлекеттик тиркемелерди башкарууга мүмкүндүк берет, капчыктын астында эмне бар (кандай маалыматтар жана аны менен эмне кылуу керек, кластерди колдоо үчүн дагы кандай буйруктар аткарылышы керек) ). Чындыгында, Оператор кластердин ичиндеги тиркеме менен иштөөнү мүмкүн болушунча жөнөкөйлөтүү, мурда кол менен чечилиши керек болгон оперативдүү тапшырмаларды аткарууну автоматташтыруу үчүн иштелип чыккан.

Операторлор кантип иштешет

ReplicaSets Kubernetes иштеп жаткан поддондордун керектүү санын көрсөтүүгө мүмкүндүк берет, ал эми контроллерлор алардын санынын сакталышын камсыздайт (поддорду түзүү жана жок кылуу менен). Оператор ушундай эле жол менен иштейт, стандарттуу Kubernetes ресурсуна жана контроллерине операциялык билимдердин топтомун кошуп, колдонмо объекттеринин керектүү санын колдоо үчүн кошумча аракеттерди жасоого мүмкүндүк берет.

Бул эмнеси менен айырмаланат StatefulSets, кластер аларды маалыматтарды сактоо же статикалык IP сыяктуу мамлекеттик ресурстар менен камсыз кылууну талап кылган колдонмолор үчүн иштелип чыккан? Мындай колдонмолор үчүн Операторлор колдоно алышат StatefulSets (ордуна ReplicaSets) негиз катары, сунуш кылуу кошумча автоматташтыруу: кыйроолордо керектүү аракеттерди жасоо, резервдик көчүрмөлөрдү жасоо, конфигурацияны жаңыртуу ж.б.

Ошентип, мунун баары кантип иштейт? Оператор менеджер демону болуп саналат, ал:

  1. Kubernetesтеги окуя API'ге жазылат;
  2. андан система жөнүндө маалыматтарды алат (анын ReplicaSets, кынында, кызмат жана башка.);
  3. жөнүндө маалыматтарды алат Үчүнчү тараптын ресурстары (төмөндөгү мисалдарды караңыз);
  4. көрүнүшкө/өзгөрүүгө жооп берет Үчүнчү тараптын ресурстары (мисалы, өлчөмүн өзгөртүү, версиясын өзгөртүү ж.б.у.с.);
  5. системанын абалынын өзгөрүшүнө жооп берет (анын жөнүндө ReplicaSets, кынында, кызмат жана башка.);
  6. эң башкысы:
    1. Kubernetes API'ге керектүү нерселердин бардыгын түзүүгө чакырат (кайрадан, өзүнүн ReplicaSets, кынында, кызмат...),
    2. кандайдыр бир сыйкырчылыкты аткарат (жөнөкөйлөшүү үчүн, сиз Оператор өзү подводдорго кирип, буйруктарды чакырат деп ойлосоңуз болот, мисалы, кластерге кошулуу же версияны жаңылоодо маалымат форматын жаңыртуу).

Kubernetes үчүн операторлор: мамлекеттик тиркемелерди кантип иштетүү керек
Чынында эле, сүрөттө көрүнүп тургандай, өзүнчө тиркеме жөн гана Kubernetesке кошулган (кадимки жайылтуу с ReplicaSet), Оператор деп аталат. Ал кадимки порошокто жашайт (көбүнчө бир гана) жана, эреже катары, ал үчүн гана жооптуу Ат мейкиндиги. Бул оператордук тиркеме өзүнүн APIин ишке ашырат - түздөн-түз эмес, бирок аркылуу Үчүнчү тараптын ресурстары Кубернетес шаарында.

Ошентип, биз жараткандан кийин Ат мейкиндиги Оператор, биз ага кошо алабыз Үчүнчү тараптын ресурстары.

ж.б. үчүн мисал (чоо-жайын төмөндө караңыз):

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 create -f SOME_OPERATOR_URL/deployment.yaml - жана кошумча аракеттерди талап кылбайт.
  2. Kubernetes'те Операторду орнотууда, үчүнчү тараптын жаңы түрү түзүлүшү керек (Үчүнчү Тарап Ресурс). Колдонмо инстанцияларын (кластер инстанцияларын) ишке киргизүү жана аларды андан ары башкаруу (версияларды жаңыртуу, өлчөмүн өзгөртүү ж.б.) үчүн колдонуучу бул түрдү колдонот.
  3. Мүмкүн болушунча, сиз Кубернетеске орнотулган примитивдерди колдонушуңуз керек, мисалы кызмат и ReplicaSetsжакшы сыналган жана түшүнүктүү кодду колдонуу.
  4. Операторлордун артка шайкештигин жана колдонуучу түзгөн ресурстардын эски версияларын колдоону талап кылат.
  5. Оператор алынып салынса, тиркеменин өзү өзгөрүүсүз иштей бериши керек.
  6. Колдонуучулар каалаган колдонмо версиясын аныктап, колдонмо версиясынын жаңыртууларын уюштура алышы керек. Программа жаңыртууларынын жоктугу операциялык жана коопсуздук көйгөйлөрүнүн жалпы булагы болуп саналат, ошондуктан Операторлор бул маселеде колдонуучуларга жардам бериши керек.
  7. Операторлорду Chaos Monkey сыяктуу шайман менен сынап көрүү керек, ал подколордогу, конфигурациялардагы жана тармактагы мүмкүн болуучу каталарды аныктайт.

etcd оператору

Операторду ишке ашыруунун мисалы - etcd оператору, даярдалган бул концепция жарыяланган күнү. etcd кластеринин конфигурациясы кворумду сактоо, кластердин мүчөлүгүн кайра конфигурациялоо, резервдик көчүрмөлөрдү түзүү жана башкалардан улам татаал болушу мүмкүн. Мисалы, etcd кластерин кол менен масштабдоо сиз кластердин жаңы мүчөсү үчүн DNS атын түзүп, жаңы etcd объектин баштооңуз жана кластерге жаңы мүчө жөнүндө эскертүү керек дегенди билдирет (etcdctl мүчөсү кошуу). Оператордун шартында, колдонуучуга кластердин өлчөмүн гана өзгөртүү керек болот - калганынын баары автоматтык түрдө ишке ашат.

Жана etcd да CoreOSто түзүлгөндүктөн, анын Операторунун биринчи пайда болушу абдан логикалык болду. Ал кантип иштейт? Оператор логикасы ж.б үч компонент менен аныкталат:

  1. Байкоо. Оператор Kubernetes API аркылуу кластердин абалын көзөмөлдөйт.
  2. Анализ. Учурдагы абал менен каалагандын ортосундагы айырмачылыктарды табат (колдонуучунун конфигурациясы менен аныкталат).
  3. Акция. Табылган айырмачылыктарды etcd жана/же Kubernetes кызматынын API'лери аркылуу чечет.

Kubernetes үчүн операторлор: мамлекеттик тиркемелерди кантип иштетүү керек

Бул логиканы ишке ашыруу үчүн Оператордо функциялар даярдалган Түзүү/Жок кылуу (cd кластер мүчөлөрүн түзүү жана жок кылуу) жана өлчөмдү (кластердин мүчөлөрүнүн санынын өзгөрүшү). Анын иштешинин тууралыгы Netflixтин Chaos Monkey окшоштугунда түзүлгөн утилита аркылуу текшерилген, б.а. ж.б. капчыктарды туш келди өлтүрүү.

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 операторунун учурдагы абалы — бета версиясы, аны иштетүү үчүн Kubernetes 1.5.3+ жана etcd 3.0+ талап кылынат. Булак коду жана документтер (анын ичинде колдонуу боюнча нускамалар) дареги боюнча жеткиликтүү GitHub.

CoreOS ишке ашыруунун дагы бир мисалы түзүлдү - Прометей оператору, бирок ал дагы эле альфа версиясында (бардык пландаштырылган функциялар ишке аша элек).

Статусу жана келечеги

Kubernetes Operators жарыялагандан бери 5 ай өттү. Расмий CoreOS репозиторийинде дагы эле эки гана ишке ашыруу бар (etcd жана Prometheus үчүн). Экөө тең туруктуу версияларына жете элек, бирок милдеттенмелер күн сайын байкалат.

Иштеп чыгуучулар "колдонуучулар Postgres операторлорун, Кассандра операторлорун же Redis операторлорун Kubernetes кластерлерине орнотуп, ушул тиркемелердин масштабдуу объекттери менен бүгүнкү күндө жарандыгы жок веб-тиркемелердин репликаларын жайгаштыруу сыяктуу оңой иштей турган келечекти" карашат. Алгачкы Үчүнчү тарап иштеп чыгуучулардын операторлору чынында эле пайда боло баштады:

2017-жылдын февраль айында Брюсселде өткөн FOSDEM европалык эң ири эркин программалык камсыздоо конференциясында CoreOS компаниясынан Джош Вуд операторлорду жарыялады. билдирүү (видео шилтемеде жеткиликтүү!), бул ачык булак коомчулугунда бул концепциянын популярдуулугунун өсүшүнө салым кошуусу керек.

PS Макалага кызыгууңуз үчүн рахмат! Биздин борборго жазылыңыз, DevOps жана GNU/Linux тутумунун администрациясы боюнча жаңы материалдарды жана рецепттерди өткөрүп жибербөө үчүн - биз аларды үзгүлтүксүз жарыялайбыз!

Source: www.habr.com

Комментарий кошуу