Mengupdate cluster

Setelah membuat cluster dengan bmctl, Anda dapat mengubah beberapa aspek konfigurasi cluster dengan melakukan urutan tindakan berikut:

  1. Ubah nilai kolom tertentu dalam file konfigurasi cluster, yang secara default terletak di sini: bmctl-workspace/CLUSTER-NAME/CLUSTER-NAME.yaml.

  2. Update cluster dengan menjalankan perintah bmctl update.

Dengan cara ini, Anda dapat, misalnya, menambahkan atau menghapus node dalam cluster atau mengganti node dalam cluster. Dokumen ini menjelaskan cara melakukan update ini dan update lainnya pada cluster.

Namun, penting untuk diperhatikan bahwa banyak aspek konfigurasi cluster Anda yang tidak dapat diubah dan tidak dapat diperbarui setelah cluster dibuat. Untuk mengetahui daftar lengkap kolom yang dapat diubah dan tidak dapat diubah, lihat Referensi kolom konfigurasi cluster. Referensi kolom adalah tabel yang dapat diurutkan. Klik judul kolom untuk mengubah urutan sortir. Klik nama kolom untuk melihat deskripsinya.

Menambahkan atau menghapus node dalam cluster

Kumpulan node adalah sekelompok node di dalam cluster yang memiliki konfigurasi yang sama. Perlu diingat bahwa node selalu menjadi bagian dari kumpulan node. Untuk menambahkan node baru ke cluster, Anda harus menambahkannya ke kumpulan node tertentu. Menghapus node dari kumpulan node sama dengan menghapus node dari cluster sepenuhnya.

Ada tiga jenis kumpulan node di GDCV untuk Bare Metal: bidang kontrol, load balancer, dan kumpulan node pekerja.

Anda menambah atau menghapus node dari kumpulan node dengan menambah atau menghapus alamat IP node di bagian tertentu dari file konfigurasi cluster. Daftar berikut menunjukkan bagian yang perlu diedit untuk kumpulan node tertentu:

  • Kumpulan node pekerja: tambahkan atau hapus alamat IP node di bagian spec.nodes pada spesifikasi NodePool.
  • Kumpulan node bidang kontrol: tambahkan atau hapus alamat IP node di bagian spec.controlPlane.nodePoolSpec.nodes pada spesifikasi Cluster.
  • Kumpulan node load balancer: tambahkan atau hapus alamat IP node di bagian spec.loadBalancer.nodePoolSpec.nodes pada spesifikasi Cluster.

Contoh: cara menghapus node pekerja

Berikut ini contoh file konfigurasi cluster yang menunjukkan spesifikasi dua node pekerja:

---
apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
  name: nodepool1
  namespace: cluster-cluster1
spec:
  clusterName: cluster1
  nodes:
  - address: 172.18.0.5
  - address: 172.18.0.6

Untuk menghapus node:

  1. (Opsional) Jika node yang akan Anda hapus menjalankan pod yang penting, masukkan node ke mode pemeliharaan terlebih dahulu.

    Anda dapat memantau proses pengosongan node untuk worker node dengan melihat kolom status.nodesDrained dan status.nodesDraining di resource NodePool.

  2. Edit file konfigurasi cluster untuk menghapus entri alamat IP untuk node.

  3. Update cluster:

    bmctl update cluster -c CLUSTER_NAME \
        --kubeconfig=ADMIN_KUBECONFIG
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster yang ingin Anda perbarui.
    • ADMIN_KUBECONFIG: jalur ke file kubeconfig cluster admin.

    Setelah perintah bmctl update berhasil dieksekusi, perlu waktu beberapa saat untuk menyelesaikan tugas machine-preflight dan machine-init. Anda dapat melihat status node dan kumpulan node masing-masing dengan menjalankan perintah yang dijelaskan di bagian Memverifikasi pembaruan Anda pada dokumen ini.

Memaksa penghapusan node

Jika perintah bmctl update tidak dapat menghapus node, Anda mungkin harus memaksa penghapusannya dari cluster. Untuk mengetahui detailnya, lihat Menghapus otomatis node yang rusak.

Mengganti node bidang kontrol HA

Anda dapat mengganti node bidang kontrol ketersediaan tinggi (HA) di cluster admin, pengguna, mandiri, dan hybrid.

Anda dapat mengganti node dalam cluster dengan melakukan langkah-langkah berikut:

  1. Hapus alamat IP node dari file konfigurasi cluster.
  2. Update cluster.
  3. Periksa status node dalam cluster.
  4. Tambahkan alamat IP node baru ke file konfigurasi cluster yang sama.
  5. Update cluster.

Bagian selanjutnya akan membahas sebuah contoh.

