Untuk menskalakan workload di GKE pada AWS, Anda dapat mengonfigurasi AWSNodePools agar dapat menskalakan secara otomatis, atau membuat dan menghapus AWSNodePools secara manual untuk meningkatkan atau menurunkan skala.
Autoscaler Cluster
GKE di AWS mengimplementasikan Cluster Autoscaler Kubernetes. Saat permintaan pada node Anda tinggi, Autoscaler Cluster akan menambahkan node ke kumpulan node. Saat permintaan rendah, Autoscaler Cluster memperkecil skala ke ukuran minimum yang Anda tentukan. Hal ini dapat meningkatkan ketersediaan workload saat Anda membutuhkannya sekaligus mengontrol biaya.
Ringkasan
Autoscaler Cluster secara otomatis mengubah ukuran jumlah node dalam kumpulan node tertentu, berdasarkan permintaan workload Anda. Anda tidak perlu menambahkan atau menghapus node secara manual atau menyediakan kumpulan node secara berlebihan. Sebagai gantinya, Anda harus menentukan ukuran minimum dan maksimum untuk kumpulan node, dan cluster akan diskalakan secara otomatis.
Jika resource dihapus atau dipindahkan saat melakukan penskalaan otomatis cluster, workload Anda mungkin mengalami gangguan sementara. Misalnya, jika beban kerja Anda terdiri dari satu replika, Pod replika tersebut mungkin dijadwalkan ulang ke node yang berbeda jika node-nya saat ini dihapus. Sebelum mengaktifkan Cluster Autoscaler di AWSNodePool, desain workload Anda agar dapat menoleransi potensi gangguan atau memastikan Pod penting tidak terganggu.
Cara Kerja Autoscaler Cluster
Autoscaler Cluster bekerja berdasarkan kumpulan per node. Saat membuat kumpulan node, Anda menentukan ukuran minimum dan maksimum kumpulan node di resource Kubernetes AWSNodePool.
Anda dapat menonaktifkan Cluster Autoscaler dengan menetapkan spec.minNodeCount
ke sama dengan spec.maxNodeCount
di AWSNodePools Anda.
Autoscaler Cluster meningkatkan atau mengurangi ukuran kumpulan node secara otomatis, berdasarkan permintaan resource (bukan pemanfaatan resource sebenarnya) dari Pod yang berjalan di node kumpulan node tersebut. Pod memeriksa status Pod dan node secara berkala, serta mengambil tindakan:
Jika Pod tidak dapat dijadwalkan karena node dalam kumpulan node tidak mencukupi, Cluster Autoscaler akan menambahkan node, hingga ukuran maksimum kumpulan node. Jika node kurang dimanfaatkan, dan semua Pod dapat dijadwalkan bahkan dengan node yang lebih sedikit di kumpulan node, Cluster Autoscaler 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 meminta terlalu sedikit resource (misalnya, jika default tidak memadai), Cluster Autoscaler tidak dapat 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 menoleransi gangguan, sebaiknya jangan gunakan Cluster Autoscaler.
Semua node dalam satu kumpulan node memiliki kumpulan label yang sama.
Jika Anda memiliki AWSNodePools dengan jenis instance yang berbeda, Cluster Autoscaler mempertimbangkan biaya relatif untuk meluncurkan node baru, dan berupaya memperluas kumpulan node yang paling murah.
Label yang ditambahkan secara manual setelah pembuatan cluster awal atau kumpulan node tidak akan dilacak. Node yang dibuat oleh Autoscaler Cluster diberi label yang ditentukan dengan --node-labels pada saat pembuatan kumpulan node.
Mengubah Ukuran Kumpulan Node
AWSNodePool mencakup
kolom minNodeCount
dan maxNodeCount
. Kolom ini mendeklarasikan jumlah minimum dan
maksimum worker node dalam kumpulan. Anda dapat mengedit nilai ini sebelum atau setelah AWSNodePool dibuat.
Sebelum memulai
Sediakan cluster menggunakan petunjuk dalam Membuat cluster pengguna. Memiliki file YAML (misalnya, cluster-0.yaml
) yang membuat cluster yang tersedia.
Mengaktifkan penskalaan kumpulan node otomatis
Dari direktori
anthos-aws
, gunakananthos-gke
untuk mengalihkan konteks ke layanan pengelolaan Anda.cd anthos-aws anthos-gke aws management get-credentials
Untuk mengaktifkan Cluster Autoscaler, edit manifes untuk AWSNodePool Anda. Edit file
cluster-0.yaml
dan cari bagian AWSNodePool. Ubah nilai untukspec.minNodeCount
danspec.maxNodeCount
.Contoh di bawah ini mempertahankan ukuran minimum kumpulan node ini pada node
3
, tetapi memungkinkan Autoscaler Cluster meningkatkan ukurannya menjadi node10
.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 kumpulan node.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f cluster-0.yaml
Resource AWSNodePool akan bertransisi ke status
Resizing
. Setelah AWSNodePool menyelesaikan penskalaan, penskalaan akan berpindah ke statusProvisioned
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get AWSNodePools
Output-nya menunjukkan bahwa AWSNodePool adalah
Resizing
. Operasi pengubahan ukuran memerlukan waktu beberapa menit untuk diselesaikan.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 AWSNodePools 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 selanjutnya
Deploy layanan yang didukung oleh Ingress.
Untuk melihat opsi tambahan, baca dokumentasi referensi tentang AWSNodePool.