Stay organized with collections
Save and categorize content based on your preferences.
This page describes how to shut down and reboot any one blade of Google Distributed Cloud (GDC) air-gapped appliance,
for example to move the device to maintain a blade.
Before you begin
Ensure you stop all workloads before proceeding further. Google cannot guarantee what will happen if workloads are active during a
shutdown.
If you want to shut down all the blades, follow Shut down the device. When following these instructions, shut down only one blade and keep Google Distributed Cloud (GDC) air-gapped appliance running with two active blades.
Prerequisites
You can execute this runbook on a laptop or workstation connected to Google Distributed Cloud (GDC) air-gapped appliance's network. Alternatively, you can connect a laptop or workstation to switch by following Connect the device.
Make sure you have the access to Kubeconfig for the root-admin cluster.
Set correct KUBECONFIG environment variable by running export KUBECONFIG=<path to kubeconfig>.
Shut down the blade
Get the node information by running kubectl get nodes -A. Determine NODE_NAME of blade to shut down.
Pause BareMetalHost sync by running following command for the blade to be shut down:
Retrieve the BMC-IP address for NODE_NAME from values in BMC-IP column:
kubectlgetservers-A
Visit the BMC-IP address obtained in the previous step and sign in by entering the username and password obtained.
Hover over first button on top row. It should display Power: ON. Click it. A drop-down menu will appear, click first item labelled Momentary Press. The button colour will change from Green to Orange, meaning node is shutting down. Wait for the button to change color to yellow, indicating the machine has powered off. This will take a few minutes.
Wait for 30 minutes for the reconciliation to complete.
Reboot the blade
This section describes steps to boot up a blade which was shut down earlier.
Prerequisites
You can execute this runbook on a laptop or workstation connected to Google Distributed Cloud (GDC) air-gapped appliance's network. Alternatively, you can connect a laptop or workstation to switch by following Connect the device. Make sure you have the access to Kubeconfig for the root-admin cluster. And set correct KUBECONFIG environment variable by running export KUBECONFIG=<path to kubeconfig>.
Plan of action
Press the power button on the blade. Once the blade is powered up, wait for a few minutes for the control plane to connect. kubectl should be able to connect to control plane in under 30 minutes.
Determine name of the target node by running kubectl get nodes -A.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-09-04 UTC."],[],[],null,["# Shut down one blade\n\nThis page describes how to shut down and reboot any one blade of Google Distributed Cloud (GDC) air-gapped appliance,\nfor example to move the device to maintain a blade.\n\nBefore you begin\n----------------\n\nEnsure you stop all workloads before proceeding further. Google cannot guarantee what will happen if workloads are active during a\nshutdown.\n\nIf you want to shut down all the blades, follow [Shut down the device](/distributed-cloud/hosted/docs/latest/appliance/admin/shutdown). When following these instructions, shut down *only* one blade and keep Google Distributed Cloud (GDC) air-gapped appliance running with two active blades.\n\n### Prerequisites\n\n1. You can execute this runbook on a laptop or workstation connected to Google Distributed Cloud (GDC) air-gapped appliance's network. Alternatively, you can connect a laptop or workstation to switch by following [Connect the device](/distributed-cloud/hosted/docs/latest/appliance/admin/connect-the-device).\n2. Make sure you have the access to Kubeconfig for the root-admin cluster.\n3. Set correct KUBECONFIG environment variable by running `export KUBECONFIG=\u003cpath to kubeconfig\u003e`.\n\n### Shut down the blade\n\n1. Get the node information by running `kubectl get nodes -A`. Determine \u003cvar translate=\"no\"\u003eNODE_NAME\u003cvar translate=\"no\"\u003e\u003c/var\u003e\u003c/var\u003e of blade to shut down.\n\n2. Pause BareMetalHost sync by running following command for the blade to be shut down:\n\n kubectl annotate bmhost -n gpc-system \u003cvar translate=\"no\"\u003eNODE_NAME\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-w\"\u003e \u003c/span\u003e\u003cspan class=\"devsite-syntax-s2\"\u003e\"baremetalhost.metal3.io/paused=true\"\u003c/span\u003e\u003cspan class=\"devsite-syntax-w\"\u003e \u003c/span\u003e--overwrite\n \u003c/var\u003e\u003c/var\u003e\n\n Sample output of this command is: \n\n baremetalhost.metal3.io/**-**-bm** annotated\n\n3. Cordon the target node:\n\n kubectl cordon \u003cvar translate=\"no\"\u003eNODE_NAME\u003cvar translate=\"no\"\u003e\n \u003c/var\u003e\u003c/var\u003e\n\n Sample output is: \n\n node/**-**-bm** cordoned\n\n4. Drain the target node:\n\n kubectl drain \u003cvar translate=\"no\"\u003eNODE_NAME\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-w\"\u003e \u003c/span\u003e--delete-emptydir-data\u003cspan class=\"devsite-syntax-w\"\u003e \u003c/span\u003e--grace-period\u003cspan class=\"devsite-syntax-w\"\u003e \u003c/span\u003e\u003cspan class=\"devsite-syntax-m\"\u003e900\u003c/span\u003e\u003cspan class=\"devsite-syntax-w\"\u003e \u003c/span\u003e--ignore-daemonsets\u003cspan class=\"devsite-syntax-w\"\u003e \u003c/span\u003e--disable-eviction\n \u003c/var\u003e\u003c/var\u003e\n\n Sample output: \n\n node/**-**-bm** already cordoned\n 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\n pod/grafana-0 deleted\n pod/capi-kubeadm-bootstrap-controller-manager-1.30.400-gke.136lvgtf deleted\n pod/grafana-0 deleted\n pod/grafana-proxy-server-86d8fc4758-mkc4f deleted\n .\n .\n .\n\n5. Gracefully shutdown the target node:\n\n6. Turn off \u003cvar translate=\"no\"\u003eNODE_NAME\u003cvar translate=\"no\"\u003e\u003c/var\u003e\u003c/var\u003e using iLO:\n\n - Retrieve the credentials to access the iLO:\n\n 1. Get the username:\n\n kubectl get secret bmc-credentials-\u003cvar translate=\"no\"\u003eNODE_NAME\u003c/var\u003e -n gpc-system -o jsonpath=\"{.data.username}\" | base64 --decode\n\n 2. Get the password:\n\n kubectl get secret bmc-credentials-\u003cvar translate=\"no\"\u003eNODE_NAME\u003c/var\u003e -n gpc-system -o jsonpath=\"{.data.password}\" | base64 --decode\n\n 3. Retrieve the \u003cvar translate=\"no\"\u003eBMC-IP\u003c/var\u003e address for \u003cvar translate=\"no\"\u003eNODE_NAME\u003c/var\u003e from values in `BMC-IP` column:\n\n kubectl get servers -A\n\n - Visit the \u003cvar translate=\"no\"\u003eBMC-IP\u003c/var\u003e address obtained in the previous step and sign in by entering the username and password obtained.\n\n - Hover over first button on top row. It should display `Power: ON`. Click it. A drop-down menu will appear, click first item labelled `Momentary Press`. The button colour will change from Green to Orange, meaning node is shutting down. Wait for the button to change color to yellow, indicating the machine has powered off. This will take a few minutes.\n\n7. Wait for 30 minutes for the reconciliation to complete.\n\nReboot the blade\n----------------\n\nThis section describes steps to boot up a blade which was shut down earlier.\n\n### Prerequisites\n\nYou can execute this runbook on a laptop or workstation connected to Google Distributed Cloud (GDC) air-gapped appliance's network. Alternatively, you can connect a laptop or workstation to switch by following [Connect the device](/distributed-cloud/hosted/docs/latest/appliance/admin/connect-the-device). Make sure you have the access to Kubeconfig for the root-admin cluster. And set correct KUBECONFIG environment variable by running `export KUBECONFIG=\u003cpath to kubeconfig\u003e`.\n\n### Plan of action\n\n1. Press the power button on the blade. Once the blade is powered up, wait for a few minutes for the control plane to connect. `kubectl` should be able to connect to control plane in under 30 minutes.\n\n2. Determine name of the target node by running `kubectl get nodes -A`.\n\n3. Uncordon the target node to enable scheduling:\n\n kubectl uncordon `\u003cvar translate=\"no\"\u003eNODE_NAME\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-sb\"\u003e`\u003c/span\u003e\n \u003c/var\u003e\u003c/var\u003e\n\n4. Resume sync of BareMetalHost for the target node:\n\n kubectl annotate bmhost -n gpc-system \u003cvar translate=\"no\"\u003eNODE_NAME\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-w\"\u003e \u003c/span\u003e\u003cspan class=\"devsite-syntax-s2\"\u003e\"baremetalhost.metal3.io/paused=false\"\u003c/span\u003e\u003cspan class=\"devsite-syntax-w\"\u003e \u003c/span\u003e--overwrite\n \u003c/var\u003e\u003c/var\u003e\n\n5. Wait for 30 minutes for the reconciliation to complete."]]