Berikut ini contoh file konfigurasi cluster yang menunjukkan tiga node bidang kontrol dalam cluster pengguna:

---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
 name: user-cluster
 namespace: cluster-user-cluster
spec:
  controlPlane:
   nodePoolSpec:
     nodes:
     - address: 10.200.0.11
     - address: 10.200.0.12
     - address: 10.200.0.13

Untuk mengganti node terakhir yang tercantum di bagian spec.controlPlane.nodePoolSpec.nodes, lakukan langkah-langkah berikut:

  1. Hapus node dengan menghapus entri alamat IP-nya di file konfigurasi cluster. Setelah melakukan perubahan ini, file konfigurasi cluster akan terlihat seperti ini:

    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
     name: user-cluster
     namespace: cluster-user-cluster
    spec:
      controlPlane:
       nodePoolSpec:
         nodes:
         - address: 10.200.0.11
         - address: 10.200.0.12
    
  2. Update cluster dengan menjalankan perintah berikut:

    bmctl update cluster -c CLUSTER_NAME \
        --kubeconfig=KUBECONFIG
    

    Buat perubahan berikut:

    • Ganti CLUSTER_NAME dengan nama cluster yang ingin Anda perbarui.
    • Jika cluster adalah cluster yang dikelola sendiri (seperti admin atau cluster mandiri), ganti KUBECONFIG dengan jalur ke file kubeconfig cluster. Jika cluster adalah cluster pengguna, seperti dalam contoh ini, ganti KUBECONFIG dengan jalur ke file kubeconfig cluster admin.
  3. Setelah perintah bmctl update berhasil dieksekusi, perlu waktu beberapa saat untuk menyelesaikan tugas machine-preflight dan machine-init. Anda dapat melihat status node dan masing-masing kumpulan node-nya dengan menjalankan perintah yang dijelaskan di bagian Memverifikasi update Anda dalam dokumen ini. Setelah kumpulan node dan node berada dalam status siap, Anda dapat melanjutkan ke langkah berikutnya.

  4. Tambahkan node bidang kontrol baru ke kumpulan node dengan menambahkan alamat IP node bidang kontrol baru ke bagian spec.controlPlane.nodePoolSpec.nodes file konfigurasi cluster. Setelah melakukan perubahan ini, file konfigurasi cluster akan terlihat seperti ini:

    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
     name: user-cluster
     namespace: cluster-user-cluster
    spec:
      controlPlane:
       nodePoolSpec:
         nodes:
         - address: 10.200.0.11
         - address: 10.200.0.12
         - address: 10.200.0.14
    
  5. Update cluster dengan menjalankan perintah berikut:

    bmctl update cluster -c CLUSTER_NAME \
        --kubeconfig=KUBECONFIG
    

    Buat perubahan berikut:

    • Ganti CLUSTER_NAME dengan nama cluster yang ingin Anda perbarui.
    • Jika cluster adalah cluster yang dikelola sendiri (seperti admin atau cluster mandiri), ganti KUBECONFIG dengan jalur ke file kubeconfig cluster. Jika cluster adalah cluster pengguna, seperti dalam contoh ini, ganti KUBECONFIG dengan jalur ke file kubeconfig cluster admin.

Verifikasi pembaruan Anda

Anda dapat melihat status node dan kumpulan node masing-masing dengan perintah kubectl get.

Misalnya, perintah berikut menunjukkan status kumpulan node dalam namespace cluster cluster-my-cluster:

kubectl -n cluster-my-cluster get nodepools.baremetal.cluster.gke.io

Sistem akan menampilkan hasil yang mirip dengan berikut ini:

NAME                    READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
cluster-my-cluster      3       0             0         0                  0
cluster-my-cluster-lb   2       0             0         0                  0
np1                     3       0             0         0                  0

Reconciling=1 berarti langkah rekonsiliasi masih dalam proses. Anda harus menunggu hingga statusnya berubah menjadi Reconciling=0.

Anda juga dapat memeriksa status node dalam cluster dengan menjalankan perintah berikut:

kubectl get nodes --kubeconfig=KUBECONFIG

Jika Anda memerlukan informasi selengkapnya tentang cara mendiagnosis cluster, lihat Membuat snapshot untuk mendiagnosis cluster.

Fitur yang dapat Anda ubah dengan mengupdatenya

Selain menambahkan, menghapus, atau mengganti node, Anda dapat menggunakan perintah bmctl update untuk mengubah nilai kolom tertentu yang dapat berubah, Resource Kustom (CR), dan anotasi dalam file konfigurasi cluster.

Untuk mengupdate resource cluster, edit file konfigurasi cluster dan gunakan bmctl update untuk menerapkan perubahan Anda.

Bagian berikut menguraikan beberapa contoh umum untuk memperbarui cluster yang ada dengan mengubah nilai kolom, CR, atau anotasi.

