1. EKS Auto Mode
EKS Auto Mode는 AWS가 EKS 리소스의 일부를 직접 책임지고 관리해 주는 기능입니다. 이를 통해 사용자는 클러스터 관리에 필요한 오버헤드를 줄이고, 비즈니스에 더욱 집중할 수 있습니다.
2. EKS Auto Mode 기능이 왜 출시된 걸까?
2024 re:Invent의 AWS re:Invent 2024 - The future of Kubernetes on AWS (KUB201)
에서 왜 EKS auto mode를 출시했는지 의도를 볼 수 있습니다.
EKS는 학습 곡선이 높아 AWS도 고객들이 어려움을 겪고 있다는 점을 인지했습니다. 쿠버네티스와 AWS 서비스를 모두 이해해야 하다 보니, EKS에 애플리케이션을 오늘 당장 배포하는 것조차 쉽지 않죠. 장애가 발생했을 때 문제를 진단하고 해결하는 과정도 만만치 않습니다.
AWS는 이런 문제를 해결하고 고객 경험을 개선하기 위해, 고객이 직접 관리해야 하는 부분을 줄이고 AWS가 대신 관리할 수 있는 영역을 확장했습니다. 바로 이런 이유로 EKS Auto Mode가 탄생했다고 생각합니다.
3. Auto Mode가 관리하는 영역
Auto Mode가 관리하는 영역을 이해하기 위해서는 EKS 사용경험이 있어야 합니다.
EKS가 네이티브 쿠버네티스 사용과 다른 점은 AWS 리소스를 사용합니다. 노드는 EC2인스턴스를 사용하고 로드밸런서를 사용하려면 ELB, DNS를 사용하려면 Route 53, 스토리지를 사용하려면 EBS, EFS를 사용합니다.
쿠버네티스에서 AWS 리소스를 사용하려면 요청을 처리하는 중간 개입자가 필요합니다. 이 개입자를 컨트롤러 또는 EKS 애드온이라고 부릅니다.
EKS Auto Mode는 EKS 애드온을 설치하고 자동으로 관리합니다. 그리고 GPU 설정, 보안, 비용 최적화 등 많은 영역을 자동으로 관리합니다.
- EKS addons
- karpenter를 사용하여 노드 관리
- AWS LoadBalancer Controller
- EKS Pod Identity Agent
- 기타 등등
- GPU 설정(드라이버 설치 등)
- 보안
- bottlerocket AMI사용
- 노드는 항상 최신 AMI 사용하기 위해 최대 21일마다 노드 자동 교체(karpenter drift)
- 노드 비용 최적화
- 사용하고 있는 노드 중에서 비용이 저렴한 노드가 있으면 노드 교체(karpenter consolidation)
4. 하지만 단점도 존재
장점이 있듯이 단점도 물론 있습니다.
가장 큰 단점은 비용이 추가됩니다. AWS가 자동으로 관리한 만큼 관리비를 지불해야 합니다. 추가 비용은 EC2인스턴스 종류마다 다릅니다.
두 번째 단점은 일부 EKS 기능을 사용할 수 없습니다. security group for pod, custom network 등이 있습니다. 제약이 있는 기능은 eks compute문서에서 확인할 수 있습니다.
- eks compute 문서 링크: https://docs.aws.amazon.com/eks/latest/userguide/eks-compute.html
세 번째 단점은 일부 완전 자동화가 아닙니다. ALB controller, 스토리지를 사용하려면 사용자가 쿠버네티스 리소스를 생성하는 준비과정이 필요합니다.
네 번째 단점은 노드 디버깅이 어려워졌습니다. 노드 원격접속(ssh, SSM)을 막았기 때문에 노드 쉘에서 했던 디버깅 방법은 어렵습니다.
다섯번째 ExternalDNS controller이 아직 지원이 안됩니다.
여섯번째 기존 EKS에서 Auto Mode를 활성화하고 마이그레이션 작업이 필요합니다.
5. 테라폼으로 EKS Auto Mode 설치
저는 테라폼으로 새로운 EKS 클러스터에 Auto Mode를 설치했습니다. AWS provider 5.79.0 이상 부타 EKS Auto Mode를 사용할 수 있습니다. 테라폼 코드 수정은 AWS가 관리하는 테라폼 모듈의 github pull request를 참조하면 좋습니다.
테라폼 코드의 수정사항은 4가지 입니다.
첫 번째 compute, network, storage 설정을 enabled해야 합니다. aws_eks_cluster 테라폼 리소스에서 아래 3가지 설정을 enabled해야 합니다.
- compute_config
- kubernetes_network_config.elastic_load_balancing
- storage_config.block_storage
compute_config 설정에는 AWS 관리형 nodepool을 추가합니다.
compute_config = {
enabled = true
node_pools = ["general-purpose", "system"]
node_role_arn = node IAM role arn(네번째 과정에서 진행)
}
관리형 karpenter nodepool은 system, general-purpose 2개입니다. system nodepool은 taint가 설정된 노드를 생성합니다. 인프라 pod등 시스템에 중요한 pod를 스케쥴링할 때 사용하는 노드입니다. general-purpose는 이름 그대로 일반 목적으로 사용하는 nodepool입니다.
두 번째 EKS 애드온 설치를 제거 합니다. Auto Mode는 EKS 애드온을 직접 관리하므로 VPC CNI, coreDNS 등 EKS 애드온을 설치하지 않도록 설정합니다. 설정 방법은 aws_eks_cluster 테라폼 리소스에서 bootstrap_self_managed_addons를 false로 설정합니다.
resource "aws_eks_cluster" "main" {
name = var.eks_cluster
bootstrap_self_managed_addons = false
...이하 생략
bootstrap_self_managed_addons가 true이면 terraform apply에러가 납니다.
세 번째 Cluster IAM role에 IAM policy와 trust policy를 추가합니다.
- IAM policy
- AmazonEKSComputePolicy
- AmazonEKSBlockStoragePolicy
- AmazonEKSLoadBalancingPolicy
- AmazonEKSNetworkingPolicy
- AmazonEKSClusterPolicy
Trust policy는 sts:TagSession가 필요합니다. 아래는 설정 예입니다. identifier는 EKS입니다.
네 번째 Node IAM role에 IAM policy와 trust policy를 추가합니다.
- IAM policy
- AmazonEKSWorkerNodeMinimalPolicy
- AmazonEC2ContainerRegistryPullOnly
Trust policy는 sts:TagSession가 필요합니다. 아래는 설정 예입니다. identifier는 EC2입니다.
6. Managed NodeGroup을 삭제하고 karpenter로 노드를 관리
EKS Auto Mode를 사용하면 Managed NodeGroup을 사용하지 않아도 됩니다. karpenter가 노드를 관리하기 때문입니다. 하지만, karpenter로 노드를 관리하면 보안 설정때문에 노드가 주기적으로 교체됩니다. pod 안전성 설정(PDB 등)을 하지 않으면 노드 교체하는 동안 서비스 장애가 발생합니다.
7. 더 자세한 내용은
더 자세한 내용은 AWS 2024 re:Invent영상을 참고하시면 좋습니다.
8. 마치며
EKS Auto Mode는 EKS를 입문하거나 관리가 힘든 조직이 사용하면 좋아 보입니다. 하지만 추가 비용이 저렴하지 않기 때문에 2024년 12월 기준으로 잘 사용하고 계신 분은 굳이 사용할 이유가 없습니다.
그리고 Auto Mode를 사용하려면 서비스 안전성에 대한 준비가 필요합니다. karpenter drift와 consolidation 설정 때문에 주기적으로 노드가 교체됩니다. 노드가 교체되면서 pod가 종료되고 재생성되는데 이 과정때문에 서비스 장애가 발생하면 EKS Auto Mode를 사용해서는 안됩니다.
참고자료
- aws 테라폼 EKS 모듈: https://github.com/hashicorp/terraform-provider-aws/pull/40380
- aws EKS Auto Mode 문서: https://docs.aws.amazon.com/eks/latest/userguide/automode.html
이하여백
'전공영역 공부 기록' 카테고리의 다른 글
앤서블 입문자에게 추천하는 책 (1) | 2024.12.25 |
---|---|
pod 안전성 설정 - Readiness gate (0) | 2024.12.24 |
ElasticCache Scale-Up 후 SpringBoot 연결 오류 (3) | 2024.11.11 |
쿠버네티스 버전을 업그레이드 할 때 어떤 전략을 선택해야할까? (in-place, 복제) (0) | 2024.10.20 |
hashicorp vault secret엔진을 v2로 업그레이드하는 방법 (0) | 2024.10.13 |