Kubernetes üçün operatorlar: dövlət proqramlarını necə işə salmaq olar

Kubernetes-də dövlət tətbiqləri ilə bağlı problem

Tətbiqlərin və xidmətlərin konfiqurasiyası, işə salınması və sonrakı miqyası vətəndaşlığı olmayan kimi təsnif edilən hallara gəldikdə asandır, yəni. məlumatlara qənaət etmədən. Standart API-lərdən istifadə edərək Kubernetes-də bu cür xidmətləri işə salmaq rahatdır, çünki hər şey "qutudan kənarda" baş verir: standart konfiqurasiyalara uyğun olaraq, heç bir spesifikasiya və sehr olmadan.

Sadəcə olaraq, konteynerlərin çoxluğunda PHP/Ruby/Python-da backendin daha beş nüsxəsini işə salmaq üçün sadəcə 5 dəfə yeni server qurmaq və mənbələri kopyalamaq lazımdır. Həm mənbə kodu, həm də başlanğıc skripti şəkildə olduğu üçün vətəndaşlığı olmayan tətbiqin miqyası tamamilə elementar olur. Konteynerlərin və mikroservis arxitekturasının pərəstişkarlarının yaxşı bildiyi kimi, çətinlik bundan başlayır dövlət proqramları, yəni. verilənlər bazaları və keşlər (MySQL, PostgreSQL, Redis, ElasticSearch, Cassandra...) kimi verilənlərin davamlılığı ilə. Bu, həm kvorum klasterini müstəqil şəkildə həyata keçirən proqram təminatına (məsələn, Percona XtraDB və Cassandra), həm də ayrıca idarəetmə utilitləri tələb edən proqram təminatına (məsələn, Redis, MySQL, PostgreSQL...) aiddir.

Çətinliklər ona görə yaranır ki, mənbə kodu və xidmətin işə salınması artıq kifayət deyil - daha bir neçə addım yerinə yetirməlisiniz. Ən azı məlumatları kopyalayın və/yaxud klasterə qoşulun. Daha dəqiq desək, bu xidmətlər məlumat itkisi və ya müvəqqəti əlçatmazlıq olmadan onların düzgün miqyasını necə ölçmək, yeniləmək və yenidən konfiqurasiya etmək barədə anlayış tələb edir. Bu ehtiyacların nəzərə alınması “əməliyyat bilikləri” adlanır.

CoreOS Operatorları

Əməliyyat biliklərini "proqramlaşdırmaq" üçün keçən ilin sonunda CoreOS layihəsi təqdim etdi Kubernetes platforması üçün "yeni proqram təminatı sinfi" - Operatorlar (ingilis dilindən "əməliyyat", yəni "əməliyyat").

Kubernetes-in əsas imkanlarından istifadə edən və genişləndirən operatorlar (daxil olmaqla). Stateful Sets, aşağıdakı fərqə baxın) DevOps mütəxəssislərinə tətbiq koduna əməliyyat bilikləri əlavə etməyə icazə verin.

Operatorun Məqsədi — istifadəçiyə Kubernetes klasterində çoxlu statuslu tətbiqetmə obyektlərini idarə etməyə imkan verən API təqdim edin, başlıq altında nə olduğunu (hansı məlumatlar və onunla nə etmək lazımdır, klasteri saxlamaq üçün hələ də hansı əmrləri yerinə yetirmək lazımdır) ). Əslində, Operator, əvvəllər əl ilə həll edilməli olan əməliyyat tapşırıqlarının icrasını avtomatlaşdıraraq, klaster daxilində tətbiq ilə işi mümkün qədər sadələşdirmək üçün hazırlanmışdır.

Operatorlar necə işləyir

ReplicaSets Kubernetes sizə işləyən podların istədiyiniz sayını təyin etməyə imkan verir və nəzarətçilər onların sayının saxlanmasını təmin edir (podları yaradaraq və silməklə). Operator oxşar şəkildə işləyir, standart Kubernetes resursuna və nəzarətçisinə əməliyyat bilikləri toplusunu əlavə edir ki, bu da sizə tələb olunan sayda tətbiq obyektlərini dəstəkləmək üçün əlavə tədbirlər həyata keçirməyə imkan verir.

Bu nə ilə fərqlənir Stateful Sets, klasterin onları məlumatların saxlanması və ya statik IP-lər kimi statuslu resurslarla təmin etməsini tələb edən proqramlar üçün nəzərdə tutulmuşdur? Belə proqramlar üçün Operatorlar istifadə edə bilər Stateful Sets (əvəzinə ReplicaSets) əsas kimi, təklif əlavə avtomatlaşdırma: qəzalar zamanı lazımi hərəkətləri yerinə yetirmək, ehtiyat nüsxələri çıxarmaq, konfiqurasiyanı yeniləmək və s.

