Праект Cozystack прадставіў перапрацаваны etcd-operator з новым API

Інструментарый etcd-operator, які дапамагае разгортваць і суправаджаць кластары etcd у Kubernetes, перайшоў пад кіраванне праекта Cozystack. Разам з перадачай праекта апублікавана новая рэалізацыя etcd-operator, напісаная з нуля і якая выкарыстоўвае API etcd-operator.cozystack.io/v1alpha2 замест ранейшага etcd.aenix.io/v1alpha1. Новую рэалізацыю напісаў Цімафей Ларкін, адзін з мэйнтэйнераў ранейшай кодавай базы. Стары варыянт захаваны ў галінцы v1alpha1. Код напісаны на Go і распаўсюджваецца пад ліцэнзіяй Apache 2.0. Cozystack з'яўляецца Sandbox-праектам некамерцыйнай арганізацыі CNCF.

Галоўная змена ў новым etcd-operator – адмова ад StatefulSet для кіравання вузламі. Цяпер аператар наўпрост працуе са штатным Membership API etcd (MemberAdd, MemberPromote і MemberRemove) і сам дадае ўдзельнікаў, павялічвае learner да галасуе вузла і выводзіць вузлы з кворуму, што дае аператару поўны кантроль над складам кластара.

Паралельна распрацоўшчыкі праекта etcd развіваюць з нуля собственны1 афіцыйны etcd-operator. Па функцыянальнасці афіцыйны аператар пакуль саступае etcd-operator ад праекту Cozystack. Бо ранейшая рэалізацыя etcd-operator ужо працуе ў працоўных асяродках і выкарыстоўваецца ў Cozystack і Kamaji, яе развіццё было працягнута асобна ад афіцыйна рэалізацыі ад праекту etcd.

Развіваецца праектам Cozystack аператар кіруе кластарамі etcd праз два рэсурсы. EtcdCluster апісвае жаданае стан: лік рэплік, версію etcd, параметры сховішчы, TLS, аўтэнтыфікацыю і налады etcd. EtcdMember ствараецца для кожнага вузла кластара і валодае яго Pod і PVC. У адрозненне ад тыпавых рашэнняў аператар не выкарыстоўвае StatefulSet і абслугоўвае незалежна Pod і PVC кожнага вузла. Склад кластара змяняецца праз API Membership etcd: аператар дадае новыя вузлы як learner (MemberAdd), затым павялічвае іх да галасуючых удзельнікаў (MemberPromote). Выдаленне праходзіць праз MemberRemove, з карэктнай высновай з кворуму. Пры паўзе кластара вузлы захоўваюць сваю ідэнтычнасць.

Асноўныя магчымасці:

  • разгортванне кластара і маштабаванне ў абодва бакі, па адным вузле за раз: новыя вузлы стартуюць у рэжыме learner, выдаленне карэктна выводзіць іх з кворуму;
  • спыненне кластара без страты дадзеных (spec.replicas: 0) і аднаўленне працы з тымі ж ідэнтыфікатарамі кластара і вузлоў;
  • захоўванне дадзеных у PVC па змаўчанні ці ў tmpfs, калі дадзеныя можна аднавіць нанова; пры страце Pod аператар аўтаматычна перастварае вузлы з сховішчам у памяці;
  • паасобная настройка TLS для кліенцкіх і міжвузлавых злучэнняў: можна падлучыць свае Secret або даручыць аператару выпуск і падаўжэнне сертыфікатаў праз cert-manager;
  • аўтэнтыфікацыя з адзіным карыстачом root; яго ўліковыя дадзеныя задаюцца праз Secret;
  • стварэнне снапшотаў у S3 або PVC праз рэсурс EtcdSnapshot і аднаўленне кластара з снапшота пры першым разгортванні;
  • аўтаматычны PodDisruptionBudget, які не дае аперацыям drain парушыць кворум;
  • валідацыя спецыфікацый сродкамі apiserver праз CEL-выразы ў CRD, без webhook і залежнасці ад cert-manager;
  • падрэсурс /scale для kubectl scale і VerticalPodAutoscaler, порт метрык 2381, пракід affinity і topologySpreadConstraints;
  • убудова kubectl-etcd для паўсядзённых эксплуатацыйных задач (day-2 operations) пасля разгортвання кластара.

