Skip to content

Migracija — noter in ven

Odsotnost vezanosti je obljuba samo, če jo lahko dejansko uveljaviš. Ta stran dokumentira predajo (handover: premik clustra med gostovano kontrolno ravnino kubehz in tvojo lastno infrastrukturo) v obe smeri, natanko tako, kot deluje danes.

Kaj je danes v živo

Gostovano → lastno gostovanje (eject) je v živo. Svojo gostovano kontrolno ravnino lahko premakneš na lastno Hetzner infrastrukturo in pri tem ohraniš kriptografsko identiteto clustra: tvoji workerji, kubeconfigi in skrivnosti delujejo naprej.

Lastno gostovanje → gostovano (adopt) je v živo kot recreation. kubehz postavi svežo gostovano kontrolno ravnino, ti pa nanjo preseliš svoje delovne obremenitve. Cluster dobi novo identiteto. Adopt z ohranjeno identiteto je načrtovan; dokler ne izide, ta stran to pove naravnost, namesto da bi se pretvarjala drugače.

Koncepte za vsem tem (zakaj se seli prav identiteta in zakaj se nič ne izbriše brez tvoje privolitve) najdeš na strani Kako deluje predaja.

Obe smeri

SmerKaj se zgodiStatus
Eject: gostovano → tvoja infrastrukturaTvoja gostovana kontrolna ravnina se obnovi na strojih, ki jih imaš v lasti, z isto identiteto. Workerji ostanejo.V živo
Adopt: tvoj cluster → gostovanokubehz ustvari svežo gostovano kontrolno ravnino; delovne obremenitve preseliš nanjo. Nova identiteta.V živo (recreation)

Eject je za trenutek, ko želiš polno lastništvo: zahteve skladnosti, nadzor stroškov v velikem obsegu ali preprosto zato, ker lahko. Izhodna vrata so dokaz, da je gostovanje izbira in ne past.

Adopt je za trenutek, ko kontrolne ravnine nočeš več upravljati sam in na svojem računu obdržiš samo workerje.

Najprej pride ocena

Nič se ne premakne, dokler nisi videl načrta. Platforma nenehno zbira zgolj bralno oceno (assessment) tvojega clustra (različica Kubernetesa, podatkovna shramba, storage classi, load balancerji, upravljanje CAPI) in iz nje izpelje pot izvedljivosti ter poročilo o prevedbi, seznam stvari, ki se ne preselijo samodejno in zahtevajo tvojo pozornost:

  • Storage classi, vezani na ponudnika: volumni, ki jih je ustvaril CSI gonilnik enega ponudnika, kontrolni ravnini ne sledijo k drugemu.
  • Storitve tipa LoadBalancer: oblačni load balancerji so vezani na ponudnika, ki jih je ustvaril.
  • Clustri, upravljani s CAPI: cluster, katerega življenjski cikel vodi Cluster API, potrebuje zaustavljeno upravljanje, preden je predaja smiselna.

Kadar koli si jo lahko ogledaš prek CLI (bere register tvojega tenanta, zato potrebuje KUBEHZ_TOKEN):

bash
lo kubehz assess

Nadzorna plošča prikazuje isto oceno in izvedljivost na strani clustra. Pot izvedljivosti je ena od:

PotPomen
restoreSelitev prek posnetka + vsaditve identitete. Kar eject uporablja danes.
recreationSveža kontrolna ravnina; delovne obremenitve se preselijo s ponovno uveljavitvijo. Kar adopt uporablja danes.
graftPrenos v živo na mestu. Ta se oceni in izpiše, a še ni izvedljiv; je na načrtu.

Gostovano → lastno gostovanje (eject)

