Mematikan dan mengaktifkan perangkat

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 dengan air gap 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

  1. 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.
  2. Pastikan Anda memiliki akses ke kubeconfig untuk cluster root-admin.
  3. Tetapkan variabel lingkungan KUBECONFIG yang benar dengan menjalankan export KUBECONFIG=PATH_TO_KUBECONFIG.
  4. Pastikan Anda memiliki kunci dan sertifikat SSH.

Mematikan bilah

  1. Dapatkan info node dengan menjalankan kubectl get nodes -A -o wide.

  2. Jeda sinkronisasi BareMetalHost dengan menjalankan perintah berikut untuk semua node satu per satu. Ganti NODE_NAME dengan nama node yang diperoleh di langkah sebelumnya:

    kubectl annotate bmhost -n gpc-system NODE_NAME "baremetalhost.metal3.io/paused=true" --overwrite
    

    Outputnya mungkin terlihat seperti contoh ini:

    baremetalhost.metal3.io/**-**-bm01 annotated
    baremetalhost.metal3.io/**-**-bm02 annotated
    baremetalhost.metal3.io/**-**-bm03 annotated
    
  3. Dapatkan 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-system
    

    Jalankan 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_PASSWORD
    

    Simpan IP dan sandi pengelolaan OTS.

  4. Menghalangi semua node satu per satu:

    kubectl cordon NODE_NAME
    

    Outputnya mungkin terlihat seperti contoh ini:

    node/**-**-bm01 cordoned
    node/**-**-bm02 cordoned
    node/**-**-bm03 cordoned
    
  5. Matikan 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 *
    
  6. Untuk mencegah webhook gatekeeper memblokir pengurasan node saat podnya offline, tetapkan kebijakan kegagalannya ke Ignore untuk sementara:

    kubectl patch validatingwebhookconfiguration gatekeeper-validating-webhook-configuration -p '{"webhooks":[{"name":"validation.gatekeeper.sh","failurePolicy":"Ignore"}]}'
    
  7. Untuk menentukan node pemimpin etcd dan node pengikut, jalankan langkah ini satu per satu untuk semua node:

    1. Temukan IP target untuk SSH dengan mencatat nilai di kolom INTERNAL-IP dari output kubectl get nodes -A -o wide. Buat koneksi SSH:

      ssh root@INTERNAL-IP
      
    2. 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.

      Outputnya 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 |        |
      +----------------+------------------+--------------+---------+-----------+------------+-----------+------------+--------------------+--------+
      

      Outputnya 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.

  8. Kosongkan 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
    .
    .
    .
    
  9. Tutup dua node follower etcd secara benar. Ikuti langkah berikutnya satu per satu untuk kedua node.

  10. Nonaktifkan NODE_NAME menggunakan iLO:

    1. Ambil nama pengguna untuk iLO:

      kubectl get secret bmc-credentials-NODE_NAME -n gpc-system -o jsonpath="{.data.username}" | base64 --decode
      
    2. Mendapatkan sandi untuk iLO:

      kubectl get secret bmc-credentials-NODE_NAME -n gpc-system -o jsonpath="{.data.password}" | base64 --decode
      
    3. Ambil alamat BMC-IP untuk NODE_NAME dari nilai di kolom BMC-IP:

      kubectl get servers -A
      
    4. Buka alamat BMC-IP yang diperoleh pada langkah sebelumnya dan login dengan memasukkan nama pengguna dan sandi yang diperoleh.

    5. Arahkan kursor ke tombol pertama di baris atas. Layar akan 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.

  11. Setelah kedua node etcd-follower dimatikan, ulangi langkah menguras node 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 tiba-tiba hilang, seperti saat perangkat dimatikan secara paksa, perangkat akan otomatis aktif kembali. Dalam hal ini, Anda dapat melewati langkah-langkah untuk mengaktifkan dan menghubungkan perangkat, lalu langsung memulai dari langkah untuk membatalkan pembatasan setiap node. Setelah kehilangan daya secara tidak terduga, Anda mungkin mengalami kehilangan data, bahkan setelah memulai ulang.

Rencana tindakan

  1. Masukkan Yubikey di setiap node.

  2. Colokkan mesin appliance GDC dengan air gap ke daya, lalu tekan tombol daya di node **-**-bm03 untuk memulai server mediator OTS.

  3. Setelah node **-**-bm03 tersedia, verifikasi bahwa server mediator OTS aktif dengan memeriksa status layanan subsistem target SCSI (SCST). Layanan ini akan menampilkan Active: active (running):

    sudo systemctl status scst.service
    
  4. Tekan tombol daya pada dua node yang tersisa dalam urutan apa pun.

  5. Setelah node diaktifkan, tunggu beberapa menit hingga bidang kontrol terhubung. kubectl dapat terhubung ke bidang kontrol dalam waktu kurang dari 30 menit.

  6. Dapatkan nama node dengan menjalankan kubectl get nodes -A.

  7. Batalkan penutupan setiap node untuk mengaktifkan penjadwalan:

    kubectl uncordon NODE_NAME
    
  8. Lanjutkan sinkronisasi host bare metal untuk setiap node:

    kubectl annotate bmhost -n gpc-system NODE_NAME "baremetalhost.metal3.io/paused=false" --overwrite
    
  9. Kembalikan konfigurasi webhook validasi gatekeeper ke Fail untuk memulihkan kebijakan keamanan cluster:

    kubectl patch validatingwebhookconfiguration gatekeeper-validating-webhook-configuration -p '{"webhooks":[{"name":"validation.gatekeeper.sh","failurePolicy":"Fail"}]}'
    
  10. Periksa status node menggunakan kubectl get nodes -A.

    Setelah semua node berstatus Ready, tunggu 2 jam agar stack dasar selesai merekonsiliasi sebelum memecahkan masalah.

    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.

  11. Jika satu atau beberapa node berada dalam status NotReady, catat nama setiap node yang belum siap dan selesaikan langkah-langkah berikut:

    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
    
    1. Buat koneksi SSH ke node NotReady. Alamat IP target untuk SSH adalah nilai di kolom INTERNAL-IP dari output kubectl get nodes -A -o wide:

      ssh root@INTERNAL-IP
      
    2. Mulai ulang layanan containerd dan kubelet di node NotReady. Jalankan perintah berikut di node, bukan di laptop atau workstation yang terhubung ke perangkat GDC dengan air gap:

      systemctl stop containerd
      systemctl daemon-reload
      systemctl restart containerd
      systemctl stop kubelet
      systemctl start kubelet
      
    3. Verifikasi status layanan containerd dan kubelet dengan menjalankan 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
      .
      .
      .
      

      Setelah layanan containerd dan kubelet berjalan dan semua node berstatus Ready, tunggu 2 jam agar stack dasar selesai merekonsiliasi sebelum memecahkan masalah.