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
dari node pool.Semua node dalam satu kumpulan node memiliki kumpulan label yang sama.
Cara kerja penskalaan otomatis cluster
Autoscaler cluster bekerja berdasarkan kumpulan node. Saat mengaktifkan penskalaan otomatis untuk kumpulan node, Anda menentukan jumlah minimum dan maksimum node untuk kumpulan tersebut.
Autoscaler cluster meningkatkan atau mengurangi jumlah node dalam kumpulan 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 kumpulan tidak mencukupi, autoscaler cluster akan menambahkan node, hingga maksimum yang ditentukan.
Jika node kurang dimanfaatkan, dan semua Pod masih dapat dijadwalkan dengan lebih sedikit node dalam kumpulan, autoscaler cluster akan menghapus node, hingga ke minimum yang ditentukan. Jika node tidak dapat dikosongkan dengan baik, node akan dihentikan secara paksa, dan disk yang terpasang dan dikelola Kubernetes akan dilepaskan 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 tersebut. Anda dapat membantu memastikan bahwa autoscaler cluster berfungsi secara akurat dengan membuat permintaan resource eksplisit untuk semua workload Anda.
Untuk setiap node pool, minReplicas
harus ≥ 1. Namun, jumlah
node cluster pengguna yang tidak tercemar pada waktu tertentu harus minimal 3. Ini
berarti jumlah nilai minReplicas
untuk semua kumpulan node yang diskalakan secara otomatis, ditambah
jumlah nilai minReplicas
untuk semua kumpulan node yang tidak diskalakan secara otomatis, harus setidaknya
3.replicas
Autoscaler cluster mempertimbangkan biaya relatif jenis instance di berbagai kumpulan node, dan berupaya memperluas kumpulan node dengan cara yang menyebabkan pemborosan seminimal mungkin.
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 diskalakan ke 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 node. 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
Untuk mengaktifkan penskalaan otomatis untuk node pool di cluster yang 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 autoscaler cluster
Anda dapat menentukan tindakan autoscaler cluster dengan beberapa cara.
Memeriksa log autoscaler 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 autoscaler cluster.
Memeriksa peta konfigurasi
Autoscaler cluster 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 digunakan)
- Pada node
- Pada peta konfigurasi
kube-system/cluster-autoscaler-status
.
Batasan
Autoscaler cluster memiliki batasan berikut:
Penjadwalan kustom dengan filter yang diubah tidak didukung.
Node tidak ditingkatkan skalanya jika Pod memiliki nilai
PriorityClass
di bawah-10
. Pelajari lebih lanjut di Bagaimana cara kerja Autoscaler Cluster dengan Prioritas dan Preemption Pod?.Penskalaan 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 mendownscale cluster, lihat Gangguan dan penjadwalan Pod. Anda mungkin harus menambahkan
PodDisruptionBudget
untuk Podkube-system
. Untuk mengetahui 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 diperkecil skalanya.
Informasi selengkapnya
Untuk informasi selengkapnya tentang autoscaler cluster dan mencegah gangguan, lihat pertanyaan berikut di FAQ 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?