Eject premakne tvojo gostovano kontrolno ravnino na infrastrukturo v tvoji lasti in ohrani identiteto clustra: certifikatno agencijo (CA), ključe za podpisovanje service accountov, šifrirni ključ za skrivnosti in vsak objekt v clustru (prek posnetka etcd). Ker se identiteta ohrani:

  • Tvoji workerji delujejo naprej: CA clustra jim je že zaupanja vredna in po preklopu se znova povežejo z istim logičnim clustrom.
  • Obstoječi kubeconfigi in žetoni service accountov ostanejo veljavni.
  • Skrivnosti se dešifrirajo: šifrirni ključ potuje s clustrom.

Potek

  1. Ocena: lo kubehz assess (ali nadzorna plošča). Potrdi, da je pot restore, in preberi poročilo o prevedbi.

  2. Začni predajo: prek zavihka Predaja (Handover) clustra v nadzorni plošči (ali prek API-ja). Izbereš ciljni gonilnik (kubeadm ali kubeone) in ali se endpoint ohrani ali zamenja.

  3. Platforma izvozi: sestavi izvozni sveženj (PKI clustra, ključe service accountov in šifrirni ključ) ter naredi svež posnetek etcd.

  4. Prenesi sveženj: prenos zahteva ponovno prijavo, je enkraten in se revizijsko beleži. Sveženj je korenska identiteta tvojega clustra: ravnaj z njim kot s korensko poverilnico in lokalno kopijo izbriši, ko je predaja končana.

  5. Pripravi cilj: stroj (ali stroje) v tvoji lasti, dosegljiv tvojim workerjem. Konkretno:

    • Dosegljiv na 6443 z vsakega workerja: to je končna točka API, ki jo nastavi lok8s. Cilj za NAT brez vhodnega 6443 je običajni vzrok, da obnova navidez uspe, workerji pa nato obvisijo.
    • Dimenzioniraj nad rezervacijami, ne nanje. Na vozlišču kontrolne ravnine lok8s rezervira 400m CPU in 1 GiB pomnilnika za sistem in kubelet še pred kakršnimkoli workloadom, kubelet pa začne izseljevati pode, ko je na voljo manj kot 500 MiB. 2 GB so torej spodnja meja, ne delovna velikost. Naše referenčne konfiguracije uporabljajo cx33 za kontrolne ravnine. Glej vodnik KubeOne.
    • Eno ali tri vozlišča, nikoli dve: etcd potrebuje liho število za kvorum.
    • Vozlišče poganja največ 110 podov. Za toliko je nastavljen kubelet kontrolne ravnine.
    • lok8s nameščen na cilju, z ustreznimi pravicami. receive teče na tisti napravi, ne na vaši delovni postaji: piše v /etc/kubernetes in /var/lib/etcd ter kliče kubeadm.
    • Paket na cilju. Korak 4 ga prenese tja, kjer ste ga zagnali; prenesite ga po zaupanja vrednem kanalu in izbrišite obe kopiji, ko korak 7 potrdi. Med prenosom je to korenska identiteta vaše gruče.
    • Čisto vozlišče. receive zavrne napravo, ki že nosi stanje Kubernetesa; na že uporabljenem vozlišču najprej sami zaženite kubeadm reset.
  6. Obnova na cilju:

    bash
    # gonilnik kubeadm: zaženi na samem ciljnem nodu
    lo kubehz handover receive --bundle ./bundle.tar.gz
    
    # gonilnik kubeone: najprej vsadi identiteto, nato vzpostavi kot običajno
    lo kubehz handover preseed --bundle ./bundle.tar.gz --node "<node-ip>"
    lo provision

    receive sprejme --snapshot <datoteka> za obnovitev posnetka etcd, ki si ga prenesel ločeno, --single-node za enovozliščno kontrolno ravnino in --force za prepis vozlišča, ki že nosi stanje Kubernetesa (namesto zgornjega kubeadm reset). preseed vozlišče doseže prek SSH: kako, določajo --user (privzeto root), --port (privzeto 22) in --ssh-key.

    receive vsadi izvoženo identiteto, obnovi posnetek etcd in zažene kontrolno ravnino, ki je tvoj cluster: ista CA, isti ključi, isti objekti.

  7. Preklop (cutover): endpoint DNS clustra usmeri na novo kontrolno ravnino. Workerji se znova povežejo sami; na njih se nič ne spremeni. Nato potrdi preklop: platforma čaka na tvojo izrecno potrditev in pred njo ne naredi ničesar destruktivnega.

  8. Razgradnja (decommission): stara gostovana kontrolna ravnina se odstrani šele, ko veljata dve stvari. Platforma je videla tvojo novo kontrolno ravnino živo (heartbeat), in razgradnjo si izrecno potrdil. Do takrat stara kontrolna ravnina ostane nedotaknjena kot tvoja rezerva.