loadBalancer.addressPools

Bagian addressPools berisi kolom untuk menentukan kumpulan load balancing untuk load balancer yang dipaketkan. Anda dapat menambahkan lebih banyak kumpulan alamat load balancing kapan saja, tetapi Anda tidak dapat menghapus atau mengubah kumpulan alamat yang sudah ada.

addressPools:
- name: pool1
  addresses:
  - 192.168.1.0-192.168.1.4
  - 192.168.1.240/28
- name: pool2
  addresses:
  - 192.168.1.224/28

Mencegah penghapusan cluster secara tidak sengaja

Jika menambahkan anotasi baremetal.cluster.gke.io/prevent-deletion: "true" ke file konfigurasi cluster, Anda tidak dapat menghapus cluster. Misalnya, menjalankan kubectl delete cluster atau bmctl reset cluster akan menghasilkan error.

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: ci-10c3c6f4d9c698e
  namespace: cluster-ci-10c3c6f4d9c698e
  annotations:
    baremetal.cluster.gke.io/prevent-deletion: "true"
spec:
  clusterNetwork:

bypassPreflightCheck

Nilai default kolom bypassPreflightCheck adalah false. Jika Anda menetapkan kolom ini ke true dalam file konfigurasi cluster, pemeriksaan preflight internal akan diabaikan, Anda akan menerapkan resource ke cluster yang ada.

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: cluster1
  namespace: cluster-cluster1
  annotations:
    baremetal.cluster.gke.io/private-mode: "true"
spec:
  bypassPreflightCheck: true

loginUser

Anda dapat menetapkan kolom loginUser di bagian konfigurasi akses node. Kolom ini mendukung kemampuan sudo tanpa sandi untuk login mesin.

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: cluster1
  namespace: cluster-cluster1
  annotations:
    baremetal.cluster.gke.io/private-mode: "true"
spec:
  nodeAccess:
    loginUser: abm

NetworkGatewayGroup

Resource kustom NetworkGatewayGroup digunakan untuk menyediakan alamat IP mengambang untuk fitur jaringan lanjutan, seperti gateway NAT keluar atau fitur load balancing paket dengan BGP. Untuk menggunakan resource kustom NetworkGatewayGroup dan fitur jaringan terkait, Anda harus menetapkan clusterNetwork.advancedNetworking ke true saat membuat cluster.

apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
  name: default
  namespace: cluster-bm
spec:
  floatingIPs:
  - 10.0.1.100
  - 10.0.2.100

BGPLoadBalancer

Saat Anda mengonfigurasi load balancer yang dipaketkan dengan BGP, load balancing bidang data akan menggunakan peer eksternal yang sama dengan yang ditentukan untuk peering bidang kontrol secara default. Atau, Anda dapat mengonfigurasi load balancing bidang data secara terpisah, menggunakan resource kustom BGPLoadBalancer (dan resource kustom BGPPeer). Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi load balancer yang dipaketkan dengan BGP.

apiVersion: networking.gke.io/v1
kind: BGPLoadBalancer
metadata:
  name: default
  namespace: cluster-bm
spec:
  peerSelector:
    cluster.baremetal.gke.io/default-peer: "true"

BGPPeer

Saat Anda mengonfigurasi load balancer yang dipaketkan dengan BGP, load balancing bidang data akan menggunakan peer eksternal yang sama dengan yang ditentukan untuk peering bidang kontrol secara default. Atau, Anda dapat mengonfigurasi load balancing bidang data secara terpisah, menggunakan resource kustom BGPPeer (dan resource kustom BGPLoadBalancer). Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi load balancer yang dipaketkan dengan BGP.

apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
  name: bgppeer1
  namespace: cluster-bm
  labels:
    cluster.baremetal.gke.io/default-peer: "true"
spec:
  localASN: 65001
  peerASN: 65002
  peerIP: 10.0.3.254
  sessions: 2

NetworkAttachmentDefinition

Anda dapat menggunakan perintah bmctl update untuk mengubah resource kustom NetworkAttachmentDefinition yang sesuai dengan jaringan.

apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
  name: gke-network-1
  namespace: cluster-my-cluster
