Questo documento mostra come eseguire la migrazione di un cluster utente della versione 1.29 che utilizza kubeception a Controlplane V2. Se i tuoi cluster sono alla versione 1.30 o successiva, ti consigliamo di seguire le istruzioni riportate in Pianificare la migrazione dei cluster alle funzionalità consigliate.
1.29: anteprima
1.28: non disponibile
Informazioni sui piani di controllo dei cluster utente
Prima della versione 1.13 di Google Distributed Cloud, il control plane per un cluster utente veniva eseguito su uno o più nodi in un cluster di amministrazione. Questo tipo di piano di controllo è chiamato kubeception. Nella versione 1.13 è stato introdotto il Control Plane V2 per i nuovi cluster di utenti. Quando il control plane v2 è abilitato, il control plane per il cluster utente viene eseguito nel cluster utente stesso.
I vantaggi di Controlplane V2 includono:
Isolamento dei guasti. Un errore del cluster di amministrazione non influisce sui cluster utente.
Separazione operativa. L'upgrade di un cluster di amministrazione non causa tempi di riposo per i cluster utente.
Separazione del deployment. Puoi posizionare i cluster di amministrazione e utente in diversi domini di errore o siti geografici. Ad esempio, un cluster di utenti in una località edge può trovarsi in una località geografica diversa da quella del cluster di amministrazione.
Requisiti
Per eseguire la migrazione di un cluster utente a Controlplane v2, il cluster utente deve soddisfare i seguenti requisiti:
Il cluster utente deve essere della versione 1.29 o successive. Il cluster di amministrazione e i pool di nodi possono essere una o due versioni secondarie precedenti rispetto al cluster utente. Se necessario, esegui l'upgrade del cluster.
Nel cluster utente deve essere abilitato Dataplane V2. Questo campo è immutabile, quindi se Dataplane V2 non è abilitato nel cluster, non puoi eseguirne la migrazione a Controlplane V2.
Il cluster di utenti deve essere configurato per utilizzare MetalLB o un bilanciatore del carico manuale. Se il cluster utente utilizza il bilanciatore del carico SeeSaw, puoi eseguirne la migrazione a MetalLB.
Esamina il documento di pianificazione degli indirizzi IP, e assicurati di avere a disposizione indirizzi IP sufficienti per i nodi del control plane del cluster utente. I nodi del control plane richiedono indirizzi IP statici e ti servirà un indirizzo IP aggiuntivo per un nuovo IP virtuale (VIP) del control plane.
Prepararsi per la migrazione
Se la crittografia dei secret sempre attiva è stata attivata nel cluster di utenti, devi seguire la procedura descritta in Disattivare la crittografia dei secret sempre attiva e decriptare i secret prima di iniziare la migrazione. In caso contrario, il nuovo cluster Controlplane V2 non è in grado di decriptare i secret.
Prima di avviare la migrazione, esegui il seguente comando per verificare se la crittografia dei secret sempre attiva è stata attivata in un determinato momento:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ get onpremusercluster USER_CLUSTER_NAME \ -n USER_CLUSTER_NAME-gke-onprem-mgmt \ -o jsonpath={.spec.secretsEncryption}
Se l'output del comando precedente è vuoto, significa che la crittografia dei secret sempre attiva non è mai stata attivata. Puoi avviare la migrazione.
Se l'output del comando precedente non è vuoto, significa che la crittografia dei secret sempre attiva è stata abilitata in precedenza. Prima della migrazione, devi svolgere i passaggi descritti nella sezione successiva per assicurarti che il nuovo cluster Controlplane V2 possa decriptare i secret.
L'esempio seguente mostra un output non vuoto:
{"generatedKeyVersions":{"keyVersions":[1]}}
Disattiva la crittografia dei secret sempre attiva e decripta i secret, se necessario
Per disattivare la crittografia dei secret sempre attiva e decriptare i secret, svolgi i seguenti passaggi:
Nel file di configurazione del cluster utente, per disattivare la crittografia dei secret sempre attivi, aggiungi un campo
disabled: true
alla sezionesecretsEncryption
:secretsEncryption: mode: GeneratedKey generatedKey: keyVersion: KEY_VERSION disabled: true
Aggiorna il cluster:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
Sostituisci quanto segue:
ADMIN_CLUSTER_KUBECONFIG
: il percorso del file kubeconfig del cluster di amministrazioneUSER_CLUSTER_CONFIG
: il percorso del file di configurazione del cluster utente
Esegui un aggiornamento in sequenza su un DaemonSet specifico come segue:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ rollout restart statefulsets kube-apiserver \ -n USER_CLUSTER_NAME
Recupera i manifest di tutti i secret nel cluster utente in formato YAML:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ get secrets -A -o yaml > SECRETS_MANIFEST.yaml
Affinché tutti i secret vengano archiviati in etcd in testo non cifrato, riapplica tutti i secret nel cluster utente:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ apply -f SECRETS_MANIFEST.yaml
Ora puoi iniziare la migrazione a Controlplane V2. Al termine della migrazione, puoi riattivare la crittografia dei secret sempre attiva sul cluster.
Aggiorna il file di configurazione del cluster utente
Apporta le seguenti modifiche al file di configurazione del cluster utente esistente:
Imposta
enableControlplaneV2
su true.Se vuoi, rendi il control plane per il cluster utente Controlplane V2 di alta disponibilità (HA). Per passare da un cluster non HA a un cluster HA, modifica
masterNode.replicas
da 1 a 3.Aggiungi l'indirizzo IP statico o gli indirizzi IP statici per i nodi del control plane del cluster utente alla sezione
network.controlPlaneIPBlock.ips
.Inserisci la netmask e il gateway nella
network.controlPlaneIPBlock
sezione.Se la sezione
network.hostConfig
è vuota, compilala.Se il cluster di utenti utilizza il bilanciamento del carico manuale, configura il bilanciatore del carico come descritto nella sezione successiva.
Se il cluster utente utilizza il bilanciamento del carico manuale, imposta
loadBalancer.manualLB.controlPlaneNodePort
eloadBalancer.manualLB.konnectivityServerNodePort
su 0 perché non sono necessari quando è abilitato Controlplane V2.Aggiorna il
loadBalancer.vips.controlPlaneVIP
campo con il nuovo indirizzo IP per il VIP del piano di controllo. Tieni presente che deve essere nella stessa VLAN degli IP dei nodi del piano di controllo.Tutti i campi precedenti sono immutabili, tranne quando viene aggiornato il cluster per la migrazione. Assicurati di ricontrollare tutte le impostazioni.
Esegui
gkectl diagnose cluster
e correggi gli eventuali problemi rilevati dal comando.gkectl diagnose cluster --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME
Sostituisci quanto segue:
ADMIN_CLUSTER_KUBECONFIG
: il percorso del file kubeconfig del cluster di amministrazione.USER_CLUSTER_NAME
: il nome del cluster di utenti.
Modificare la configurazione del bilanciatore del carico manuale
Se il cluster di utenti utilizza il bilanciamento del carico manuale, svolgi il passaggio descritto in questa sezione. In caso contrario, salta questa sezione.
Analogamente alla configurazione del bilanciatore del carico per un cluster utente CPv2, per ciascuno dei tre nuovi indirizzi IP dei nodi del piano di controllo specificati nella sezione network.controlPlaneIPBlock, configura le mappature nel bilanciatore del carico:
- (ingressVIP:80) -> (NEW_NODE_IP_ADDRESS:ingressHTTPNodePort)
- (ingressVIP:443) -> (NEW_NODE_IP_ADDRESS:ingressHTTPNodePort)
Aggiorna il cluster
Esegui il seguente comando per eseguire la migrazione del cluster a Controlplane 2:
gkectl update cluster \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
Sostituisci quanto segue:
ADMIN_CLUSTER_KUBECONFIG
: il percorso del file kubeconfig del cluster di amministrazione.USER_CLUSTER_CONFIG
: il percorso del file di configurazione del cluster utente.
Il comando esegue le seguenti operazioni:
Crea il piano di controllo di un nuovo cluster con ControlPlane V2 abilitato.
Interrompi il piano di controllo Kubernetes del cluster kubeception.
Acquisisci uno snapshot di etcd del cluster kubeception.
Spegni i nodi del control plane del cluster utente del cluster kubeception. Tieni presente che, per il recupero in caso di errore, ovvero il fallback al cluster kubeception, i nodi non vengono eliminati fino al completamento della migrazione.
Ripristina i dati del cluster nel nuovo piano di controllo con lo snapshot etcd sopra indicato.
Collega i nodi del pool di nodi del cluster kubeception al nuovo piano di controllo, che è accessibile con il nuovo
controlPlaneVIP
.Riconcilia il cluster utente ripristinato in modo che soddisfi lo stato finale del cluster con ControlPlane V2 abilitato.
Note
Durante la migrazione, non sono previsti tempi di inattività per i workload dei cluster utente.
Durante la migrazione, il piano di controllo del cluster utente è inattivo per un breve periodo di tempo. Nello specifico, il piano di controllo non è disponibile tra il passaggio 2 e il completamento del passaggio 6. Il tempo di riposo è inferiore a 7 minuti in base ai nostri test, ma la durata effettiva dipende dalla tua infrastruttura.
Al termine della migrazione, i nodi del piano di controllo del cluster utente dei cluster kubeception vengono eliminati. Se per il cluster di amministrazione è impostato network.ipMode.type su "static", puoi riciclare alcuni degli IP statici inutilizzati rimuovendoli dal file di configurazione del cluster di amministrazione ed eseguendo
gkectl update admin
. Puoi elencare gli oggetti del nodo del cluster di amministrazione conkubectl get nodes -o wide
per vedere quali IP sono in uso.
Dopo la migrazione
Se hai disattivato la crittografia dei secret sempre attiva prima della migrazione, segui i seguenti passaggi per riattivare la funzionalità:
Nel file di configurazione del cluster utente, imposta
secretsEncryption.generatedKey.disabled
su false. Ad esempio:secretsEncryption: mode: GeneratedKey generatedKey: keyVersion: KEY_VERSION disabled: false
Aggiorna il cluster utente:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG