Menskalakan cluster pengguna

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

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

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

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

    Contoh di bawah ini mempertahankan ukuran minimum kumpulan node ini pada node 3, tetapi memungkinkan Autoscaler Cluster meningkatkan ukurannya menjadi node 10.

    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 kumpulan node.

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

    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.

  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 selanjutnya

Deploy layanan yang didukung oleh Ingress.

Untuk melihat opsi tambahan, baca dokumentasi referensi tentang AWSNodePool.