Questa pagina descrive come spegnere e accendere l'appliance con air gap Google Distributed Cloud (GDC). Ad esempio, per spostare il dispositivo in una nuova posizione.
Potresti utilizzare l'appliance GDC air-gapped in posizioni operative temporanee, dove è necessario spegnere il dispositivo per il trasporto per spostarlo tra le posizioni. Potresti anche dover ripristinare il dispositivo in seguito a un'interruzione dell'alimentazione, poiché i generatori potrebbero alimentarlo in ambienti difficili.
Prima di iniziare
Assicurati di arrestare tutti i carichi di lavoro prima di procedere. Google non può garantire cosa succederà se i carichi di lavoro sono attivi durante un arresto.
Prerequisiti
- Puoi eseguire questo runbook su un laptop o una workstation connessi alla rete dell'appliance air-gapped di Google Distributed Cloud (GDC). In alternativa, puoi connettere un laptop o una workstation allo switch seguendo la procedura descritta in Connettere il dispositivo.
- Assicurati di avere accesso al file kubeconfig per il cluster root-admin.
- Imposta la variabile di ambiente KUBECONFIG corretta eseguendo
export KUBECONFIG=PATH_TO_KUBECONFIG. - Assicurati di avere la chiave e il certificato SSH.
Arrestare le lame
Ottieni informazioni sui nodi eseguendo
kubectl get nodes -A -o wide.Metti in pausa la sincronizzazione di BareMetalHost eseguendo il seguente comando per tutti i nodi uno alla volta.Sostituisci
NODE_NAMEcon i nomi dei nodi ottenuti nel passaggio 1:kubectl annotate bmhost -n gpc-system NODE_NAME "baremetalhost.metal3.io/paused=true" --overwriteL'output potrebbe essere simile a questo esempio:
baremetalhost.metal3.io/**-**-bm01 annotated baremetalhost.metal3.io/**-**-bm02 annotated baremetalhost.metal3.io/**-**-bm03 annotatedIsola tutti i nodi uno alla volta:
kubectl cordon NODE_NAMEL'output potrebbe essere simile a questo esempio:
node/**-**-bm01 cordoned node/**-**-bm02 cordoned node/**-**-bm03 cordonedArresta i nodi ONTAP Select (OTS)
Accedi al cluster OTS
Esegui questo comando per identificare l'indirizzo IP di gestione OTS elencato nella colonna MGMTIP (Management IP):
export KUBECONFIG=/root/release/root-admin/kube-admin-remote-kubeconfig kubectl get storagecluster -n gpc-systemEsegui i seguenti comandi per recuperare la password dell'amministratore OTS:
export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig # Find the secret name SECRET_NAME=$(kubectl get secrets -n gpc-system -o name | grep 'ontap-.*-stge01-credential') # Decode the password from that secret OTS_PASSWORD=$(kubectl get $SECRET_NAME -n gpc-system -o jsonpath='{.data.netapp_password}' | base64 --decode) echo $OTS_PASSWORDStabilisci una connessione SSH al cluster OTS utilizzando l'IP di gestione e la password amministratore:
ssh admin@<ots-management-ip>Arresta i nodi OTS (VM). Di seguito è riportato un esempio:
bn-aa-stge01::> cluster show Node Health Eligibility --------------------- ------- ------------ bn-aa-stge01-01 true true bn-aa-stge01-02 true true bn-aa-stge01::> set diag Warning: These diagnostic commands are for use by NetApp personnel only. Do you want to continue? {y|n}: y bn-aa-stge01::> system node halt -node *Per determinare il nodo leader etcd e i nodi follower, esegui questo passaggio uno alla volta per tutti i nodi:
Trova gli IP di destinazione per SSH annotando i valori nella colonna
INTERNAL-IPdell'output dikubectl get nodes -A -o wide. Stabilisci una connessione SSH:ssh root@INTERNAL-IPPer determinare se il nodo corrente è il leader o il follower di etcd, esegui il seguente comando nel terminale SSH:
ETCDCTL_API=3 etcdctl \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key \ --write-out=table endpoint statusPresta attenzione al campo
IS LEADER.L'output potrebbe essere simile a questo esempio per il nodo leader etcd:
[root@**-**-bm0* ~]# ETCDCTL_API=3 etcdctl \ > --cacert /etc/kubernetes/pki/etcd/ca.crt \ > --cert /etc/kubernetes/pki/etcd/server.crt \ > --key /etc/kubernetes/pki/etcd/server.key \ > --write-out=table endpoint status +----------------+------------------+--------------+---------+-----------+------------+-----------+------------+--------------------+--------+ | ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS | +----------------+------------------+--------------+---------+-----------+------------+-----------+------------+--------------------+--------+ | ************** | **************** | 3.4.30-gke.1 | 162 MB | true | false | 3641 | 12957958 | 12957958 | | +----------------+------------------+--------------+---------+-----------+------------+-----------+------------+--------------------+--------+L'output potrebbe essere simile a questo esempio per i due nodi follower etcd:
[root@**-**-bm0* ~]# ETCDCTL_API=3 etcdctl \ > --cacert /etc/kubernetes/pki/etcd/ca.crt \ > --cert /etc/kubernetes/pki/etcd/server.crt \ > --key /etc/kubernetes/pki/etcd/server.key \ > --write-out=table endpoint status +----------------+------------------+--------------+---------+-----------+------------+-----------+------------+--------------------+--------+ | ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS | +----------------+------------------+--------------+---------+-----------+------------+-----------+------------+--------------------+--------+ | ************** | **************** | 3.4.30-gke.1 | 163 MB | false | false | 3641 | 12957404 | 12957404 | | +----------------+------------------+--------------+---------+-----------+------------+-----------+------------+--------------------+--------+Prendi nota dello stato di etcd-leader e etcd-follower dei nodi.
Svuota i due nodi follower etcd. Non svuota il nodo leader etcd.
kubectl drain NODE_NAME --delete-emptydir-data --grace-period 900 --ignore-daemonsets --disable-evictionL'output potrebbe essere simile al seguente:
node/**-**-bm01 already cordoned WARNING: ignoring DaemonSet-managed Pods: kube-system/anetd-krj2z, kube-system/etcd-defrag-xh469, kube-system/ipam-controller-manager-2f4dz, kube-system/istio-cni-node-cgqv4, kube-system/kube-proxy-5mwf2, kube-system/localpv-mn2jh, kube-system/metallb-speaker-6l7sv, mon-system/mon-node-exporter-backend-nd8mp, netapp-trident/netapp-trident-node-linux-rrlmd, obs-system/anthos-audit-logs-forwarder-tpfqv, obs-system/anthos-log-forwarder-npjh4, obs-system/kube-control-plane-metrics-proxy-wp8nh, obs-system/log-failure-detector-crbnv, obs-system/oplogs-forwarder-sqwvj, vm-system/macvtap-v9pgp, vm-system/virt-handler-86khx pod/grafana-0 deleted pod/capi-kubeadm-bootstrap-controller-manager-1.30.400-gke.136lvgtf deleted pod/grafana-0 deleted pod/grafana-proxy-server-86d8fc4758-mkc4f deleted . . . node/**-**-bm02 already cordoned WARNING: ignoring DaemonSet-managed Pods: kube-system/anetd-v75jz, kube-system/etcd-defrag-t5jnc, kube-system/ipam-controller-manager-5958m, kube-system/istio-cni-node-ggv4c, kube-system/kube-proxy-r6x46, kube-system/localpv-g56xc, kube-system/metallb-speaker-tmw72, mon-system/mon-node-exporter-backend-9rs7k, netapp-trident/netapp-trident-node-linux-9jmfp, obs-system/anthos-audit-logs-forwarder-bwns9, obs-system/anthos-log-forwarder-lbskj, obs-system/kube-control-plane-metrics-proxy-grthl, obs-system/log-failure-detector-dzh4v, obs-system/oplogs-forwarder-vdn7z, vm-system/macvtap-mjwtc, vm-system/virt-handler-dlqvv pod/vai-web-plugin-backend-5dfd6d6597-nxxgn pod/vai-web-plugin-frontend-6b5468968b-mrr7g pod/grafana-proxy-server-64b759fbf6-b8pl8 pod/iam-bundledidp-backend-0 . . .Arresta normalmente i due nodi follower etcd. Segui il passaggio successivo uno alla volta per entrambi i nodi.
Disattiva
NODE_NAMEutilizzando iLO:Recupera il nome utente per iLO:
kubectl get secret bmc-credentials-NODE_NAME -n gpc-system -o jsonpath="{.data.username}" | base64 --decodeRecupera la password per iLO:
kubectl get secret bmc-credentials-NODE_NAME -n gpc-system -o jsonpath="{.data.password}" | base64 --decodeRecupera l'indirizzo
BMC-IPperNODE_NAMEdai valori nella colonnaBMC-IP:kubectl get servers -AVisita l'indirizzo
BMC-IPottenuto nel passaggio precedente e accedi inserendo il nome utente e la password ottenuti.Passa il mouse sopra il primo pulsante nella riga superiore. Dovrebbe visualizzare
Power: ON. Fai clic. Viene visualizzato un menu a discesa. Fai clic sul primo elemento etichettatoMomentary Press. Il colore del pulsante cambierà da verde ad arancione, il che significa che il nodo si sta spegnendo. Attendi che il colore del pulsante diventi giallo, a indicare che la macchina è spenta. Ci vorranno alcuni minuti.
Dopo aver arrestato entrambi i nodi etcd-follower, ripeti il passaggio 7 per il nodo leader etcd.
Rimuovere le YubiKey per il trasporto
Se devi trasportare il sistema dopo il completamento dell'installazione, rimuovi le YubiKey e trasportale separatamente. Assicurati di taggare le chiavi personalmente.
Accensione e connessione
Se l'alimentazione è stata interrotta in modo imprevisto, ad esempio un arresto forzato, il dispositivo si riavvia automaticamente. In questo caso, devi iniziare dal passaggio 7, saltando i passaggi da 1 a 6. Dopo un'interruzione di corrente imprevista, potresti riscontrare una perdita di dati, anche dopo il riavvio.
Piano d'azione
Inserisci le YubiKey in ogni nodo.
Collega la macchina appliance GDC air-gapped all'alimentazione e premi il tasto di accensione sul nodo
**-**-bm03per avviare il server mediatore OTS. Una volta che il nodo è disponibile, verifica che il server intermediario OTS sia attivo controllando lo stato dei servizi intermediario e sottosistema di destinazione SCSI (SCST). Entrambi i servizi devono mostrareActive: active (running):systemctl status ontap_mediator mediator-scstPoi premi il tasto di accensione sui due nodi rimanenti in qualsiasi ordine.
Dopo l'accensione dei nodi, attendi qualche minuto per la connessione del control plane.
kubectlpuò connettersi al control plane in meno di 30 minuti.Recupera i nomi dei nodi eseguendo
kubectl get nodes -A.Rimuovi il cordone da ogni nodo per abilitare la pianificazione:
kubectl uncordon `NODE_NAME`Riprendi la sincronizzazione degli host bare metal per ogni nodo:
kubectl annotate bmhost -n gpc-system NODE_NAME "baremetalhost.metal3.io/paused=false" --overwriteControlla lo stato dei nodi utilizzando
kubectl get nodes -A.Se tutti i nodi sono nello stato
Ready, attendi due ore per il completamento del processo di riconciliazione. L'output potrebbe essere simile al seguente:NAME STATUS ROLES AGE VERSION **-**-bm01 Ready control-plane 4d13h v1.30.6-gke.300 **-**-bm02 Ready control-plane 4d13h v1.30.6-gke.300 **-**-bm03 Ready control-plane 4d13h v1.30.6-gke.300In questo caso non sono necessarie ulteriori azioni.
In caso contrario, se uno o più nodi sono nello stato "NotReady", riavvia alcuni servizi per preparare il cluster. L'output potrebbe essere simile al seguente:
NAME STATUS ROLES AGE VERSION **-**-bm01 Ready control-plane 4d13h v1.30.6-gke.300 **-**-bm02 Ready control-plane 4d13h v1.30.6-gke.300 **-**-bm03 NotReady control-plane 4d13h v1.30.6-gke.300In questo caso, annota il nome del nodo non pronto e procedi con i passaggi successivi.
Stabilisci una connessione SSH al nodo
NotReady. Gli indirizzi IP di destinazione di SSH sono i valori nella colonnaINTERNAL-IPdell'output dikubectl get nodes -A -o wide:ssh root@INTERNAL-IPRiavvia i servizi
containerdekubeletsul nodoNotReady. I seguenti comandi devono essere eseguiti sui nodi, non sul laptop o sulla workstation del cliente connessi all'appliance isolata di Google Distributed Cloud (GDC):systemctl stop containerd systemctl daemon-reload systemctl restart containerd systemctl stop kubelet systemctl start kubeletPer verificare lo stato dei servizi
containerdekubelet, esegui i seguenti comandi sul nodoNotReady:systemctl status kubelet systemctl status containerdL'output potrebbe essere simile al seguente:
# systemctl status kubelet ● kubelet.service - kubelet: The Kubernetes Node Agent Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled) Drop-In: /etc/systemd/system/kubelet.service.d └─00-standalone_containerd.conf, 10-kubeadm.conf Active: active (running) since Thu 2025-03-27 07:58:27 UTC; 34s ago . . . # systemctl status containerd ● containerd.service - containerd container runtime Loaded: loaded (/etc/systemd/system/containerd.service; disabled; vendor preset: disabled) Active: active (running) since Thu 2025-03-27 07:58:17 UTC; 52s ago . . .Se i servizi
containerdekubeletfunzionano correttamente dopo il riavvio, attendi due ore per il completamento della riconciliazione.