전공영역 공부 기록

EKS Auto Mode는 무엇이고 왜 출시되었을까?

악분 2024. 12. 15. 15:34
반응형

 

 

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를 출시했는지 의도를 볼 수 있습니다.

출처: https://www.youtube.com/watch?v=_wwu0VKy3w4&ab_channel=AWSEvents

 

 

EKS 학습 곡선이 높아 AWS 고객들이 어려움을 겪고 있다는 점을 인지했습니다. 쿠버네티스와 AWS 서비스를 모두 이해해야 하다 보니, EKS 애플리케이션을 오늘 당장 배포하는 것조차 쉽지 않죠. 장애가 발생했을 문제를 진단하고 해결하는 과정도 만만치 않습니다.

 

AWS 이런 문제를 해결하고 고객 경험을 개선하기 위해, 고객이 직접 관리해야 하는 부분을 줄이고 AWS 대신 관리할 있는 영역을 확장했습니다. 바로 이런 이유로 EKS Auto Mode 탄생했다고 생각합니다.

출처: https://www.youtube.com/watch?v=_wwu0VKy3w4&ab_channel=AWSEvents

 

 

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문서에서 확인할 수 있습니다.

 

 

번째 단점은 일부 완전 자동화가 아닙니다. 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입니다.

참고자료: https://docs.aws.amazon.com/eks/latest/userguide/set-builtin-node-pools.html

 

번째 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를 사용해서는 안됩니다. 

 

참고자료

이하여백

반응형