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 мамандарына қолданба кодына операциялық білімді қосуға мүмкіндік беріңіз.

Оператордың мақсаты — пайдаланушыға Kubernetes кластеріндегі бірнеше күйі бар қолданбалы нысандарды басқаруға мүмкіндік беретін API қамтамасыз етіңіз, оның астында не бар (қандай деректер және онымен не істеу керек, кластерді қолдау үшін әлі де қандай пәрмендерді орындау керек) туралы ойланбастан. ). Шын мәнінде, Оператор кластердегі қосымшамен жұмысты мүмкіндігінше жеңілдетуге, бұрын қолмен шешуге болатын операциялық тапсырмаларды орындауды автоматтандыруға арналған.

Операторлар қалай жұмыс істейді

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. Мүмкіндігінше, Kubernetes ішіне енгізілген примитивтерді пайдалану керек, мысалы Қызметтер и 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-тен Джош Вуд операторларды жариялады. есеп (бейне сілтемеде қол жетімді!) Бұл тұжырымдаманың кеңірек Open Source қауымдастығында танымалдығының өсуіне ықпал етуі керек.

PS Мақалаға қызығушылық танытқаныңыз үшін рахмет! Біздің хабқа жазылыңыз, DevOps және GNU/Linux жүйелік әкімшілігі бойынша жаңа материалдар мен рецепттерді жіберіп алмау үшін - біз оларды тұрақты түрде жариялаймыз!

Ақпарат көзі: www.habr.com

пікір қалдыру