Toolkit etcd-operator, anu ngabantosan nyebarkeun sareng ngajaga klaster etcd di Kubernetes, parantos dialihkeun ka proyék Cozystack. Bareng jeung transfer éta, implementasi anyar etcd-operator parantos diterbitkeun, ditulis ti mimiti sareng nganggo API di etcd-operator.cozystack.io/v1alpha2 tinimbang etcd.aenix.io/v1alpha1 sateuacanna. Implementasi anyar ieu ditulis ku Timofey Larkin, salah sahiji pangurus basis kode sateuacanna. Versi lami disimpen dina cabang v1alpha1. Kode ieu ditulis dina Go sareng disebarkeun dina lisénsi Apache 2.0. Cozystack mangrupikeun proyék sandbox ti organisasi nirlaba CNCF.
Parobihan utama dina operator etcd anu énggal nyaéta ngaleungitkeun StatefulSet pikeun manajemen node. Ayeuna, operator langsung ngaksés API Kaanggotaan asli etcd (MemberAdd, MemberPromote, sareng MemberRemove) sareng sacara otomatis nambihan anggota, ngamajukeun pelajar ka node pamilih, sareng ngahapus node tina quorum, masihan operator kadali lengkep kana kaanggotaan klaster.
Sacara paralel, para pamekar proyék etcd ngembangkeun operator etcd resmi sorangan ti mimiti. Dina hal fungsionalitas, operator resmi ayeuna langkung handap tibatan operator etcd proyék Cozystack. Kusabab implementasi etcd-operator sateuacanna parantos tiasa dianggo dina lingkungan produksi sareng dianggo dina Cozystack sareng Kamaji, pamekaranana diteruskeun sacara misah ti implementasi proyék etcd resmi.
Operator proyék Cozystack ngatur klaster etcd ngaliwatan dua sumber daya. EtcdCluster ngajelaskeun kaayaan anu dipikahoyong: jumlah réplika, vérsi etcd, parameter panyimpenan, TLS, auténtikasi, sareng setélan etcd. Hiji etcdMember didamel pikeun unggal node klaster sareng gaduh Pod sareng PVC na. Teu sapertos solusi has, operator henteu nganggo StatefulSet sareng sacara mandiri ngatur Pod sareng PVC unggal node. Kaanggotaan klaster dirobih ngalangkungan API Kaanggotaan etcd: operator nambihan node anyar salaku pelajar (MemberAdd), teras promosikeun aranjeunna janten anggota pamilih (MemberPromote). Panghapusan dilakukeun ngalangkungan MemberRemove, kalayan panyabutan anu leres tina kuorum. Nalika klaster dipareuman, node tetep ngajaga idéntitasna.
fitur konci:
- Panyebaran sareng penskalaan klaster dina dua arah, hiji simpul dina hiji waktos: simpul énggal dimimitian dina modeu diajar, sareng ngahapusna kalayan leres bakal ngaleungitkeunana tina kuorum;
- ngeureunkeun klaster tanpa kaleungitan data (spec.replicas: 0) sareng ngahanca deui operasi nganggo ID klaster sareng node anu sami;
- Data disimpen dina PVC sacara standar atanapi dina tmpfs upami data tiasa dibalikeun deui; upami Pod leungit, operator sacara otomatis ngadamel deui node nganggo panyimpenan dina mémori;
- Konfigurasi TLS anu misah pikeun sambungan klien sareng antar-node: anjeun tiasa nyambungkeun Rahasia anjeun nyalira atanapi nitah operator pikeun ngaluarkeun sareng ngapdet sertipikat ngalangkungan manajer sertifikasi;
- auténtikasi nganggo hiji pangguna root; kredensialna disetel via Secret;
- nyieun snapshot dina S3 atawa PVC via sumber daya EtcdSnapshot sarta mulangkeun klaster tina snapshot nalika palaksanaan munggaran;
- PodDisruptionBudget otomatis, anu nyegah operasi solokan ngaganggu kuorum;
- validasi spésifikasi ku cara apiserver via éksprési CEL dina CRD, tanpa webhook sareng gumantung kana cert-manager;
- /scale subresource pikeun kubectl scale sareng VerticalPodAutoscaler, port metrics 2381, afinitas sareng topologySpreadConstraints forwarding;
- plugin kubectl-etcd pikeun operasi dinten ka-2 saatos palaksanaan klaster.
Dibandingkeun sareng implementasi anu lami (v1alpha1), ieu di handap parantos robih:
- Grup API parantos robih tina etcd.aenix.io ka etcd-operator.cozystack.io;
- Gantina StatefulSet, operator nganggo sumber daya EtcdMember anu misah pikeun unggal node;
- Kamus spec.options anu arbitrer parantos diganti ku sakumpulan parameter anu diketik: quota-backend-bytes, modeu sareng interval autocompactification, snapshot-count; peta gratis ngamungkinkeun flag anu disalurkeun anu bertentangan sareng logika operator;
- Sumber daya EtcdBackup parantos diganti nami janten EtcdSnapshot, semantikna dijaga;
- Validasi parantos dipindahkeun tina aturan webhook ka aturan CEL dina CRD;
- Layanan klaster parantos dialihkeun ka modeu headless supados node gaduh nami DNS anu stabil.
Migrasi dilaksanakeun di tempat nganggo etcd-migrate. Alat ieu nyaluyukeun klaster operator lami anu nuju dijalankeun tanpa migrasi data, ngamimitian deui pod, atanapi kaleungitan kuorum. Éta ngan ukur ngarobih pamilik objék, labél, sareng anotasi. Saatos éta, operator énggal anu ngambil alih kendali. Klien anu ngaksés klaster ngalangkungan DNS teras-terasan fungsina tanpa parobihan.
Implementasi etcd-operator Cozystack ngabahas kaseueuran item roadmap pikeun operator etcd resmi proyék etcd. Status item roadmap nyaéta sapertos kieu:
Salian ti éta, v1alpha2 nawiskeun fitur anu henteu kalebet dina rencana pamekaran operator resmi:
- ngeureunkeun klaster dugi ka teu aya réplika, ngeureunkeun heula teras nuluykeun deui bari ngajaga idéntitas klaster sareng simpulna;
- panyimpenan dina mémori (tmpfs) kalayan panggantian node otomatis ku operator;
- validasi dina sisi apiserver via CEL, tanpa webhook sareng gumantung kana sertipikat;
- PodDisruptionBudget otomatis pikeun node pamilih;
- /scale subresource kalawan status.selector dieusi supados kubectl scale sareng VerticalPodAutoscaler.targetRef tiasa dianggo sacara langsung;
- ngirimkeun parameter perencanaan afinitas sareng topologySpreadConstraints, ogé ngahijikeun additionalMetadata di sakumna objék anu didamel ku operator;
- alat pikeun migrasi ti operator saméméhna tanpa ngeureunkeun klaster;
- plugin kubectl-etcd pikeun tugas operasional.
sumber: opennet.ru