spec:
  config: '{
  "type": "ipvlan",
  "master": "enp2342",
  "mode": "l2",
  "ipam": {
    "type": "whereabouts",
    "range": "172.120.0.0/24"

Tingkatkan rentang jaringan layanan

Untuk membuat lebih banyak layanan daripada batas awal, Anda dapat mengurangi CIDR layanan IPv4 untuk meningkatkan jaringan layanan cluster Anda. Mengurangi mask (nilai setelah "/") akan menghasilkan rentang jaringan yang lebih besar.

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: cluster1
  namespace: cluster-cluster1
spec:
  ...
  clusterNetwork:
    services:
      cidrBlocks:
        - 172.26.0.0/14
  ...

Anda hanya dapat meningkatkan rentang CIDR layanan IPv4. Rentang jaringan tidak dapat dikurangi, yang berarti mask (nilai setelah "/") tidak dapat ditingkatkan.

Mengonfigurasi setelan pull image kubelet

Kubelet berjalan pada setiap node cluster Anda. Kubelet bertanggung jawab untuk memantau container pada node dan memastikan container tersebut responsif. Jika diperlukan, kubelet akan mengkueri dan mengambil image dari Container Registry.

Mengupdate konfigurasi kubelet secara manual dan menjaganya tetap sinkron di semua node cluster Anda bukanlah hal yang mudah. Lebih parah lagi, perubahan konfigurasi kubelet manual pada node Anda akan hilang saat Anda mengupgrade cluster.

Agar update yang disinkronkan lebih mudah dan persisten, GKE di Bare Metal memungkinkan Anda menentukan beberapa setelan kubelet untuk setiap kumpulan node cluster: node bidang kontrol, node load balancer, dan node pekerja. Setelan ini berlaku untuk semua node dalam kumpulan tertentu dan tetap ada selama upgrade cluster. Kolom untuk setelan ini dapat berubah, sehingga Anda dapat memperbaruinya kapan saja, bukan hanya selama pembuatan cluster.

Kolom yang didukung berikut mengontrol operasi pull Container Registry untuk kubelet:

  • registryBurst (default: 10)
  • registryPullQPS (default: 5)
  • serializeImagePulls (default: benar)

Untuk mengetahui informasi selengkapnya tentang setiap kolom konfigurasi kubelet, baca Referensi kolom konfigurasi cluster.

Anda dapat menentukan kolom ini di bagian kubeletConfig pada spesifikasi Cluster dan spesifikasi NodePool untuk kumpulan node berikut:

Contoh berikut menunjukkan kolom yang ditambahkan dengan nilai default di file konfigurasi cluster. Perhatikan bahwa anotasi preview.baremetal.cluster.gke.io/custom-kubelet: "enable" diperlukan.

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: cluster1
  namespace: cluster-cluster1
  annotations:
    preview.baremetal.cluster.gke.io/custom-kubelet: "enable"
spec:
  ...
  controlPlane:
    nodePoolSpec:
      kubeletConfig:
        registryBurst: 10
        registryPullQPS: 5
        serializeImagePulls: true
  ...
  loadBalancer:
    nodePoolSpec:
      kubeletConfig:
        registryBurst: 10
        registryPullQPS: 5
        serializeImagePulls: true
  ...
apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
  name: node-pool-new
  namespace: cluster-cluster1
spec:
  clusterName: cluster1
  ...
  kubeletConfig:
    registryBurst: 10
    registryPullQPS: 5
    serializeImagePulls: true

Dalam setiap kasus, setelan berlaku untuk semua node dalam kumpulan tersebut.

Cara menggunakan

Berikut beberapa pertimbangan untuk menyesuaikan pull gambar:

  • Karena gambar ditarik secara berurutan secara default, pull gambar yang memerlukan waktu lama dapat menunda semua penarikan gambar lain yang dijadwalkan pada sebuah node. Pengambilan image yang tertunda dapat memblokir proses upgrade (terutama saat image GKE baru pada Bare Metal perlu di-deploy pada sebuah node). Jika terpengaruh oleh penundaan penarikan gambar, Anda dapat menetapkan serializeImagePulls ke false untuk memungkinkan penarikan gambar paralel.

  • Jika mengalami error throttling pull gambar, seperti pull QPS exceeded, sebaiknya Anda meningkatkan registryPullQPS dan registryBurst untuk meningkatkan throughput pull gambar. Kedua kolom ini menyesuaikan kecepatan pull dan ukuran antrean, serta dapat membantu mengatasi masalah terkait throttling lainnya. Nilai negatif tidak diizinkan.

Gunakan bmctl update untuk menerapkan perubahan

Setelah Anda mengubah file konfigurasi, perbarui cluster dengan menjalankan perintah bmctl update berikut:

bmctl update cluster -c CLUSTER_NAME --kubeconfig=KUBECONFIG

Buat perubahan berikut:

  • Ganti CLUSTER_NAME dengan nama cluster yang ingin Anda perbarui.
  • Jika cluster adalah cluster yang dikelola sendiri (seperti admin atau cluster mandiri), ganti KUBECONFIG dengan jalur ke file kubeconfig cluster. Jika cluster adalah cluster pengguna, ganti KUBECONFIG dengan jalur ke file kubeconfig cluster admin.