Untuk menskalakan workload di GKE di AWS, Anda dapat mengonfigurasi AWSNodePools agar menskalakan secara otomatis, atau membuat dan menghapus AWSNodePools secara manual untuk menskalakan.
Autoscaler Cluster
GKE di AWS menerapkan Cluster Autoscaler Kubernetes. Saat permintaan pada node Anda tinggi, Autoscaler Cluster akan menambahkan node ke node pool. Jika permintaan rendah, Cluster Autoscaler akan melakukan penskalaan kembali ke ukuran minimum yang Anda tentukan. Hal ini dapat meningkatkan ketersediaan workload saat Anda membutuhkannya sekaligus mengontrol biaya.
Ringkasan
Cluster Autoscaler secara otomatis mengubah ukuran jumlah node dalam node pool tertentu, berdasarkan permintaan workload Anda. Anda tidak perlu menambahkan atau menghapus node secara manual atau menyediakan node pool secara berlebihan. Sebagai gantinya, tentukan ukuran minimum dan maksimum untuk node pool, dan cluster akan menskalakan secara otomatis.
Jika resource dihapus atau dipindahkan saat melakukan penskalaan otomatis cluster, workload Anda mungkin mengalami gangguan sementara. Misalnya, jika workload Anda terdiri dari satu replika, Pod replika tersebut dapat dijadwalkan ulang ke node yang berbeda jika node-nya saat ini dihapus. Sebelum mengaktifkan Cluster Autoscaler di AWSNodePool, desain workload Anda untuk menoleransi potensi gangguan atau pastikan Pod penting tidak terganggu.
Cara Kerja Cluster Autoscaler
Cluster Autoscaler bekerja berdasarkan per node pool. Saat membuat node pool, Anda menentukan ukuran minimum dan maksimum untuk node pool di resource Kubernetes AWSNodePool.
Anda dapat menonaktifkan Cluster Autoscaler dengan menyetel spec.minNodeCount
agar sama dengan spec.maxNodeCount
di AWSNodePools.
Autoscaler Cluster meningkatkan atau mengurangi ukuran node pool secara otomatis, berdasarkan permintaan resource (bukan penggunaan resource sebenarnya) Pod yang berjalan di node pool tersebut. SDK ini secara berkala memeriksa status Pod dan node, serta mengambil tindakan:
Jika Pod tidak dapat dijadwalkan karena jumlah node dalam kumpulan node tidak mencukupi, Autoscaler Cluster akan menambahkan node, hingga ukuran maksimum kumpulan node. Jika node kurang dimanfaatkan, dan semua Pod masih dapat dijadwalkan bahkan dengan lebih sedikit node dalam kumpulan node, Autoscaler Cluster akan menghapus node, hingga ke ukuran minimum kumpulan node. Jika node tidak dapat dikosongkan dengan baik setelah periode waktu tunggu (10 menit), node akan dihentikan secara paksa. Masa tenggang tidak dapat dikonfigurasi.
Jika Pod Anda meminta terlalu sedikit resource (misalnya, jika default tidak mencukupi), Autoscaler Cluster tidak akan memperbaiki situasi ini. Anda dapat membantu memastikan Cluster Autoscaler berfungsi seakurat mungkin dengan membuat permintaan resource yang memadai untuk semua workload Anda.
Kriteria Operasi
Autoscaler Cluster membuat asumsi berikut saat mengubah ukuran kumpulan node:
Semua Pod yang direplikasi dapat dimulai ulang di beberapa node lain, dan mungkin menyebabkan gangguan singkat. Jika layanan Anda tidak toleran terhadap gangguan, sebaiknya jangan gunakan Cluster Autoscaler.
Semua node dalam satu kumpulan node memiliki kumpulan label yang sama.
Jika Anda memiliki AWSNodePool dengan jenis instance yang berbeda, Cluster Autoscaler akan mempertimbangkan biaya relatif untuk meluncurkan node baru, dan berupaya memperluas node pool yang paling murah.
Label yang ditambahkan secara manual setelah pembuatan cluster awal atau kumpulan node tidak akan dilacak. Node yang dibuat oleh Cluster Autoscaler akan diberi label yang ditentukan dengan --node-labels pada saat pembuatan node pool.
Mengubah Ukuran Node Pool
AWSNodePool mencakup kolom minNodeCount
dan maxNodeCount
. Kolom ini mendeklarasikan jumlah minimum dan maksimum node pekerja dalam kumpulan. Anda dapat mengedit nilai ini sebelum atau
setelah AWSNodePool dibuat.
Sebelum memulai
Sediakan cluster menggunakan petunjuk di
Membuat cluster pengguna. Siapkan file YAML (misalnya, cluster-0.yaml
) yang membuat cluster.
Mengaktifkan penskalaan otomatis node pool
Dari direktori
anthos-aws
, gunakananthos-gke
untuk mengganti konteks ke layanan pengelolaan Anda.cd anthos-aws anthos-gke aws management get-credentials
Untuk mengaktifkan Cluster Autoscaler, Anda mengedit manifes untuk AWSNodePool. Edit file
cluster-0.yaml
dan temukan bagian AWSNodePool. Ubah nilai untukspec.minNodeCount
danspec.maxNodeCount
.Contoh di bawah ini mempertahankan ukuran minimum kumpulan node ini pada
3
node, tetapi memungkinkan Cluster Autoscaler meningkatkan ukurannya menjadi10
node.apiVersion: multicloud.cluster.gke.io/v1 kind: AWSNodePool metadata: name: cluster-0-pool-0 spec: clusterName: cluster-0 version: 1.25.5-gke.2100 minNodeCount: 3 maxNodeCount: 10 ...
Selanjutnya, terapkan YAML untuk mengubah ukuran node pool.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f cluster-0.yaml
Resource AWSNodePool akan bertransisi ke status
Resizing
. Setelah penskalaan AWSNodePool selesai, AWSNodePool akan berpindah ke statusProvisioned
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get AWSNodePools
Output menunjukkan bahwa AWSNodePool adalah
Resizing
. Operasi pengubahan ukuran memerlukan waktu beberapa menit hingga selesai.NAME CLUSTER STATE AGE VERSION cluster-0-pool-0 cluster-0 Resizing 3h 1.25.5-gke.2100
Membuat AWSNodePool baru secara manual
Anda juga dapat menskalakan cluster dengan membuat AWSNodePool baru. Saat membuat AWSNodePool baru, Anda juga dapat meningkatkan atau menurunkan skala ukuran instance.
Anda dapat mengambil manifes konfigurasi AWSNodePool yang ada dengan
kubectl get
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get awsnodepool cluster-0-pool-0 -o yaml > new_nodepool.yaml
Edit
new_nodepool.yaml
dan hapus bagian yang tidak ada dalam contoh berikut. Simpan file.apiVersion: multicloud.cluster.gke.io/v1 kind: AWSNodePool metadata: name: NODE_POOL_NAME spec: clusterName: AWSCLUSTER_NAME version: CLUSTER_VERSION # latest version is 1.25.5-gke.2100 region: AWS_REGION subnetID: AWS_SUBNET_ID minNodeCount: MINIMUM_NODE_COUNT maxNodeCount: MAXIMUM_NODE_COUNT maxPodsPerNode: MAXIMUM_PODS_PER_NODE_COUNT instanceType: AWS_NODE_TYPE keyName: KMS_KEY_PAIR_NAME iamInstanceProfile: NODE_IAM_PROFILE proxySecretName: PROXY_SECRET_NAME rootVolume: sizeGiB: ROOT_VOLUME_SIZE volumeType: VOLUME_TYPE # Optional iops: IOPS # Optional kmsKeyARN: NODE_VOLUME_KEY # Optional
Untuk membuat AWSNodePool baru, terapkan manifes ke cluster pengelolaan Anda.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f new_nodepool.yaml
Langkah berikutnya
Men-deploy layanan yang didukung oleh Ingress.
Untuk melihat opsi tambahan, baca dokumentasi referensi tentang AWSNodePool.