Menambahkan dan mengelola node pool


Halaman ini menunjukkan cara menambahkan dan menjalankan operasi pada node pool yang menjalankan cluster Google Kubernetes Engine (GKE) Standard. Untuk mempelajari cara kerja node pool, lihat Tentang node pool.

Cluster dapat melakukan operasi, seperti penyediaan otomatis node, di beberapa node pool secara paralel. Anda dapat membuat, memperbarui, atau menghapus node pool secara manual saat node pool lain sedang dibuat, diperbarui, atau dihapus.

Petunjuk ini tidak berlaku untuk cluster Autopilot, tempat GKE mengelola node, dan tidak ada node pool yang dapat Anda kelola. Untuk mempelajari lebih lanjut, lihat ringkasan Autopilot.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.

Menyiapkan akun layanan IAM untuk GKE

GKE menggunakan akun layanan IAM yang dilampirkan ke node Anda untuk menjalankan tugas sistem seperti logging dan pemantauan. Setidaknya, akun layanan node ini harus memiliki peran Akun Layanan Node Default Kubernetes Engine (roles/container.defaultNodeServiceAccount) di project Anda. Secara default, GKE menggunakan akun layanan default Compute Engine, yang dibuat secara otomatis di project Anda, sebagai akun layanan node.

Untuk memberikan peran roles/container.defaultNodeServiceAccount ke akun layanan default Compute Engine, selesaikan langkah-langkah berikut:

console

  1. Buka halaman Sambutan:

    Buka Selamat Datang

  2. Di kolom Project number, klik Copy to clipboard.
  3. Buka halaman IAM:

    Buka IAM

  4. Klik Berikan akses.
  5. Di kolom Akun utama baru, tentukan nilai berikut:
    PROJECT_NUMBER-compute@developer.gserviceaccount.com
    Ganti PROJECT_NUMBER dengan nomor project yang Anda salin.
  6. Di menu Select a role, pilih peran Kubernetes Engine Default Node Service Account.
  7. Klik Simpan.

gcloud

  1. Temukan nomor project Google Cloud Anda:
    gcloud projects describe PROJECT_ID \
        --format="value(projectNumber)"

    Ganti PROJECT_ID dengan project ID Anda.

    Outputnya mirip dengan hal berikut ini:

    12345678901
    
  2. Berikan peran roles/container.defaultNodeServiceAccount ke akun layanan default Compute Engine:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --role="roles/container.defaultNodeServiceAccount"

    Ganti PROJECT_NUMBER dengan nomor project dari langkah sebelumnya.

Menambahkan node pool ke cluster Standard

Anda dapat menambahkan node pool baru ke cluster GKE Standard menggunakan gcloud CLI, Konsol Google Cloud, atau Terraform. GKE juga mendukung penyediaan otomatis node, yang secara otomatis mengelola node pool di cluster Anda berdasarkan persyaratan penskalaan.

Praktik terbaik:

Buat dan gunakan akun layanan Identity and Access Management (IAM) dengan hak istimewa minimal untuk node pool Anda, bukan akun layanan default Compute Engine. Untuk mengetahui petunjuk cara membuat akun layanan dengan hak istimewa minimal, lihat Meningkatkan keamanan cluster.

gcloud

Untuk membuat node pool, jalankan perintah gcloud container node-pools create:

gcloud container node-pools create POOL_NAME \
    --cluster CLUSTER_NAME \
    --service-account SERVICE_ACCOUNT

Ganti kode berikut:

  • POOL_NAME: nama node pool baru.
  • CLUSTER_NAME: nama cluster yang ada.
  • SERVICE_ACCOUNT: nama akun layanan IAM yang akan digunakan oleh node Anda.

    Sebaiknya tentukan akun layanan IAM dengan hak istimewa minimal yang dapat digunakan node Anda, bukan akun layanan default Compute Engine. Untuk mempelajari cara membuat akun layanan dengan hak istimewa minimal, lihat Menggunakan akun layanan dengan hak istimewa terendah.

    Untuk menentukan akun layanan kustom di gcloud CLI, tambahkan flag berikut ke perintah Anda:

    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

    Ganti SERVICE_ACCOUNT_NAME dengan nama akun layanan dengan hak istimewa minimal.

Untuk daftar lengkap flag opsional yang dapat Anda tentukan, lihat dokumentasi gcloud container node-pools create.

Outputnya mirip dengan hal berikut ini:

Creating node pool POOL_NAME...done.
Created [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/us-central1/clusters/CLUSTER_NAME/nodePools/POOL_NAME].
NAME: POOL_NAME
MACHINE_TYPE: e2-medium
DISK_SIZE_GB: 100
NODE_VERSION: 1.21.5-gke.1302

Dalam output ini, Anda akan melihat detail tentang node pool, seperti jenis mesin dan versi GKE yang berjalan di node.

Terkadang, node pool berhasil dibuat, tetapi waktu tunggu perintah gcloud akan habis, alih-alih melaporkan status dari server. Untuk memeriksa status semua node pool, termasuk yang belum sepenuhnya disediakan, gunakan perintah berikut:

gcloud container node-pools list --cluster CLUSTER_NAME

Konsol

Untuk menambahkan node pool ke cluster Standard yang ada, lakukan langkah-langkah berikut:

  1. Buka halaman Google Kubernetes Engine di Konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Di daftar cluster, klik nama cluster Standar yang ingin Anda ubah.

  3. Klik Add node pool.

  4. Konfigurasikan node pool Anda.

  5. Di menu navigasi, klik Security.

  6. Secara opsional, tentukan akun layanan IAM kustom untuk node Anda:
    1. Di halaman Setelan lanjutan, luaskan bagian Keamanan.
    2. Di menu Service account, pilih akun layanan pilihan Anda.

    Sebaiknya tentukan akun layanan IAM dengan hak istimewa minimal yang dapat digunakan node Anda, bukan akun layanan default Compute Engine. Untuk mempelajari cara membuat akun layanan dengan hak istimewa minimal, lihat Menggunakan akun layanan dengan hak istimewa terendah.

  7. Klik Create untuk menambahkan node pool.

Terraform

Untuk menambahkan node pool ke cluster Standard yang ada menggunakan Terraform, lihat contoh berikut:

resource "google_container_node_pool" "default" {
  name    = "gke-standard-regional-node-pool"
  cluster = google_container_cluster.default.name

  node_config {
    service_account = google_service_account.default.email
  }
}

Untuk mempelajari lebih lanjut cara menggunakan Terraform, lihat Dukungan Terraform untuk GKE.

Melihat node pool di cluster Standard

gcloud

Untuk menampilkan daftar semua node pool cluster Standard, jalankan perintah gcloud container node-pools list:

gcloud container node-pools list --cluster CLUSTER_NAME

Untuk melihat detail tentang node pool tertentu, jalankan perintah gcloud container node-pools describe:

gcloud container node-pools describe POOL_NAME \
    --cluster CLUSTER_NAME

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster.
  • POOL_NAME: nama node pool yang akan dilihat.

Konsol

Untuk melihat node pool cluster Standard, lakukan langkah-langkah berikut:

  1. Buka halaman Google Kubernetes Engine di Konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Di daftar cluster, klik nama cluster Standar.

  3. Klik tab Nodes.

  4. Di bagian Node Pools, klik nama node pool yang ingin Anda lihat.

Menskalakan node pool

Anda dapat menskalakan node pool ke atas atau ke bawah untuk mengoptimalkan performa dan biaya. Dengan node pool GKE Standard, Anda dapat menskalakan node pool secara horizontal dengan mengubah jumlah node dalam node pool, atau menskalakan node pool secara vertikal dengan mengubah konfigurasi atribut mesin node.

Menskalakan secara horizontal dengan mengubah jumlah node

gcloud

Untuk mengubah ukuran node pool cluster, jalankan perintah gcloud container clusters resize:

gcloud container clusters resize CLUSTER_NAME \
    --node-pool POOL_NAME \
    --num-nodes NUM_NODES

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster yang akan diubah ukurannya.
  • POOL_NAME: nama node pool yang akan diubah ukurannya.
  • NUM_NODES: jumlah node dalam kumpulan di cluster zona. Jika Anda menggunakan cluster multi-zona atau regional, NUM_NODES adalah jumlah node untuk setiap zona tempat node pool berada.