Belə ki, bütün bunlar necə işləyir? Operator menecer demonudur ki:

  1. Kubernetes-də hadisə API-yə abunə olur;
  2. ondan sistem haqqında məlumat alır (onun haqqında ReplicaSets, pods, Xidmətlər və s.);
  3. haqqında məlumat alır Üçüncü Tərəf Resursları (aşağıdakı nümunələrə baxın);
  4. görünüşə/dəyişikliyə reaksiya verir Üçüncü Tərəf Resursları (məsələn, ölçüsünü dəyişdirmək, versiyanı dəyişdirmək və s.);
  5. sistemin vəziyyətindəki dəyişikliklərə reaksiya verir (haqqında ReplicaSets, pods, Xidmətlər və s.);
  6. ən əhəmiyyətlisi:
    1. Kubernetes API-ni ehtiyac duyduğu hər şeyi yaratmaq üçün çağırır (yenə öz ReplicaSets, pods, Xidmətlər...),
    2. bəzi sehrləri yerinə yetirir (sadələşdirmək üçün Operatorun özləri podlara daxil olduğunu və əmrləri çağırdığını düşünə bilərsiniz, məsələn, klasterə qoşulmaq və ya versiyanı yeniləyərkən məlumat formatını təkmilləşdirmək).

Kubernetes üçün operatorlar: dövlət proqramlarını necə işə salmaq olar
Əslində, şəkildən göründüyü kimi, Kubernetes-ə ayrı bir proqram sadəcə əlavə olunur (adi Deployment с ReplicaSet), Operator adlanır. Adi bir podda yaşayır (adətən yalnız bir) və bir qayda olaraq, yalnız onun üçün məsuliyyət daşıyır Ad sahəsi. Bu operator proqramı öz API-ni həyata keçirir - birbaşa olmasa da, vasitəsilə Üçüncü Tərəf Resursları Kubernetesdə.

Beləliklə, biz yaratdıqdan sonra Ad sahəsi Operator, biz ona əlavə edə bilərik Üçüncü Tərəf Resursları.

etcd üçün nümunə (ətraflı məlumat üçün aşağıya baxın):

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

Elasticsearch üçün nümunə:

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

Operatorlar üçün tələblər

CoreOS operatorlar üzərində işləyərkən mühəndislər tərəfindən əldə edilən əsas nümunələri tərtib etmişdir. Bütün Operatorların fərdi olmasına baxmayaraq (öz xüsusiyyətləri və ehtiyacları olan xüsusi bir tətbiq üçün yaradılmışdır), onların yaradılması aşağıdakı tələbləri qoyan bir növ çərçivəyə əsaslanmalıdır:

  1. Quraşdırma tək vasitəsilə aparılmalıdır Deployment: kubectl yaratmaq -f SOME_OPERATOR_URL/deployment.yaml - və əlavə tədbirlər tələb etmir.
  2. Kubernetes-də Operator quraşdırarkən yeni üçüncü tərəf növü yaradılmalıdır (Üçüncü Tərəf Resursu). Tətbiq nümunələrini (klaster nümunələri) işə salmaq və onları daha da idarə etmək (versiyaların yenilənməsi, ölçüsünün dəyişdirilməsi və s.) üçün istifadəçi bu növdən istifadə edəcək.
  3. Mümkün olduqda, Kubernetes-də qurulmuş primitivlərdən istifadə etməlisiniz, məsələn Xidmətlər и ReplicaSetsyaxşı sınaqdan keçirilmiş və başa düşülən koddan istifadə etmək.
  4. Operatorların geriyə uyğunluğu və istifadəçi tərəfindən yaradılmış resursların köhnə versiyaları üçün dəstək tələb olunur.
  5. Operator silinərsə, proqramın özü heç bir dəyişiklik olmadan işləməyə davam etməlidir.
  6. İstifadəçilər istədiyiniz proqram versiyasını müəyyən edə və proqram versiyasının yeniləmələrini idarə edə bilməlidirlər. Proqram təminatı yeniləmələrinin olmaması əməliyyat və təhlükəsizlik problemlərinin ümumi mənbəyidir, ona görə də Operatorlar bu məsələdə istifadəçilərə kömək etməlidirlər.
  7. Operatorlar podlarda, konfiqurasiyalarda və şəbəkədə potensial nasazlıqları müəyyən edən Chaos Monkey kimi alətlə sınaqdan keçirilməlidir.

etcd operatoru

