Membuat Autoscaling EKS Managed Node Group

Hi gengz, di artikel kali ini kita akan belajar bagaimana cara membuat Autoscaling EKS dengan menggunakan Pulumi

Berikut adalah source dari code yang akan kita pakai

https://github.com/ludesdeveloper/pulumi-managed-nodes-autoscale-eks

Note : Untuk requirement tools, bisa dibaca langsung di githubnya ya gengz

Membuat EKS dengan Pulumi

Mari kita clone dulu reponya

git clone https://github.com/ludesdeveloper/pulumi-managed-nodes-autoscale-eks.git 

Change directory

cd pulumi-managed-nodes-autoscale-eks

Mari install dependency yang kita butuhkan

npm install

Mari kita inisiasi stack untuk puluminya ya gengz

pulumi stack init

Mari kita config dulu region yang akan kita pakai, kebetulan saya memakai ap-southeast-1

pulumi config set aws:region ap-southeast-1

Yuk kita provision EKS nya

pulumi up --yes

Saat cluster sudah ready, mari kita copy kubeconfig ke directory milik kita, silahkan sesuaikan ya gengz

pulumi stack output kubeConfig > ~/.kube/config

Mari kita check dulu gengz, nodes yang sudah kita buat

kubectl get nodes

Node sudah ready, mari kita lakukan inisisasi untuk autoscaling (Anda dapat melihat script apa saja yang di eksekusi, dan melakukan copy paste manual untuk bisa memahaminya)

./init-autoscale-cluster.sh

Testing Autoscaling

Mari kita apply dulu, deployment yang sudah disediakan

kubectl apply -f nginx-deployment.yaml
kubectl get pods

Kita bisa lihat, 3 pod nginx sudah dibuat, dan kondisi nodes kita saat ini adalah hanya 1 node. Mari kita lakukan scaling terhadap pod

kubectl scale deployment/nginx-deployment --replicas=20

Disini kita bisa lihat, pod di scale sampai 20, dan ada pending pod, mari kita check yuk yang pending

Bisa kita lihat bahwa node memiliki pod yang terlalu banyak, mari kita lihat proses yang terjadi dibawah ini

Bisa kita lihat bahwa EKS secara otomatis request untuk penambahan nodes, kita tunggu sebentar ya gengz, sampai ready.

Mantap, nodes sudah ready, dan scale up sudah berhasil

Sekarang mari kita lakukan scale down

kubectl scale deployment/nginx-deployment --replicas=3

Proses scale down membutuhkan waktu, mari kita tunggu sejenak ya gengz, ngopi dulu

Kita bisa menggunakan command berikut, untuk melihat log

kubectl -n kube-system logs -f deployment.apps/cluster-autoscaler

Bila kita perhatikan terus menerus log, kita akan mendapat kan info seperti dibawah

Bisa kita lihat, bahwa cluster kubernetes melakukan evaluasi, dan berniat untuk memindahkan pod, juga kita lihat cluster kubernetes memberikan kemungkinan untuk menghapus node

Saat ini kita bisa melihat, bahwa semua pod masih di ip 178.213, mari kita tunggu dulu ya gengz pergerakannya, seharusnya membutuhkan waktu kurang lebih 10 menit. Temen temen bisa coba mencari log berikut, untuk bisa melihat waktunya

I0131 07:06:21.428797       1 scale_down.go:828] ip-10-0-178-213.ap-southeast-1.compute.internal was unneeded for 6m32.140767961s

Setelah 10 menit, kita akan melihat perubahan terhadap nodes

Dan bila kita perhatikan instances di EC2, kondisi instance juga sudah terminated

Wow, selamat ya gengz, autoscaling kita sudah berhasil, baik yang scale up, ataupun scale down

Bedah Code

Code utama ada di dalam index.ts, mari kita check apa yang kita bisa bahas

const cluster = new eks.Cluster("my-cluster", {
    skipDefaultNodeGroup: true,
    vpcId: vpc.id,
    publicSubnetIds: vpc.publicSubnetIds,
    privateSubnetIds: vpc.privateSubnetIds,
    instanceRoles: [role],
    createOidcProvider: true
});

Saya menggunakan pulumi crosswalk untuk tutorial ini, mempermudah kita untuk membuat cluster eks, 1 hal yang saya ingin tekankan adalah createOidcProvider, property tersebut sangat mempermudah pada saat nanti akan menggunakan autoscaling, cluster secara otomatis membuat Oidc, dan kita tinggal mengambil nilai outputnya

const managedNodeGroup = eks.createManagedNodeGroup("my-cluster-ng", {
    cluster: cluster,
    nodeGroupName: "aws-managed-ng1",
    nodeRoleArn: role.arn,
    labels: { "preemptible": "true" },
    tags: { "org": "pulumi" },
    capacityType: "SPOT",
    instanceTypes: ["t2.medium"],
    scalingConfig: {
        desiredSize: 1,
        maxSize: 3,
        minSize: 1,
    },
}, cluster);

Di tutorial ini saya juga menggunakan “managed” node group, dengan capacityType “SPOT”, yang berarti kita menggunakan spot instance untuk node group. scalingConfig juga bisa kita sesuaikan dengan kebutuhan

Bersih Bersih

Mari kita hapus semua service yang sudah kita buat

pulumi destroy --yes

Setelah service di destroy, mari kita hapus stack yang kita buat

pulumi stack rm dev

Semoga bermanfaat ya gengz 🙂

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s

Situs yang Didukung WordPress.com.

Atas ↑

%d blogger menyukai ini: