AWS EKS를 프로비저닝하는 네 가지 방법

AWS EKS(Elastic Kubernetes Service)는 Kubernetes 클러스터를 손쉽게 생성하고 관리할 수 있는 AWS의 관리형 서비스입니다.
EKS를 프로비저닝하는 방법에는 여러 가지가 있으며, 각 방법은 사용 목적과 환경에 따라 적합성이 달라집니다. 이번 글에서는 eksctl
, Terraform
, AWS Blueprints
, Crossplane
이라는 네 가지 접근 방식을 실제 예제와 함께 자세히 소개합니다. 특히 AWS Blueprints는 Terraform과 CDK 두 가지 구현 방식을 제공하므로 이를 추가적으로 설명합니다.
eksctl로 EKS 프로비저닝하기 #
eksctl
은 AWS에서 공식적으로 지원하는 EKS 클러스터 관리 도구로, 간단한 CLI 명령어와 YAML 파일을 사용해 빠르게 클러스터를 생성할 수 있습니다. 개발자와 DevOps 엔지니어가 가장 빠르게 EKS를 시작할 수 있는 방법 중 하나입니다.
특징
- 쉽고 직관적인 사용법으로, CLI만으로도 클러스터를 빠르게 생성 가능.
- YAML 파일을 통해 클러스터 설정을 선언적으로 관리할 수 있음.
- 초기 환경 설정 및 테스트 용도로 적합하며, 간단한 배포에 유리.
예제
아래는 eksctl을 사용하여 기본적인 EKS 클러스터를 생성하는 방법입니다.
eksctl create cluster --name my-cluster --region us-west-2 --nodes 3
또는 YAML 파일로 클러스터를 정의할 수도 있습니다.
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: my-cluster
region: us-west-2
nodeGroups:
- name: ng-1
instanceType: t3.medium
desiredCapacity: 3
YAML 파일을 기반으로 클러스터를 생성하려면 다음 명령어를 실행합니다.
eksctl create cluster -f cluster-config.yaml
eksctl
은 사용자 친화적인 도구로, 간단한 환경에서 매우 유용하지만, 복잡한 설정이나 대규모 환경에서는 한계가 있을 수 있습니다.
Terraform으로 EKS 프로비저닝하기 #
Terraform
은 Infrastructure as Code(IaC) 도구로, 클라우드 리소스를 선언적으로 정의하고 배포할 수 있습니다. EKS뿐만 아니라 네트워크, 데이터베이스, IAM 등 다양한 AWS 리소스를 통합적으로 관리할 때 강력한 도구입니다.
특징
- 선언적 구성 방식을 사용하여 클라우드 인프라를 자동화.
- 코드 기반으로 반복 가능하고 버전 관리가 용이.
- 복잡한 인프라와 대규모 프로덕션 환경에 적합.
예제
아래는 Terraform으로 EKS 클러스터를 생성하는 기본 구성 예제입니다.
provider "aws" {
region = "us-west-2"
}
module "eks" {
source = "terraform-aws-modules/eks/aws"
cluster_name = "my-cluster"
cluster_version = "1.27"
subnets = ["subnet-abc123", "subnet-def456"]
vpc_id = "vpc-123456"
node_groups = {
default = {
desired_capacity = 3
max_size = 5
min_size = 1
instance_type = "t3.medium"
}
}
}
Terraform을 사용하려면 아래 명령어로 작업을 시작합니다.
terraform init
terraform apply
Terraform은 팀 단위의 협업과 대규모 인프라 관리에 적합하지만, 초기 학습 곡선이 존재하고 설정이 복잡할 수 있습니다.
AWS Blueprints로 EKS 프로비저닝하기 #
AWS Blueprints
는 AWS에서 제공하는 모듈형 솔루션으로, EKS 클러스터와 관련 리소스를 손쉽게 설정할 수 있도록 도와줍니다. Blueprints는 Terraform과 CDK 두 가지 방식을 제공하여 다양한 사용자의 요구를 충족합니다.
특징
- 사전 정의된 템플릿을 통해 빠르고 표준화된 배포 가능.
- Terraform 및 AWS CDK를 활용한 구현 방식 지원.
- VPC, IAM, 클러스터 애드온 등 EKS와 관련된 리소스를 통합적으로 설정 가능.
Terraform 기반 Blueprints 예제
AWS가 제공하는 Blueprints Terraform 모듈을 사용하여 클러스터를 구성할 수 있습니다. 아래는 기본적인 사용 방법입니다.
git clone https://github.com/aws-ia/terraform-aws-eks-blueprints.git
cd examples/eks-cluster-with-addons
terraform init
terraform apply
CDK 기반 Blueprints 예제
AWS CDK를 활용하여 Blueprints를 구현할 수도 있습니다. TypeScript로 작성된 간단한 예제를 살펴보겠습니다.
import * as cdk from 'aws-cdk-lib';
import { Blueprint } from '@aws-quickstart/eks-blueprints';
const app = new cdk.App();
Blueprint.builder()
.clusterProvider(new Blueprint.EksClusterProvider({ version: '1.27' }))
.build(app, 'eks-blueprint');
AWS Blueprints는 팀의 규모와 요구사항에 따라 적합한 방식을 선택할 수 있도록 유연성을 제공합니다.
Crossplane으로 EKS 프로비저닝하기 #
Crossplane
은 Kubernetes 네이티브 방식으로 클라우드 리소스를 관리할 수 있는 도구입니다. 쿠버네티스 클러스터 내부에서 CRD(Custom Resource Definition)를 사용하여 클라우드 인프라를 관리하고자 할 때 유용합니다.
특징
- Kubernetes 리소스 정의를 통해 클라우드 리소스를 관리.
- 쿠버네티스 네이티브 방식으로 멀티 클러스터 및 복잡한 환경 지원.
- GitOps 워크플로와 자연스럽게 통합 가능.
예제
Crossplane을 사용하여 EKS 클러스터를 생성하려면 다음과 같이 Kubernetes 리소스를 정의합니다.
apiVersion: eks.aws.crossplane.io/v1alpha1
kind: EKSCluster
metadata:
name: my-cluster
spec:
forProvider:
region: us-west-2
version: "1.27"
providerConfigRef:
name: aws-provider
그리고 다음 명령어로 리소스를 적용합니다.
kubectl apply -f eks-cluster.yaml
Crossplane은 쿠버네티스 환경에서 클라우드 리소스를 관리하려는 팀에게 특히 적합합니다. 다만 설정이 복잡하고 초기 학습이 필요할 수 있습니다.
비교 테이블 #
방법 | 특징 | 적합한 상황 | 장점 | 단점 |
---|---|---|---|---|
eksctl |
간단한 CLI와 YAML로 클러스터 생성 | 테스트 또는 간단한 설정 | 쉽고 빠른 설정 | 복잡한 설정에 한계 |
Terraform |
선언적 IaC 방식 | 대규모 프로덕션 환경 | 반복 가능성, 통합성 | 초기 설정 복잡성 |
AWS Blueprints |
템플릿 기반 구성 | 빠르고 표준화된 배포 | 빠른 설정, 통합 리소스 관리 | 유연성 부족 |
Crossplane |
Kubernetes 네이티브 방식 | 클라우드 네이티브 환경 | 쿠버네티스 내에서 통합된 관리 | 설정 및 러닝 커브 있음 |
결론: 개인적인 추천과 느낀 점 #
위의 네 가지 방법을 모두 사용해본 경험을 바탕으로, 저는 가능하다면 Crossplane을 사용하는 것을 추천합니다. Crossplane은 Kubernetes 네이티브 방식을 채택하고 있어, GitOps 워크플로와의 통합이나 멀티 클러스터 환경에서 강력한 유연성을 제공합니다. 특히 클라우드 리소스를 코드로 관리하는 데 있어 Kubernetes의 강점을 최대한 활용할 수 있다는 점이 큰 장점입니다.
다만, Crossplane의 초기 설정은 다소 복잡할 수 있으며, 팀 내에 쿠버네티스에 익숙하지 않은 구성원이 있다면 학습 곡선이 문제로 작용할 수 있습니다. 이러한 경우에는 Terraform이나 AWS Blueprints를 대안으로 추천합니다. Terraform은 이미 널리 사용되고 있는 IaC 도구로, 대규모 환경에서도 안정적으로 동작하며, 다양한 AWS 리소스와 통합 관리가 가능하다는 점이 매력적입니다. AWS Blueprints는 Terraform과 CDK 중 팀 환경에 맞는 방식을 선택할 수 있는 유연성이 돋보입니다.
반면, eksctl은 빠르고 간단하게 클러스터를 생성하는 데 매우 유용하지만, 장기적인 유지보수나 복잡한 요구사항을 만족하기에는 부족할 수 있습니다. 초기 테스트나 간단한 개발 환경 설정에는 적합하지만, 대규모 환경에서는 다른 방법을 고려하는 것이 좋습니다.
따라서, 팀의 기술 스택과 요구사항을 고려했을 때 다음과 같은 순서로 선택을 권장합니다:
- Crossplane: 클라우드 네이티브 환경에서 GitOps와 통합된 관리 필요 시.
- Terraform 또는 AWS Blueprints: 복잡한 인프라와 대규모 환경에서 안정성과 효율성을 중시할 때.
- eksctl: 빠르고 간단한 설정이 필요할 때.
각 도구는 고유한 강점과 단점을 가지고 있으므로, 환경과 목표에 맞춰 적절히 선택하시길 바랍니다.