DEV Community

Cover image for AWS EKS Node AutoScale
Burak Yılmaz
Burak Yılmaz

Posted on

AWS EKS Node AutoScale

Bu yazıda AWS'te Node Auto Scale için yapılması gereken tanımlamalar ve işlemlere değineceğiz.

Node Auto Scale özelliğinin çalışabilmesi için AWS’te bir takım izinlerin tanımlanması gerekiyor aksi takdirde node autoscale işlemi gerçekleşmeyecektir.

İlk olarak autoscale için aşağıdaki gibi bir Policy oluşturulması gerek. NodeAutoScalerPolicy adını verebiliriz.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "autoscaling:DescribeAutoScalingGroups",
                "autoscaling:DescribeAutoScalingInstances",
                "autoscaling:DescribeLaunchConfigurations",
                "autoscaling:DescribeTags",
                "autoscaling:SetDesiredCapacity",
                "autoscaling:TerminateInstanceInAutoScalingGroup",
                "ec2:DescribeLaunchTemplateVersions",
                "ec2:DescribeInstanceTypes"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
Enter fullscreen mode Exit fullscreen mode

Burada verilen permissionlar kullandığınız Kubernetes versiyonuna göre değişiklik gösterebilir, uyumsuzluk durumu autoscaler podunun loglarından incelenebilir birkaç adım ilerde değineceğiz.

İkinci olarak bir Role oluşturmak gerek. Trusted entity olarak Web identity seçip identity provider'ı k8s clusterın OIDC’sini, audience’ı da sts.amazonaws.com olarak seçip devam ediyoruz. Devamındaki sayfada ilk adımda oluşturduğumuz NodeAutoScalerPolicy’i attach ettikten sonra son olarak adını verip Role'ümüzü oluşturuyoruz.
AWSServiceRoleForAutoScaling adını verebiliriz.

Yine Role içinde değiştirmemiz gereken bir yer daha var. AWSServiceRoleForAutoScaling Role'e girip sonrasında aşağıdaki yolu takip ediyoruz.

Trust relationships > Edit Trust Relationship > json

oidc.eks.<AWS-REGION>.amazonaws.com/id/<OIDC-ID>:aud": "sys.amazonaws.com"

json içinde bu kısmı aynen aşağıdakiyle değişmemiz gerek.

oidc.eks.<AWS-REGION>.amazonaws.com/id/<OIDC-ID>:sub": "system:serviceaccount:kube-system:cluster-autoscaler

Üçüncü olarak github linkindeki autoscale.yaml dosyasını, istediğimiz cluster’a geçerek apply edeceğiz ama etmeden önce dosyada değiştirmemiz gereken yerler var bunlar:

<YOUR CLUSTER NAME> kısmına ilgili cluster adını yazmak ve ServiceAccount objesinin annotations altındaki eks.amazonaws.com/role-arn tanımındaki kısmına ikinci adımdaki AWSServiceRoleForAutoScaling rolünün arn'ını vermek.

Son olarak da kubernetes versiyonu ile autoscaler versiyonunun aynı majör versiyonda olması önerilmiş yani bizim clusterımız 1.24 ise autoscaler'ın da 1.24.* olması gerekiyor. Versiyon yine linkteki autoscale.yaml dosyasında mevcut oradan değiştirilmesi gerek.

Bu işlemlerden sonra,

kubectl apply -f autoscale.yaml

yapıyoruz ve ne durumdayız kontrol ediyoruz.

kubectl get pods -n kube-system -l=app=cluster-autoscaler

podumuz oluşmuş ya da oluşmamışsa aksiyon alıyoruz.

kubectl logs -l app=cluster-autoscaler -n kube-system -f

Eğer bir sıkıntı varsa yukarıdaki gibi loglara bakıp ne olduğunu görebiliriz ya da sıkıntı yoksa scale up/down durumlarının loglarını izleyebiliriz.

Kaynakları 1 tane node'un üstünde kullanacak kadar replicalı bir deployment dosyası apply ederseniz, hemen scale up olacaktır. Scale down durumunda cluster'ın node'lara artık ihtiyacı olmadığına ikna olması 10-15 dakika kadar sürüyor siz replicaları azaltsanız da bu sürenin geçmesini beklemelisiniz.

Kaynaklar

EKS Cluster Auto Scaling (Kubernetes Autoscaler | EKS Cluster Autoscaler | EKS Autoscale Nodes)
EKS Cluster Autoscaler: 6 Best Practices For Effective Autoscaling
Cluster-Autoscaler - EKS Best Practices Guides
https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md
https://katharharshal1.medium.com/kubernetes-cluster-autoscaling-ca-using-aws-eks-4aab8c89f9a1

Top comments (2)

Collapse
 
ilteriskeskin profile image
Ali İlteriş Keskin

Süper yazı ellerine sağlık

Collapse
 
buurak profile image
Burak Yılmaz

Teşekkürler dost...