Halaman ini menjelaskan cara mematikan dan mengaktifkan perlengkapan air-gapped Google Distributed Cloud (GDC). Misalnya: untuk memindahkan perangkat ke lokasi baru.
Anda dapat menggunakan perangkat GDC yang terisolasi dari jaringan di lokasi operasional sementara, yang mengharuskan perangkat dimatikan untuk transportasi guna memindahkan perangkat antar-lokasi. Anda mungkin juga perlu memulihkan perangkat dari kegagalan daya, karena generator dapat menyuplai daya di lingkungan yang sulit.
Sebelum memulai
Pastikan Anda menghentikan semua workload sebelum melanjutkan. Google tidak dapat menjamin apa yang akan terjadi jika workload aktif selama penonaktifan.
Prasyarat
- Anda dapat menjalankan runbook ini di laptop atau workstation yang terhubung ke jaringan appliance air-gapped Google Distributed Cloud (GDC). Atau, Anda dapat menghubungkan laptop atau workstation ke tombol dengan mengikuti langkah-langkah di Menghubungkan perangkat.
- Pastikan Anda memiliki akses ke kubeconfig untuk cluster root-admin.
- Tetapkan variabel lingkungan KUBECONFIG yang benar dengan menjalankan export KUBECONFIG=PATH_TO_KUBECONFIG.
- Pastikan Anda memiliki kunci dan sertifikat SSH.
Mematikan baling-baling
- Dapatkan info node dengan menjalankan - kubectl get nodes -A -o wide.
- Jeda sinkronisasi BareMetalHost dengan menjalankan perintah berikut untuk semua node satu per satu.Ganti - NODE_NAMEdengan nama node yang diperoleh di Langkah 1:- kubectl annotate bmhost -n gpc-system NODE_NAME "baremetalhost.metal3.io/paused=true" --overwrite- Output-nya mungkin terlihat seperti contoh ini: - baremetalhost.metal3.io/**-**-bm01 annotated baremetalhost.metal3.io/**-**-bm02 annotated baremetalhost.metal3.io/**-**-bm03 annotated
- Menghalangi semua node satu per satu: - kubectl cordon NODE_NAME- Output-nya mungkin terlihat seperti contoh ini: - node/**-**-bm01 cordoned node/**-**-bm02 cordoned node/**-**-bm03 cordoned
- Untuk menentukan node pemimpin etcd dan node pengikut, jalankan langkah ini satu per satu untuk semua node: - Temukan IP target untuk SSH dengan mencatat nilai di kolom - INTERNAL-IPdari output- kubectl get nodes -A -o wide. Buat koneksi SSH:- ssh root@INTERNAL-IP
- Untuk menentukan apakah node saat ini adalah pemimpin atau pengikut etcd, jalankan perintah berikut di dalam 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- Perhatikan kolom - IS LEADER.- Output mungkin terlihat seperti contoh ini untuk node pemimpin 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 | | +----------------+------------------+--------------+---------+-----------+------------+-----------+------------+--------------------+--------+- Output-nya mungkin terlihat seperti contoh ini untuk dua node 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 | | +----------------+------------------+--------------+---------+-----------+------------+-----------+------------+--------------------+--------+- Catat status etcd-leader dan etcd-follower node. 
 
- Kosongkan dua node follower etcd. Jangan menguras node pemimpin etcd. - kubectl drain NODE_NAME --delete-emptydir-data --grace-period 900 --ignore-daemonsets --disable-eviction- Outputnya mungkin terlihat seperti ini: - 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 . . .
- Hentikan kedua node follower etcd secara benar. Ikuti langkah berikutnya satu per satu untuk kedua node. 
- Nonaktifkan - NODE_NAMEmenggunakan iLO:- Ambil nama pengguna untuk iLO: - kubectl get secret bmc-credentials-NODE_NAME -n gpc-system -o jsonpath="{.data.username}" | base64 --decode
- Mendapatkan sandi untuk iLO: - kubectl get secret bmc-credentials-NODE_NAME -n gpc-system -o jsonpath="{.data.password}" | base64 --decode
- Ambil alamat - BMC-IPuntuk- NODE_NAMEdari nilai di kolom- BMC-IP:- kubectl get servers -A
- Buka alamat - BMC-IPyang diperoleh pada langkah sebelumnya dan login dengan memasukkan nama pengguna dan sandi yang diperoleh.
- Arahkan kursor ke tombol pertama di baris atas. Seharusnya menampilkan - Power: ON. Klik lab-report-service tersebut. Menu drop-down akan muncul, klik item pertama berlabel- Momentary Press. Warna tombol akan berubah dari Hijau menjadi Oranye, yang berarti node sedang dimatikan. Tunggu hingga tombol berubah warna menjadi kuning, yang menunjukkan bahwa mesin telah dimatikan. Proses ini akan memakan waktu beberapa menit.
 
- Setelah kedua node etcd-follower dimatikan, ulangi Langkah 7 untuk node pemimpin etcd. 
Melepas YubiKey untuk transportasi
Jika Anda perlu memindahkan sistem setelah penginstalan selesai, lepaskan YubiKey dan pindahkan YubiKey secara terpisah. Pastikan Anda menandai kunci sendiri.
Nyalakan dan hubungkan
Jika daya hilang secara tiba-tiba, seperti penonaktifan paksa, perangkat akan otomatis aktif kembali. Dalam hal ini, Anda harus memulai dari Langkah 7, dengan melewati Langkah 1 hingga 6. Setelah kehilangan daya yang tidak terduga, Anda mungkin mengalami kehilangan data, bahkan setelah memulai ulang.
Rencana tindakan
- Masukkan yubikey di setiap node. 
- Colokkan mesin perangkat yang terisolasi dari internet GDC ke daya, lalu tekan tombol daya di setiap node dalam urutan apa pun. 
- Setelah node diaktifkan, tunggu beberapa menit hingga bidang kontrol terhubung. - kubectldapat terhubung ke bidang kontrol dalam waktu kurang dari 30 menit.
- Dapatkan nama node dengan menjalankan - kubectl get nodes -A.
- Hapus tanda tidak dapat dijadwalkan pada setiap node untuk mengaktifkan penjadwalan: - kubectl uncordon `NODE_NAME`
- Lanjutkan sinkronisasi host bare metal untuk setiap node: - kubectl annotate bmhost -n gpc-system NODE_NAME "baremetalhost.metal3.io/paused=false" --overwrite
- Periksa status node menggunakan - kubectl get nodes -A.- Jika semua node dalam status - Ready, tunggu selama dua jam hingga proses rekonsiliasi selesai. Outputnya mungkin terlihat seperti ini:- 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- Dalam hal ini, Anda tidak perlu melakukan tindakan lebih lanjut. 
- Jika tidak, jika satu atau beberapa node dalam status 'NotReady', mulai ulang beberapa layanan untuk menyiapkan cluster. Outputnya mungkin terlihat seperti ini: - 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- Dalam hal ini, catat nama node yang belum siap, lalu lanjutkan ke langkah berikutnya. 
 
- Buat koneksi SSH ke node - NotReady. Alamat IP target SSH adalah nilai di kolom- INTERNAL-IPdari output- kubectl get nodes -A -o wide:- ssh root@INTERNAL-IP
- Mulai ulang layanan - containerddan- kubeletdi node- NotReady. Perintah berikut harus dijalankan di node, bukan di laptop atau workstation pelanggan yang terhubung ke perangkat air-gapped Google Distributed Cloud (GDC):- systemctl stop containerd systemctl daemon-reload systemctl restart containerd systemctl stop kubelet systemctl start kubelet
- Untuk memverifikasi status layanan - containerddan- kubelet, jalankan perintah berikut di node- NotReady:- systemctl status kubelet systemctl status containerd- Outputnya mungkin terlihat seperti ini: - # 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 . . .- Jika layanan - containerddan- kubeletberjalan dengan baik setelah dimulai ulang, tunggu selama dua jam hingga rekonsiliasi selesai.