잡다한 IT 지식

AWS - kubespray로 클러스터 구축 본문

AWS/실습

AWS - kubespray로 클러스터 구축

가나무마 2025. 5. 20. 11:04

KubesprayAnsible을 기반으로 Kubernetes 클러스터를 구축할 수 있는 자동화 솔루션입니다.
단순한 설치 도구를 넘어, 다양한 구성 옵션과 멀티 클라우드 지원, 고가용성(HA) 클러스터 구성을 포함한 유연한 배포 기능을 제공합니다.

이번 글에서는 kubespray 레포지토리 내에 포함된 Terraform 예제를 활용해 AWS 상에 Kubernetes 클러스터를 직접 프로비저닝하고, Ansible로 배포까지 완료하는 전체 흐름을 정리해보겠습니다.

 

1. Kubespray의 Terraform 예제 위치

kubespray GitHub 레포지토리에는 AWS 인프라 생성을 위한 Terraform 코드가 포함되어 있습니다:

/kubespray/contrib/terraform/aws/

이 디렉토리에는 다음과 같은 AWS 리소스들이 Terraform 코드로 정의되어 있습니다:

  • VPC
  • 퍼블릭/프라이빗 서브넷
  • 인터넷 게이트웨이, NAT Gateway
  • 라우팅 테이블
  • EC2 인스턴스 (bastion, controller, worker)
  • AMI 설정 등

contrib/terraform/aws/create-infrastructure.tf 파일


2. Terraform으로 인프라 생성

인벤토리 자동 생성

해당 Terraform 코드를 사용하면, EC2 인스턴스와 VPC 등 리소스를 생성하는 것뿐 아니라,
inventory/hosts 파일에 생성된 인프라 정보를 기반으로 자동으로 인벤토리 파일도 생성됩니다.

이는 create-infrastructure.tf 내부에 정의된 null_resource가 동작하여, 프로비저닝 후 inventory 디렉토리에 hosts 파일을 자동 작성해주기 때문입니다.

따라서 별도로 Ansible 인벤토리를 손으로 작성할 필요 없이, Terraform 실행만으로 클러스터 준비가 완료됩니다.

/inventory/hosts

 

3. Ansible로 Kubernetes 설치

Terraform을 통해 인프라가 구성되었다면, 이제 Ansible로 Kubernetes를 설치하면 됩니다.

ansible-playbook -i ./inventory/hosts ./cluster.yml -e ansible_user=ubuntu -b --become-user=root --flush-cache

 

하지만 예제만 그대로 따라 하다 보면 다음과 같은 에러가 발생할 수 있습니다:

Permission Denied

이유는 Ansible이 SSH 접속 시 ansible_user를 통해 유저 이름을 지정하기 때문입니다. 위 예제에서는 ubuntu를 사용했지만,
만약 실제 생성된 EC2 인스턴스의 OS가 Amazon Linux나 RHEL이라면, 기본 유저명이 ec2-user일 수 있어 접근에 실패하게 됩니다.

 

4. AMI 및 유저 설정 수정하기

이를 해결하는 가장 쉬운 방법은 Ubuntu AMI를 사용하는 것입니다.
예제 코드에서 아래 항목을 수정하면 됩니다:

# terraform.tfvars
ami_name_filter = "ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-*"

terraform.tfvars 파일에서 EC2가 사용할 AMI 이미지 수정

이후에 다시 ansible을 실행하면 클러스터가 구축됩니다.