Dokumen ini menjelaskan penskalaan otomatis untuk cluster pengguna di Google Distributed Cloud.
Penskalaan otomatis cluster menambah atau mengurangi jumlah node dalam kumpulan node berdasarkan permintaan workload Anda.
Sebelum memulai
Baca tentang batasan autoscaler cluster.
Penskala otomatis cluster membuat asumsi berikut:
Semua Pod yang direplikasi dapat dimulai ulang di beberapa node lain, yang dapat menyebabkan gangguan singkat. Jika layanan Anda tidak dapat menoleransi gangguan, kami tidak sebaiknya gunakan autoscaler cluster.
Pengguna atau administrator tidak mengelola node secara manual. Jika penskalaan otomatis diaktifkan untuk kumpulan node, Anda tidak dapat mengganti kolom
replicas
dari node kolam renang.Semua node dalam satu kumpulan node memiliki kumpulan label yang sama.
Cara kerja penskalaan otomatis cluster
Penskala otomatis cluster bekerja berdasarkan kumpulan node. Saat Anda mengaktifkan penskalaan otomatis untuk kumpulan node, Anda dapat menentukan jumlah node minimum dan maksimum untuk kumpulan tersebut.
Penskala otomatis cluster menambah atau mengurangi jumlah node dalam kumpulan secara otomatis, berdasarkan permintaan sumber daya (bukan sumber daya aktual utilisasi) atas Pod yang berjalan di node. Secara berkala memeriksa status Pod dan node, lalu mengambil tindakan:
Jika Pod tidak dapat dijadwalkan karena jumlah node dalam kumpulan tidak cukup, autoscaler cluster akan menambahkan node, hingga jumlah 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 jumlah yang ditentukan minimum. Jika sebuah node tidak dapat dikeringkan dengan baik, node akan dipaksa dihentikan, dan disk yang dikelola Kubernetes yang terpasang dilepas dengan aman.
Jika Pod Anda meminta terlalu sedikit resource (atau belum mengubah default-nya, (mungkin tidak mencukupi) dan {i>node<i} Anda mengalami kekurangan, yaitu cluster autoscaler tidak dapat memperbaiki situasi tersebut. Anda dapat membantu memastikan bahwa autoscaler cluster bekerja secara akurat dengan membuat permintaan resource eksplisit untuk semua workload Anda.
Untuk kumpulan node individual, minReplicas
harus ≥ 1. Namun, jumlah
node cluster pengguna yang tidak diwarnai pada waktu tertentu harus minimal 3. Ini
berarti jumlah nilai minReplicas
untuk semua kumpulan node yang diskalakan otomatis, ditambah
jumlah nilai replicas
untuk semua kumpulan node yang tidak diskalakan secara otomatis,
minimal 3.
Penskala otomatis cluster mempertimbangkan biaya relatif dari jenis instance berbagai kumpulan node, dan mencoba memperluas kumpulan node menghasilkan limbah yang seminimal mungkin.
Membuat cluster pengguna dengan penskalaan otomatis
Untuk membuat cluster pengguna dengan penskalaan otomatis yang diaktifkan untuk kumpulan node, isi kolom
autoscaling
untuk kumpulan node pada file konfigurasi cluster pengguna. Contoh:
nodePools: - name: pool‐1 … replicas: 3 ... autoscaling: minReplicas: 1 maxReplicas: 5
Konfigurasi sebelumnya membuat kumpulan node dengan 3 replika, dan menerapkan penskalaan otomatis dengan ukuran kumpulan node minimum 1 dan ukuran kumpulan node maksimum sebagai 5.
Nilai minReplicas
harus ≥ 1. Kumpulan node tidak dapat diperkecil hingga nol
node.
Menambahkan kumpulan node dengan penskalaan otomatis
Untuk menambahkan node pool dengan penskalaan otomatis ke cluster yang sudah ada:
Mengedit file konfigurasi cluster pengguna untuk menambahkan node pool baru, dan menyertakan bagian
autoscaling
untuk kolam renang. 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 kumpulan node yang ada
Guna mengaktifkan penskalaan otomatis untuk kumpulan node dalam cluster yang ada:
Mengedit
nodePool
tertentu di file konfigurasi cluster pengguna, dan menyertakan 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 kumpulan node yang 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 mengetahui tindakan yang dilakukan autoscaler cluster dengan beberapa cara.
Memeriksa log autoscaler cluster
Pertama, cari nama cluster autoscaler Pod:
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 kube-system/cluster-autoscaler-status
peta konfigurasi.
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
- Pada config map
kube-system/cluster-autoscaler-status
.
Batasan
Penskala otomatis cluster memiliki batasan berikut:
Penjadwalan kustom dengan perubahan filter tidak didukung.
Node tidak dapat meningkatkan skala jika Pod memiliki
PriorityClass
nilai di bawah-10
. Pelajari lebih lanjut di Bagaimana cara kerja Cluster Autoscaler 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 dalam menurunkan skala cluster, lihat Penjadwalan dan gangguan pod. Anda mungkin harus menambahkan
PodDisruptionBudget
untuk Podkube-system
. Sebagai informasi selengkapnya tentang cara menambahkanPodDisruptionBudget
secara manual untukkube-system
Pod, lihat FAQ autoscaler cluster Kubernetes.Saat memperkecil skala, autoscaler cluster mematuhi aturan penjadwalan dan penghapusan yang ditetapkan pada Pod. Pembatasan ini dapat mencegah node dihapus oleh autoscaler. Penghapusan node dapat dicegah jika node tersebut berisi Pod dengan salah satu kondisi berikut:
Pod afinitas atau anti-afinitas mencegah penjadwalan ulang.
Pod memiliki penyimpanan lokal.
Pod tidak dikelola oleh pengontrol seperti Deployment, StatefulSet, Job, atau ReplicaSet.
Pod berada di namespace sistem kube dan tidak memiliki PodDisruptionBudget
PodDisruptionBudget aplikasi mungkin mencegah penskalaan otomatis. Jika menghapus node akan menyebabkan anggaran terlampaui, cluster tidak akan diturunkan skalanya.
Informasi selengkapnya
Untuk informasi selengkapnya tentang autoscaler cluster dan cara mencegah gangguan, lihat pertanyaan berikut dalam FAQ cluster 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?