У параўнанні са старой рэалізацыяй (v1alpha1) змянілася наступнае:

  • API-група змянілася з etcd.aenix.io на etcd-operator.cozystack.io;
  • замест StatefulSet аператар выкарыстоўвае асобны рэсурс EtcdMember для кожнага вузла;
  • адвольны слоўнік spec.options заменены тыпізаваным наборам параметраў: quota-backend-bytes, рэжым і інтэрвал аўтакампактыфікацыі, snapshot-count; свабодная map дазваляла перадаваць сцягі, якія канфліктавалі з логікай аператара;
  • рэсурс EtcdBackup перайменаваны ў EtcdSnapshot, семантыка захавана;
  • валідацыя перанесена з webhook на CEL-правілы ў CRD;
  • сэрвіс кластара пераведзены ў рэжым headless, каб у вузлоў былі стабільныя DNS-імёны.

Міграцыя праходзіць на месцы з дапамогай etcd-migrate. Інструмент адаптуе які працуе кластар старога аператара без пераносу дадзеных, перазапуску Pod і страты кворуму. Ён мяняе толькі ўладальнікаў аб'ектаў, пазнакі і анатацыі. Пасля гэтага новы аператар бярэ кіраванне на сябе. Кліенты, якія звяртаюцца да кластара па DNS-імя, працягваюць працаваць без змен.

Рэалізацыя etcd-operator ад Cozystack закрывае большасць пунктаў плана развіцця афіцыйнага etcd-аператара праекту etcd. Статус па пунктах плана:

  • Стварэнне новага кластара etcd, напрыклад з 3 ці 5 вузлоў, з названай версіяй etcd - рэалізавана.
  • Вызначэнне стану здароўя кластара - рэалізавана.
  • Уключэнне TLS-шыфравання злучэнняў, уключаючы падаўжэнне сертыфікатаў – рэалізавана.
  • Абнаўленне ў межах патч-версій ці на адну минорную версію - рэалізавана часткова: значэнне spec.version ужываецца толькі да новых вузлоў.
  • Маштабаванне ў абодва бакі, напрыклад 1 -> 3 -> 5 вузлоў і назад - рэалізавана.
  • Настройка параметраў etcd праз сцягі ці зменныя асяроддзі - рэалізавана як закрыты тыпізаваны набор параметраў.
  • Аднаўленне аднаго адмовіў члена кластара, калі кворум захоўваецца - рэалізавана часткова: аўтаматычнай замены членаў з пашкоджаным PVC пакуль няма.
  • Аднаўленне пасля адмовы некалькіх членаў кластара і страты кворуму - не рэалізавана, праца запланавана.
  • Стварэнне рэзервовай копіі кластара па запыце - рэалізавана.
  • Перыядычнае рэзервовае капіраванне кластара – свядома вынесена за рамкі аператара: перыядычныя снапшоты прапануецца запускаць штатным CronJob.

    Акрамя таго, v1alpha2 дае магчымасці, якіх няма ў плане развіцця афіцыйнага аператара:

    • спыненне кластара да нуля рэплік, паўза і аднаўленне з захаваннем ідэнтычнасці кластара і вузлоў;
    • сховішча ў памяці (tmpfs) з аўтаматычнай заменай вузлоў сіламі аператара;
    • валідацыя на баку apiserver праз CEL, без webhook і залежнасці ад сертыфікатаў;
    • аўтаматычны PodDisruptionBudget для галасуючых вузлоў;
    • падрэсурс /scale з запоўненым status.selector, каб наўпрост працавалі kubectl scale і VerticalPodAutoscaler.targetRef;
    • пракідванне параметраў планавання affinity і topologySpreadConstraints, а таксама аб'яднанне additionalMetadata ва ўсіх аб'ектах, якія стварае аператар;
    • інструмент міграцыі з ранейшага аператара без спынення кластара;
    • убудова kubectl-etcd для эксплуатацыйных задач.

    Крыніца: opennet.ru

  • Купіць надзейны хостынг для сайтаў з абаронай ад DDoS, VPS VDS серверы 🔥 Купіць надзейны хостынг для сайтаў з абаронай ад DDoS, VPS VDS серверы | ProHoster