Esta página descreve como desligar e ligar o dispositivo isolado do Google Distributed Cloud (GDC). Por exemplo, para mover o dispositivo para uma nova localização.
Pode usar o dispositivo isolado do ar do GDC em localizações operacionais temporárias, onde é necessário desligar o dispositivo para transporte de modo a movê-lo entre localizações. Também pode ter de restaurar o dispositivo a partir de uma falha de energia, uma vez que os geradores podem alimentá-lo em ambientes difíceis.
Antes de começar
Certifique-se de que para todas as cargas de trabalho antes de continuar. A Google não pode garantir o que acontece se as cargas de trabalho estiverem ativas durante um encerramento.
Pré-requisitos
- Pode executar este manual de procedimentos num portátil ou numa estação de trabalho ligados à rede do dispositivo isolado do Google Distributed Cloud (GDC). Em alternativa, pode ligar um portátil ou uma estação de trabalho ao comutador seguindo as instruções em Ligue o dispositivo.
- Certifique-se de que tem acesso ao kubeconfig do cluster de administrador principal.
- Defina a variável de ambiente KUBECONFIG correta executando export KUBECONFIG=PATH_TO_KUBECONFIG.
- Certifique-se de que tem a chave e o certificado SSH.
Desligar as lâminas
- Obtenha informações dos nós executando - kubectl get nodes -A -o wide.
- Pausa a sincronização de BareMetalHost executando o seguinte comando para todos os nós um a um.Substitua - NODE_NAMEpelos nomes dos nós obtidos no passo 1:- kubectl annotate bmhost -n gpc-system NODE_NAME "baremetalhost.metal3.io/paused=true" --overwrite- O resultado pode ter o seguinte aspeto: - baremetalhost.metal3.io/**-**-bm01 annotated baremetalhost.metal3.io/**-**-bm02 annotated baremetalhost.metal3.io/**-**-bm03 annotated
- Isolar todos os nós um a um: - kubectl cordon NODE_NAME- O resultado pode ter o seguinte aspeto: - node/**-**-bm01 cordoned node/**-**-bm02 cordoned node/**-**-bm03 cordoned
- Para determinar o nó principal do etcd e os nós seguidores, execute este passo um a um para todos os nós: - Encontre os IPs de destino para SSH anotando os valores na coluna - INTERNAL-IPda saída de- kubectl get nodes -A -o wide. Estabeleça uma ligação SSH:- ssh root@INTERNAL-IP
- Para determinar se o nó atual é o líder ou o seguidor do etcd, execute o seguinte comando no terminal 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 status- Preste atenção ao campo - IS LEADER.- O resultado pode ter o seguinte aspeto para o nó principal do 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 | | +----------------+------------------+--------------+---------+-----------+------------+-----------+------------+--------------------+--------+- A saída pode ter o seguinte aspeto para os dois nós seguidor do 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 | | +----------------+------------------+--------------+---------+-----------+------------+-----------+------------+--------------------+--------+- Anote o estado etcd-leader e etcd-follower dos nós. 
 
- Esvazie os dois nós seguidor do etcd. Não esvazie o nó principal do etcd. - kubectl drain NODE_NAME --delete-emptydir-data --grace-period 900 --ignore-daemonsets --disable-eviction- O resultado pode ter o seguinte aspeto: - 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 . . .
- Encerre corretamente os dois nós seguidor do etcd. Siga o passo seguinte um a um para ambos os nós. 
- Desative o - NODE_NAMEatravés do iLO:- Recupere o nome de utilizador do iLO: - kubectl get secret bmc-credentials-NODE_NAME -n gpc-system -o jsonpath="{.data.username}" | base64 --decode
- Recupere a palavra-passe do iLO: - kubectl get secret bmc-credentials-NODE_NAME -n gpc-system -o jsonpath="{.data.password}" | base64 --decode
- Obter a morada - BMC-IPde- NODE_NAMEa partir dos valores na coluna- BMC-IP:- kubectl get servers -A
- Aceda ao endereço - BMC-IPobtido no passo anterior e inicie sessão introduzindo o nome de utilizador e a palavra-passe obtidos.
- Passe o cursor do rato sobre o primeiro botão na linha superior. Deve apresentar - Power: ON. Clique nele. É apresentado um menu pendente. Clique no primeiro item com a etiqueta- Momentary Press. A cor do botão muda de verde para laranja, o que significa que o nó está a ser encerrado. Aguarde que o botão mude de cor para amarelo, o que indica que a máquina foi desligada. Esta operação demora alguns minutos.
 
- Depois de ambos os nós etcd-follower terem sido encerrados, repita finalmente o passo 7 para o nó líder do etcd. 
Remova as Yubikeys para transportes
Se precisar de transportar o sistema após a conclusão da instalação, remova os Yubikeys e transporte-os separadamente. Certifique-se de que etiqueta as chaves sozinho.
Ligue e estabeleça ligação
Se a energia foi perdida inesperadamente, como num encerramento forçado, o dispositivo é reiniciado automaticamente. Neste caso, deve começar no passo 7 e ignorar os passos 1 a 6. Após uma perda de energia inesperada, pode ocorrer uma perda de dados, mesmo depois de reiniciar.
Plano de ação
- Insira os YubiKeys em cada nó. 
- Ligue a máquina de dispositivo com isolamento de ar do GDC à fonte de alimentação e prima o botão ligar/desligar em cada nó por qualquer ordem. 
- Depois de os nós serem ligados, aguarde alguns minutos para que o plano de controlo se ligue. - kubectlpode estabelecer ligação ao plano de controlo em menos de 30 minutos.
- Obtenha os nomes dos nós executando - kubectl get nodes -A.
- Descordone cada nó para ativar o agendamento: - kubectl uncordon `NODE_NAME`
- Retome a sincronização dos anfitriões bare metal para cada nó: - kubectl annotate bmhost -n gpc-system NODE_NAME "baremetalhost.metal3.io/paused=false" --overwrite
- Verifique o estado dos nós através da app - kubectl get nodes -A.- Se todos os nós estiverem no estado - Ready, aguarde duas horas para que o processo de conciliação seja concluído. O resultado pode ter o seguinte aspeto:- 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.300- Neste caso, não é necessária nenhuma ação adicional. 
- Caso contrário, se um ou mais nós estiverem no estado "NotReady" (Não pronto), reinicie alguns serviços para preparar o cluster. O resultado pode ter o seguinte aspeto: - 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.300- Neste caso, anote o nome do nó que não está pronto e avance para os passos seguintes. 
 
- Estabeleça uma ligação SSH ao nó - NotReady. Os endereços IP de destino do SSH são valores na coluna- INTERNAL-IPda saída de- kubectl get nodes -A -o wide:- ssh root@INTERNAL-IP
- Reinicie os serviços - containerde- kubeletno nó- NotReady. Os seguintes comandos devem ser executados nos nós e não no portátil ou na estação de trabalho do cliente ligados ao dispositivo isolado do Google Distributed Cloud (GDC):- systemctl stop containerd systemctl daemon-reload systemctl restart containerd systemctl stop kubelet systemctl start kubelet
- Para verificar o estado dos serviços - containerde- kubelet, execute os seguintes comandos no nó- NotReady:- systemctl status kubelet systemctl status containerd- O resultado pode ter o seguinte aspeto: - # 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 os serviços - containerde- kubeletestiverem a funcionar corretamente após o reinício, aguarde duas horas para que a conciliação seja concluída.