Ulangi perintah ini untuk setiap node pool. Jika cluster Anda hanya memiliki satu node pool, hapus flag --node-pool.

Konsol

Untuk mengubah ukuran node pool cluster, lakukan langkah-langkah berikut:

  1. Buka halaman Google Kubernetes Engine di Konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Di daftar cluster, klik nama cluster Standar yang ingin Anda ubah.

  3. Klik tab Nodes.

  4. Di bagian Node Pools, klik nama node pool yang ingin Anda ubah ukurannya.

  5. Klik Resize.

  6. Di kolom Node Pools, masukkan jumlah node yang Anda inginkan dalam node pool, lalu klik Resize.

  7. Ulangi untuk setiap node pool sesuai kebutuhan.

Menskalakan secara vertikal dengan mengubah atribut mesin node

Anda dapat mengubah jenis mesin, jenis disk, dan ukuran disk yang dikonfigurasi di node pool.

Saat Anda mengedit satu atau beberapa atribut mesin ini, GKE akan memperbarui node ke konfigurasi baru menggunakan strategi upgrade yang dikonfigurasi untuk node pool. Jika mengonfigurasi strategi upgrade blue-green, Anda dapat memigrasikan workload dari node asli ke node baru sekaligus melakukan roll back node asli jika migrasi gagal. Periksa setelan upgrade node pool untuk memastikan bahwa strategi yang dikonfigurasi adalah cara yang Anda inginkan untuk mengupdate node.

Perbarui minimal salah satu atribut mesin yang ditandai dalam perintah berikut:

gcloud container node-pools update POOL_NAME \
    --cluster CLUSTER_NAME \
    --machine-type MACHINE_TYPE \
    --disk-type DISK_TYPE \
    --disk-size DISK_SIZE

Hapus tanda apa pun untuk atribut mesin yang tidak ingin Anda ubah. Namun, Anda harus menggunakan minimal satu flag atribut mesin, karena perintah tersebut akan gagal.

Ganti kode berikut:

  • POOL_NAME: nama node pool yang akan diubah ukurannya.
  • CLUSTER_NAME: nama cluster yang akan diubah ukurannya.
  • MACHINE_TYPE: jenis mesin yang akan digunakan untuk node. Untuk mempelajari lebih lanjut, lihat gcloud container node-pools update.
  • DISK_TYPE: jenis disk booting VM node, harus berupa salah satu dari pd-standard, pd-ssd, pd-balanced.
  • DISK_SIZE: ukuran untuk disk booting VM node dalam GB. Setelan defaultnya adalah 100 GB.

Perubahan ini memerlukan pembuatan ulang node, yang dapat menyebabkan gangguan pada workload yang sedang berjalan. Untuk mengetahui detail tentang perubahan spesifik ini, temukan baris yang sesuai dalam tabel perubahan manual yang membuat ulang node menggunakan strategi upgrade node tanpa mematuhi kebijakan pemeliharaan. Untuk mempelajari update node lebih lanjut, lihat Merencanakan gangguan update node.

Mengupgrade node pool

Secara default, node cluster telah mengaktifkan upgrade otomatis. Upgrade otomatis node memastikan bahwa versi node dan panel kontrol cluster Anda tetap sinkron dan sesuai dengan kebijakan ketidaksesuaian versi Kubernetes, yang memastikan bahwa panel kontrol kompatibel dengan node hingga dua versi minor yang lebih lama dari panel kontrol. Misalnya, panel kontrol Kubernetes 1.29 kompatibel dengan node Kubernetes 1.27.

Praktik terbaik:

Jangan nonaktifkan upgrade otomatis node agar cluster Anda mendapatkan manfaat dari upgrade yang tercantum di paragraf sebelumnya.

Dengan upgrade node pool GKE, Anda dapat memilih antara dua strategi upgrade yang dapat dikonfigurasi, yaitu upgrade lonjakan dan upgrade blue-green.

Pilih strategi dan gunakan parameter untuk mengatur strategi agar sesuai dengan kebutuhan lingkungan cluster Anda.

Cara kerja upgrade node

Saat node sedang diupgrade, GKE berhenti menjadwalkan Pod baru pada node tersebut, dan mencoba menjadwalkan Pod yang berjalan ke node lain. Hal ini serupa dengan peristiwa lain yang membuat ulang node, seperti mengaktifkan atau menonaktifkan fitur pada node pool.

