Load To Technical Architect
[AWS] EKS Cluster AutoScaler 구성 본문
728x90
AWS EKS Document : https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/autoscaling.html
[ 사전 준비 ]
- 노드 그룹 생성 (eksctl or AWS Console)
- eksctl 설치
[ CLI 작업 ]
1. cluster autoscaler IAM policy 생성 및 EKS SA 생성
$ vi cluster-autoscaler-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"autoscaling:SetDesiredCapacity",
"autoscaling:TerminateInstanceInAutoScalingGroup"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/k8s.io/cluster-autoscaler/<my-cluster>": "owned"
}
}
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"autoscaling:DescribeAutoScalingInstances",
"autoscaling:DescribeAutoScalingGroups",
"ec2:DescribeLaunchTemplateVersions",
"autoscaling:DescribeTags",
"autoscaling:DescribeLaunchConfigurations"
],
"Resource": "*"
}
]
}
$ aws iam create-policy \
--policy-name AmazonEKSClusterAutoscalerPolicy \
--policy-document file://cluster-autoscaler-policy.json
$ eksctl create iamserviceaccount \
--cluster=<my-cluster> \
--namespace=kube-system \
--name=cluster-autoscaler \
--attach-policy-arn=arn:aws:iam::<111122223333>:policy/<AmazonEKSClusterAutoscalerPolicy> \
--override-existing-serviceaccounts \
--approve
- <my-cluster>, IAM Policy arn은 환경에 맞게 수정
2. CA 배포
$ curl -o cluster-autoscaler-autodiscover.yaml https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml
$ kubectl apply -f cluster-autoscaler-autodiscover.yaml
$ kubectl patch deployment cluster-autoscaler \
-n kube-system \
-p '{"spec":{"template":{"metadata":{"annotations":{"cluster-autoscaler.kubernetes.io/safe-to-evict": "false"}}}}}'
$ kubectl -n kube-system edit deployment.apps/cluster-autoscaler
spec:
containers:
- command
- ./cluster-autoscaler
- --v=4
- --stderrthreshold=info
- --cloud-provider=aws
- --skip-nodes-with-local-storage=false
- --expander=least-waste
- --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/<YOUR CLUSTER NAME> // Cluster명 수정
- --balance-similar-node-groups // 추가
- --skip-nodes-with-system-pods=false // 추가
$ kubectl set image deployment cluster-autoscaler \
-n kube-system \
cluster-autoscaler=k8s.gcr.io/autoscaling/cluster-autoscaler:v<1.22.n> // 버전 확인 후 지정
// 버전 확인 https://github.com/kubernetes/autoscaler/releases
3. 로그 확인
$ kubectl -n kube-system logs -f deployment.apps/cluster-autoscaler
ps 1 : CA는 NodeGroup에서 지정한 인스턴스 타입, 최대/최소 노드 수를 기준으로 Auto Scaling 함
ps 2 : 만약 AutoScaling에 문제가 있다면 로그를 꼭 확인(보통 CA 시작하자마자 에러가 발생함)
# 필자의 경우 SA 구성이 이상했는지 Node Instance Role에 AutoScaling 권한이 없다는 에러가 계속 발생하여 Node Instance Role에 cluster autoscaler policy를 추가함..
728x90
'Cloud > AWS' 카테고리의 다른 글
[AWS] EKS ArgoCD Install (0) | 2024.06.11 |
---|---|
[AWS] EKS AutoScaling Scale In과 LB 502, 504 에러 (0) | 2022.08.09 |
[AWS] Elastic LoadBalancer's Availability Zones (0) | 2021.12.29 |
[AWS] EKS 리소스 사용량을 Cloudwatch Container Insights에서 모니터링 하는 방법 (0) | 2021.11.18 |
[AWS] Fluentd를 사용하여 EKS Log를 CloudWatch로 전송하는 방법 (9) | 2021.11.18 |
Comments