Kaj narediš ob preklopu

Edino dejanje, ki je samo tvoje: endpoint DNS clustra usmeriš na novo kontrolno ravnino. Vse pred tem je povratno; platforma tvojega DNS-a nikoli ne preklopi namesto tebe. Če kar koli izgleda narobe, ne potrdi: zaustavljena predaja ohrani celotno stanje na obeh straneh.

Lastno gostovanje → gostovano (adopt)

Adopt preda upravljanje kontrolne ravnine kubehzu: na svojem Hetzner računu obdržiš samo workerje. Danes adopt deluje kot recreation, in to povemo naravnost:

  • kubehz ustvari svežo gostovano kontrolno ravnino z novo identiteto (nova CA, novi ključi). Na platformi je to nov cluster.
  • Delovne obremenitve preseliš s ponovno uveljavitvijo (iz svojega GitOps repozitorija ali manifestov) na nov cluster. To je trenutek, ko se deklarativna postavitev obrestuje.
  • Trajni podatki se ne preselijo samodejno. Obnovi jih iz lastnih varnostnih kopij ali jih znova vzpostavi. Samodejnega prenosnika podatkov še ni, zato se ne pretvarjamo, da obstaja.
  • Nodi se pridružijo na novo: workerji se zaženejo proti novi kontrolni ravnini prek naborov workerjev; stari kubeconfigi in žetoni ne veljajo naprej.

Ocena in poročilo o prevedbi se izvedeta najprej, natanko tako kot pri ejectu, o storageu, vezanem na ponudnika, load balancerjih in upravljanju CAPI torej veš, preden se kar koli ustvari.

Zakaj recreation? Upravljani sklad kontrolne ravnine skuje identiteto clustra ob ustvarjanju. Zanesljiva vsaditev tvoje obstoječe identitete zahteva korak »ustvari zaustavljeno, nato vsadi«, ki je zasnovan in načrtovan. Ko izide, bo adopt ohranjal identiteto tako, kot jo eject že danes. Do takrat adopt pomeni: sveža kontrolna ravnina, delovne obremenitve ponovno uveljavljene.

Brez vezanosti: z migracijo ali brez nje

Predaja je močna oblika obljube, a vezan nisi bil nikoli:

  • lok8s je odprtokoden in vzpostavi tvoj cluster na tvojem Hetzner računu.
  • Integracija z nadzorno ploščo je opcijska in samo odhodna; kubehz nima nobenih dohodnih poverilnic do tvojega clustra.
  • Odstranitev kubehz z lastno gostovanega clustra sta dva ukaza: lo kubehz deregister ga odjavi (potrebuje KUBEHZ_TOKEN), izbris namespacea kubehz-system pa odstrani znotrajclustrskega agenta. RBAC agenta na ravni clustra (njegova ClusterRole in ClusterRoleBinding ter Role v kube-system) namespace preživi; če želiš čist cluster, izbriši tudi te objekte. Tvoj cluster deluje naprej natanko tako kot prej.

Naslednji koraki


Status dokumenta

VidikPodrobnost
Stanjeeject v živo (na osnovi obnove); adopt v živo kot recreation; adopt z ohranjeno identiteto načrtovan
Zadnji pregled2026-09-05