Selama upgrade node otomatis atau manual, PodDisruptionBudget (PDB) dan masa tenggang penghentian Pod dipatuhi selama maksimum 1 jam. Jika Pod yang berjalan di node tidak dapat dijadwalkan ke node baru setelah satu jam, GKE akan tetap memulai upgrade. Perilaku ini berlaku meskipun Anda mengonfigurasi PDB agar selalu memiliki semua replika yang tersedia dengan menetapkan kolom maxUnavailable ke 0 atau 0% atau dengan menetapkan kolom minAvailable ke 100% atau ke jumlah replika. Dalam semua skenario ini, GKE akan menghapus Pod setelah satu jam sehingga penghapusan node dapat terjadi.

Praktik terbaik:

Jika workload memerlukan lebih banyak fleksibilitas dengan penghentian yang terkontrol, gunakan upgrade blue-green yang menyediakan setelan waktu perendaman tambahan untuk memperpanjang pemeriksaan PDB melebihi default satu jam.

Untuk mempelajari lebih lanjut hal yang umumnya terjadi selama penghentian node, silakan lihat topik tentang Pod.

Upgrade hanya akan selesai jika semua node telah dibuat ulang dan cluster dalam status yang diinginkan. Saat node yang baru diupgrade didaftarkan dengan panel kontrol, GKE akan menandai node tersebut sebagai dapat dijadwalkan.

Instance node baru menjalankan versi Kubernetes yang diinginkan serta:

Mengupgrade node pool secara manual

Anda dapat mengupgrade versi node pool secara manual agar sesuai dengan versi panel kontrol atau ke versi sebelumnya yang masih tersedia dan kompatibel dengan panel kontrol. Anda dapat mengupgrade beberapa node pool secara paralel secara manual, sedangkan GKE hanya mengupgrade satu node pool secara otomatis dalam satu waktu.

Saat Anda mengupgrade node pool secara manual, GKE akan menghapus label yang Anda tambahkan ke setiap node menggunakan kubectl. Untuk menghindari hal ini, terapkan label ke node pool.

Sebelum Anda mengupgrade node pool secara manual, pertimbangkan kondisi berikut:

  • Mengupgrade node pool dapat mengganggu workload yang berjalan di node pool tersebut. Untuk menghindari hal ini, Anda dapat membuat node pool baru dengan versi yang diinginkan dan memigrasikan workload. Setelah migrasi, Anda dapat menghapus node pool lama.
  • Jika Anda mengupgrade node pool dengan Ingress yang berada dalam status error, grup instance tidak akan disinkronkan. Untuk mengatasi masalah ini, periksa statusnya terlebih dahulu menggunakan perintah kubectl get ing. Jika grup instance tidak disinkronkan, Anda dapat mengatasi masalah ini dengan menerapkan kembali manifes yang digunakan untuk membuat ingress.

Anda dapat mengupgrade node pool secara manual ke versi yang kompatibel dengan panel kontrol, menggunakan Konsol Google Cloud atau Google Cloud CLI.

gcloud

Variabel berikut digunakan dalam perintah di bagian ini:

  • CLUSTER_NAME: nama cluster node pool yang akan diupgrade.
  • NODE_POOL_NAME: nama node pool yang akan diupgrade.
  • VERSION: versi Kubernetes tempat node diupgrade. Misalnya, --cluster-version=1.7.2 atau cluster-version=latest.

Mengupgrade node pool:

gcloud container clusters upgrade CLUSTER_NAME \
  --node-pool=NODE_POOL_NAME

Untuk menentukan versi GKE yang berbeda pada node, gunakan flag --cluster-version yang bersifat opsional:

gcloud container clusters upgrade CLUSTER_NAME \
  --node-pool=NODE_POOL_NAME \
  --cluster-version VERSION

Untuk mengetahui informasi selengkapnya tentang cara menentukan versi, silakan melihat Pembuatan versi.

Untuk informasi selengkapnya, silakan melihat dokumentasi gcloud container clusters upgrade.

Konsol

