Dokumen ini menjelaskan penskalaan otomatis untuk cluster pengguna di Google Distributed Cloud.
Penskalaan otomatis cluster meningkatkan atau mengurangi jumlah node dalam kumpulan node berdasarkan permintaan workload Anda.
Sebelum memulai
Baca batasan autoscaler cluster.
Autoscaler cluster membuat asumsi berikut:
Semua Pod yang direplikasi dapat dimulai ulang di beberapa node lain, yang mungkin menyebabkan gangguan singkat. Jika layanan Anda tidak dapat mentoleransi gangguan, sebaiknya jangan gunakan autoscaler cluster.
Pengguna atau administrator tidak mengelola node secara manual. Jika penskalaan otomatis diaktifkan untuk node pool, Anda tidak dapat mengganti kolom
replicas
node pool.Semua node dalam satu kumpulan node memiliki kumpulan label yang sama.
Cara kerja penskalaan otomatis cluster
Autoscaler cluster bekerja berdasarkan node pool. Saat mengaktifkan penskalaan otomatis untuk node pool, Anda menentukan jumlah minimum dan maksimum node untuk pool.
Autoscaler cluster meningkatkan atau mengurangi jumlah node dalam pool secara otomatis, berdasarkan permintaan resource (bukan penggunaan resource sebenarnya) Pod yang berjalan di node. SDK ini secara berkala memeriksa status Pod dan node, serta mengambil tindakan:
Jika Pod tidak dapat dijadwalkan karena jumlah node dalam pool tidak mencukupi, autoscaler cluster akan menambahkan node, hingga maksimum yang ditentukan.
Jika node kurang dimanfaatkan, dan semua Pod dapat dijadwalkan dengan lebih sedikit node dalam kumpulan, autoscaler cluster akan menghapus node, hingga ke minimum yang ditentukan. Jika node tidak dapat dikuras dengan baik, node akan dihentikan secara paksa, dan disk yang dikelola Kubernetes yang terpasang akan dilepas dengan aman.
Jika Pod Anda meminta terlalu sedikit resource (atau default belum diubah, yang mungkin tidak mencukupi) dan node Anda mengalami kekurangan, autoscaler cluster tidak akan memperbaiki situasi ini. Anda dapat membantu memastikan autoscaler cluster berfungsi secara akurat dengan membuat permintaan resource eksplisit untuk semua workload Anda.
Untuk node pool individual, minReplicas
harus ≥ 1. Namun, jumlah
node cluster pengguna yang tidak tercemar pada waktu tertentu harus minimal 3. Artinya, jumlah nilai minReplicas
untuk semua node pool yang diskalakan otomatis, ditambah jumlah nilai minReplicas
untuk semua node pool yang tidak diskalakan otomatis, harus minimal 3.replicas
Autoscaler cluster mempertimbangkan biaya relatif jenis instance di berbagai kumpulan node, dan berupaya memperluas kumpulan node dengan cara yang menyebabkan paling sedikit pemborosan.
Membuat cluster pengguna dengan penskalaan otomatis
Untuk membuat cluster pengguna dengan penskalaan otomatis yang diaktifkan untuk node pool, isi bagian
autoscaling
untuk node pool dalam file konfigurasi cluster pengguna. Contoh:
nodePools: - name: pool‐1 … replicas: 3 ... autoscaling: minReplicas: 1 maxReplicas: 5
Konfigurasi sebelumnya membuat node pool dengan 3 replika, dan menerapkan penskalaan otomatis dengan ukuran node pool minimum 1 dan ukuran node pool maksimum 5.
Nilai minReplicas
harus ≥ 1. Node pool tidak dapat diperkecil skalanya menjadi nol node.
Menambahkan node pool dengan penskalaan otomatis
Untuk menambahkan node pool dengan penskalaan otomatis ke cluster yang sudah ada:
Edit file konfigurasi cluster pengguna untuk menambahkan kumpulan node baru, dan sertakan bagian
autoscaling
untuk kumpulan tersebut. Tetapkan nilaireplicas
,minReplicas
, danmaxReplicas
sesuai keinginan. Contoh:nodePools: - name: my-new-node-pool … replicas: 3 ... autoscaling: minReplicas: 2 maxReplicas: 6
Update cluster:
gkectl update cluster --config USER_CLUSTER_CONFIG \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Mengaktifkan penskalaan otomatis untuk node pool yang sudah ada
Guna mengaktifkan penskalaan otomatis untuk node pool di cluster yang sudah ada:
Edit
nodePool
tertentu dalam file konfigurasi cluster pengguna, dan sertakan bagianautoscaling
. Tetapkan nilaiminReplicas
danmaxReplicas
sesuai keinginan.nodePools: - name: my-existing-node-pool … replicas: 3 ... autoscaling: minReplicas: 1 maxReplicas: 5
Update cluster:
gkectl update cluster --config USER_CLUSTER_CONFIG \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Menonaktifkan penskalaan otomatis untuk node pool yang sudah ada
Untuk menonaktifkan penskalaan otomatis bagi node pool tertentu:
Edit file konfigurasi cluster pengguna dan hapus bagian
autoscaling
untuk kumpulan node tersebut.Jalankan
gkectl update cluster
.
Memeriksa perilaku penskalaan otomatis cluster
Anda dapat menentukan apa yang dilakukan autoscaler cluster dengan beberapa cara.
Memeriksa log penskalaan otomatis cluster
Pertama, temukan nama Pod autoscaler cluster:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods -n USER_CLUSTER_NAME | grep cluster-autoscaler
Periksa log di Pod autoscaler cluster:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG logs cluster-autoscaler-POD_NAME --container cluster-autoscaler -n USER_CLUSTER_NAME
Ganti POD_NAME dengan nama Pod penskala otomatis cluster.
Memeriksa peta konfigurasi
Cluster autoscaler memublikasikan peta konfigurasi kube-system/cluster-autoscaler-status
.
Untuk melihat peta konfigurasi:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get configmap cluster-autoscaler-status -n kube-system -o yaml
Periksa peristiwa penskalaan otomatis cluster.
Anda dapat memeriksa peristiwa penskalaan otomatis cluster:
- Pada pod (terutama yang tidak dapat dijadwalkan, atau pada node yang kurang dimanfaatkan)
- Pada node
- Di peta konfigurasi
kube-system/cluster-autoscaler-status
.
Batasan
Autoscaler cluster memiliki batasan berikut:
Penjadwalan kustom dengan filter yang diubah tidak didukung.
Node tidak akan ditingkatkan skalanya jika Pod memiliki nilai
PriorityClass
di bawah-10
. Pelajari lebih lanjut di Bagaimana cara kerja Autoscaler Cluster dengan Prioritas dan Preemption Pod?.Ppenskalaan otomatis untuk node pool Windows tidak didukung.
Pemecahan masalah
Terkadang, autoscaler cluster tidak dapat menurunkan skala sepenuhnya dan ada node tambahan setelah menurunkan skala. Hal ini dapat terjadi jika Pod sistem yang diperlukan dijadwalkan ke node lain, karena tidak ada pemicu bagi Pod tersebut untuk dipindahkan ke node lain. Lihat Saya memiliki beberapa node dengan pemakaian rendah, tetapi tidak diperkecil skalanya. Mengapa demikian?. Untuk mengatasi batasan ini, Anda dapat mengonfigurasi anggaran gangguan Pod.
Jika Anda mengalami masalah saat menurunkan skala cluster, lihat Penjadwalan dan gangguan Pod. Anda mungkin harus menambahkan
PodDisruptionBudget
untuk Podkube-system
. Untuk informasi selengkapnya tentang menambahkanPodDisruptionBudget
secara manual untuk Podkube-system
, lihat FAQ tentang autoscaler cluster Kubernetes.Saat menurunkan skala, autoscaler cluster akan mengikuti aturan penjadwalan dan penghapusan yang ditetapkan di Pod. Pembatasan ini dapat mencegah node dihapus oleh autoscaler. Penghapusan node dapat dicegah jika node tersebut berisi Pod dengan salah satu kondisi berikut:
Aturan afinitas atau anti-afinitas Pod mencegah penjadwalan ulang.
Pod memiliki penyimpanan lokal.
Pod tidak dikelola oleh pengontrol seperti Deployment, StatefulSet, Job, atau ReplicaSet.
Pod berada di namespace kube-system dan tidak memiliki PodDisruptionBudget
PodDisruptionBudget aplikasi dapat mencegah penskalaan otomatis. Jika penghapusan node akan menyebabkan anggaran terlampaui, cluster tidak akan diturunkan skalanya.
Informasi selengkapnya
Untuk informasi selengkapnya tentang autoscaler cluster dan mencegah gangguan, lihat pertanyaan berikut di FAQ tentang autoscaler cluster Kubernetes:
- Bagaimana cara kerja penurunan skala?
- Apakah autoscaler Cluster dapat digunakan dengan PodDisruptionBudget dalam penurunan skala?
- Jenis Pod apa yang dapat mencegah autoscaler Cluster menghapus node?