Menskalakan cluster pengguna

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

  1. Dari direktori anthos-aws, gunakan anthos-gke untuk mengganti konteks ke layanan pengelolaan Anda.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Untuk mengaktifkan Cluster Autoscaler, Anda mengedit manifes untuk AWSNodePool. Edit file cluster-0.yaml dan temukan bagian AWSNodePool. Ubah nilai untuk spec.minNodeCount dan spec.maxNodeCount.

    Contoh di bawah ini mempertahankan ukuran minimum kumpulan node ini pada 3 node, tetapi memungkinkan Cluster Autoscaler meningkatkan ukurannya menjadi 10 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
      ...
    
  3. Selanjutnya, terapkan YAML untuk mengubah ukuran node pool.

    env HTTPS_PROXY=http://localhost:8118 \
        kubectl apply -f cluster-0.yaml
    
  4. Resource AWSNodePool akan bertransisi ke status Resizing. Setelah penskalaan AWSNodePool selesai, AWSNodePool akan berpindah ke status Provisioned.

    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.

  1. 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
    
  2. 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 
    
  3. 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.