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"
}
]
}
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)
Süper yazı ellerine sağlık
Teşekkürler dost...