Operatorun həyata keçirilməsi nümunəsi - etcd operatoru, hazırlanmışdır bu konsepsiyanın elan edildiyi gün. etcd klaster konfiqurasiyası kvorumu saxlamaq ehtiyacı, klaster üzvlüyünü yenidən konfiqurasiya etmək, ehtiyat nüsxələri yaratmaq və s. Məsələn, etcd klasterinin əl ilə miqyası o deməkdir ki, siz yeni klaster üzvü üçün DNS adı yaratmalı, yeni etcd obyektini işə salmalı və klasteri yeni üzv haqqında xəbərdar etməlisiniz (etcdctl üzvü əlavə edin). Operatorun vəziyyətində istifadəçi yalnız klaster ölçüsünü dəyişdirməli olacaq - qalan hər şey avtomatik olaraq baş verəcəkdir.

Və etcd də CoreOS-da yaradıldığı üçün onun Operatorunun ilk olaraq görünməsi olduqca məntiqli idi. O necə işləyir? Operator məntiqi və s üç komponentlə müəyyən edilir:

  1. Müşahidə etmək. Operator Kubernetes API-dən istifadə edərək klasterin vəziyyətinə nəzarət edir.
  2. Təhlil. Cari vəziyyətlə istədiyiniz (istifadəçi konfiqurasiyası ilə müəyyən edilir) arasında fərqləri tapır.
  3. Fəaliyyət. etcd və/və ya Kubernetes xidmət API-lərindən istifadə edərək aşkar edilmiş fərqləri həll edir.

Kubernetes üçün operatorlar: dövlət proqramlarını necə işə salmaq olar

Bu məntiqi həyata keçirmək üçün Operatorda funksiyalar hazırlanmışdır Yaradın/məhv edin ( etcd klaster üzvlərinin yaradılması və silinməsi) və Yeniden boyutlandır (klaster üzvlərinin sayında dəyişiklik). Onun işləməsinin düzgünlüyü Netflix-dən Chaos Monkey-ə bənzəyən bir yardım proqramı ilə yoxlanıldı, yəni. təsadüfən etcd pods öldürmək.

etcd-nin tam işləməsi üçün Operator əlavə funksiyalar təqdim edir: Backup (istifadəçilər üçün avtomatik və görünməz olaraq ehtiyat nüsxələrin yaradılması - konfiqurasiyada onların nə qədər tez-tez edilməsini və nə qədər saxlanacağını müəyyən etmək kifayətdir - və onlardan məlumatların sonradan bərpası) və Təkmilləşdirmək (saxlanılmadan və s. quraşdırmaların yenilənməsi).

Operatorla işləmək nəyə bənzəyir?

$ 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 Operatorun cari statusu beta versiyasıdır və işləməsi üçün Kubernetes 1.5.3+ və etcd 3.0+ tələb olunur. Mənbə kodu və sənədləri (istifadə üçün təlimatlar daxil olmaqla) burada əldə etmək olar Github.

CoreOS-dan başqa bir nümunə tətbiqi yaradıldı - Prometey operatoru, lakin hələ də alfa versiyasındadır (bütün planlaşdırılan funksiyalar həyata keçirilməyib).

Vəziyyəti və perspektivləri

Kubernetes Operatorlarının elanından 5 ay keçdi. Rəsmi CoreOS repozitoriyada hələ də yalnız iki tətbiq mövcuddur (etcd və Prometheus üçün). Hər ikisi hələ stabil versiyalarına çatmayıb, lakin öhdəliklər gündəlik olaraq müşahidə olunur.

Tərtibatçılar “istifadəçilərin Kubernetes klasterlərində Postgres Operatorları, Cassandra Operatorları və ya Redis Operatorlarını quraşdıracaqları və bu gün vətəndaşlığı olmayan veb proqramların replikalarının yerləşdirilməsi kimi asanlıqla bu tətbiqlərin genişləndirilə bilən obyektləri ilə işləyəcəkləri bir gələcək” nəzərdə tuturlar. Birinci Üçüncü tərəf tərtibatçılarından operatorlar həqiqətən görünməyə başladı:

2017-ci ilin fevralında Brüsseldə baş tutan ən böyük Avropa azad proqram təminatı konfransı FOSDEM-də CoreOS-dan Coş Vud Operatorları elan etdi. hesabat (video linkdə mövcuddur!), bu konsepsiyanın daha geniş Açıq Mənbə cəmiyyətində populyarlığının artmasına kömək etməlidir.

PS Məqalə ilə maraqlandığınız üçün təşəkkür edirik! Mərkəzimizə abunə olun, DevOps və GNU/Linux sistem administrasiyası ilə bağlı yeni materialları və reseptləri qaçırmamaq üçün - biz onları müntəzəm olaraq dərc edəcəyik!

Mənbə: www.habr.com

Добавить комментарий