Halaman ini menjelaskan cara mematikan dan menghidupkan appliance air-gapped Google Distributed Cloud (GDC). Misalnya: untuk memindahkan perangkat ke lokasi baru.
Anda dapat menggunakan appliance air-gapped GDC di lokasi operasional sementara, yang mengharuskan perangkat dimatikan untuk diangkut agar dapat dipindahkan antar-lokasi. Anda mungkin juga perlu memulihkan perangkat dari kegagalan daya, karena generator mungkin menyalakan perangkat 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 proses shutdown.
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 switch dengan mengikuti 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 blade
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 pada langkah sebelumnya:kubectl annotate bmhost -n gpc-system NODE_NAME "baremetalhost.metal3.io/paused=true" --overwriteOutput-nya mungkin terlihat seperti contoh ini:
baremetalhost.metal3.io/**-**-bm01 annotated baremetalhost.metal3.io/**-**-bm02 annotated baremetalhost.metal3.io/**-**-bm03 annotatedDapatkan kredensial ONTAP Select (OTS). Anda memerlukan kredensial ini untuk mematikan node OTS nanti.
Jalankan perintah berikut untuk mengidentifikasi alamat IP pengelolaan OTS yang tercantum di kolom MGMTIP (Management IP):
export KUBECONFIG=/root/release/root-admin/kube-admin-remote-kubeconfig kubectl get storagecluster -n gpc-systemJalankan perintah berikut untuk mengambil sandi administrator 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_PASSWORDSimpan IP dan sandi pengelolaan OTS.
Cordon semua node satu per satu:
kubectl cordon NODE_NAMEOutput-nya mungkin terlihat seperti contoh ini:
node/**-**-bm01 cordoned node/**-**-bm02 cordoned node/**-**-bm03 cordonedMatikan node ONTAP Select (OTS)
Buat koneksi SSH ke cluster OTS menggunakan alamat IP pengelolaan dan sandi administrator yang Anda ambil:
ssh admin@<ots-management-ip>Matikan node OTS (VM). Berikut adalah contohnya:
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 *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-IPoutput darikubectl get nodes -A -o wide. Buat koneksi SSH:ssh root@INTERNAL-IPUntuk 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 statusPerhatikan kolom
IS LEADER.Output-nya 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 pengikut 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 pemimpin etcd dan pengikut etcd dari node.
Drain dua node pengikut etcd. Jangan drain node pemimpin etcd.
kubectl drain NODE_NAME --delete-emptydir-data --grace-period 900 --ignore-daemonsets --disable-evictionOutput-nya 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 . . .Matikan dua node pengikut etcd secara normal. 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 --decodeAmbil sandi untuk iLO:
kubectl get secret bmc-credentials-NODE_NAME -n gpc-system -o jsonpath="{.data.password}" | base64 --decodeAmbil alamat
BMC-IPuntukNODE_NAMEdari nilai di kolomBMC-IP:kubectl get servers -ABuka 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. Tombol tersebut akan menampilkan
Power: ON. Klik tombol tersebut. Menu drop-down akan muncul, klik item pertama yang berlabelMomentary Press. Warna tombol akan berubah dari Hijau menjadi Oranye, yang berarti node sedang dimatikan. Tunggu hingga warna tombol berubah menjadi kuning, yang menunjukkan bahwa mesin telah dimatikan. Proses ini akan memerlukan waktu beberapa menit.
Setelah kedua node pengikut etcd dimatikan, ulangi Langkah 7 untuk node pemimpin etcd.
Menghapus Yubikey untuk pengangkutan
Jika Anda perlu mengangkut sistem setelah penginstalan selesai, hapus Yubikey dan angkut Yubikey secara terpisah. Pastikan Anda menandai kunci sendiri.
Menghidupkan dan menghubungkan
Jika daya hilang secara tidak terduga, seperti shutdown paksa, perangkat akan otomatis kembali aktif. Dalam hal ini, Anda harus memulai dari Langkah 7, dan 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 appliance air-gapped GDC ke daya, lalu tekan tombol daya di node
**-**-bm03untuk memulai server mediator OTS.Setelah node
**-**-bm03tersedia, pastikan server mediator OTS aktif dengan memeriksa status layanan subsistem target SCSI (SCST). Layanan ini akan menampilkanActive: active (running):sudo systemctl status scst.serviceTekan tombol daya di dua node yang tersisa 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.Uncordon 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" --overwritePeriksa status node menggunakan
kubectl get nodes -A.Jika semua node dalam status
Ready, tunggu selama dua jam hingga proses rekonsiliasi selesai. Output-nya 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.300Dalam hal ini, tidak ada tindakan lebih lanjut yang diperlukan.
Jika tidak, jika satu atau beberapa node dalam status 'NotReady', mulai ulang beberapa layanan untuk menyiapkan cluster. Output-nya 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.300Dalam 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 kolomINTERNAL-IPoutput darikubectl get nodes -A -o wide:ssh root@INTERNAL-IPMulai ulang layanan
containerddankubeletdi nodeNotReady. Perintah berikut akan dijalankan di node, bukan di laptop atau workstation pelanggan yang terhubung ke appliance air-gapped Google Distributed Cloud (GDC):systemctl stop containerd systemctl daemon-reload systemctl restart containerd systemctl stop kubelet systemctl start kubeletUntuk memverifikasi status layanan
containerddankubelet, jalankan perintah berikut di nodeNotReady:systemctl status kubelet systemctl status containerdOutput-nya 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
containerddankubeletberjalan dengan baik setelah dimulai ulang, tunggu selama dua jam hingga rekonsiliasi selesai.