Untuk mengupgrade node pool menggunakan Konsol Google Cloud, lakukan langkah-langkah berikut:

  1. Buka halaman Google Kubernetes Engine di Konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Di samping cluster yang ingin diedit, klik Actions, lalu klik Edit.

  3. Di halaman Cluster details, klik tab Nodes.

  4. Di bagian Node Pools, klik nama node pool yang ingin Anda upgrade.

  5. Klik Edit.

  6. Klik Change di bagian Node version.

  7. Pilih versi yang diinginkan dari menu drop-down Node version, lalu klik Change.

Mungkin perlu waktu beberapa menit untuk mengubah versi node.

Men-deploy Pod ke node pool tertentu

Anda dapat secara eksplisit men-deploy Pod ke node pool tertentu menggunakan nodeSelector di manifes Pod. nodeSelector menjadwalkan Pod ke node dengan label yang cocok.

Semua node pool GKE memiliki label dengan format berikut: cloud.google.com/gke-nodepool: POOL_NAME. Tambahkan label ini ke kolom nodeSelector di Pod Anda seperti yang ditunjukkan pada contoh berikut:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    cloud.google.com/gke-nodepool: POOL_NAME

Untuk informasi selengkapnya, baca bagian Menetapkan Pod ke Node.

Sebagai alternatif pemilih node, Anda dapat menggunakan afinitas node. Gunakan afinitas node jika Anda menginginkan aturan "lunak" ketika Pod mencoba memenuhi batasan, tetapi tetap dijadwalkan meskipun batasan tidak dapat dipenuhi. Untuk mengetahui informasi selengkapnya, lihat Afinitas node. Anda juga dapat menentukan permintaan resource untuk container.

Men-downgrade node pool

Anda dapat mendowngrade node pool, misalnya, untuk memitigasi upgrade node pool yang tidak berhasil. Tinjau batasan sebelum mendowngrade node pool.

Praktik terbaik:

Gunakan strategi upgrade node blue-green jika Anda perlu mengoptimalkan mitigasi risiko untuk upgrade node pool yang memengaruhi workload Anda. Dengan strategi ini, Anda dapat me-rollback upgrade yang sedang berlangsung, agar dikembalikan ke node asli jika upgrade tidak berhasil.

  1. Tetapkan pengecualian pemeliharaan untuk cluster guna mencegah agar node pool tidak diupgrade secara otomatis oleh GKE setelah didowngrade.
  2. Untuk mendowngrade node pool, tentukan versi yang lebih lama sambil mengikuti petunjuk untuk Mengupgrade node pool secara manual.

Menghapus node pool

Menghapus node pool akan menghapus node dan semua workload yang berjalan, tanpa mempertimbangkan setelan PodDisruptionBudget. Untuk mempelajari lebih lanjut pengaruhnya terhadap workload Anda, termasuk interaksi dengan pemilih node, lihat Menghapus node pool.

gcloud

Untuk menghapus node pool, jalankan perintah gcloud container node-pools delete:

gcloud container node-pools delete POOL_NAME \
    --cluster CLUSTER_NAME

Konsol

Untuk menghapus node pool, lakukan langkah-langkah berikut:

  1. Buka halaman Google Kubernetes Engine di Konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Di daftar cluster, klik nama cluster Standar yang ingin Anda ubah.

  3. Klik tab Nodes.

  4. Di bagian Node Pools, klik di samping node pool yang ingin Anda hapus.

  5. Saat diminta untuk mengonfirmasi, klik Delete.

Memigrasikan node ke jenis mesin yang berbeda

Untuk mempelajari berbagai pendekatan dalam memindahkan workload antarjenis mesin, misalnya, untuk bermigrasi ke jenis mesin yang lebih baru, lihat Memigrasikan node ke jenis mesin yang berbeda.

Memigrasikan workload antar-node pool

Untuk memigrasikan workload dari satu node pool ke node pool lain, lihat Memigrasikan workload antar-node pool. Misalnya, Anda dapat menggunakan petunjuk ini jika mengganti node pool yang ada dengan node pool baru dan ingin memastikan bahwa workload dipindahkan ke node baru dari node yang ada.

Memecahkan masalah

Untuk mengetahui informasi pemecahan masalah, lihat Memecahkan masalah node pool Standar dan Memecahkan masalah pendaftaran node.

Langkah berikutnya