Taeyoung Kim

Cloud & Platform

Terraform과 Ansible을 활용한 클라우드 인프라 구성

Terraform과 Ansible을 활용한 클라우드 인프라 구성 학습 내용을 정리한 백필 노트입니다.

이 글은 2025년 학습 기록을 블로그 형식으로 정리한 백필 노트입니다.

💡 실습 핵심 사항

  1. Terraform 개념과 사용 방식 이해
  2. Terraform을 활용한 AKS(Azure Kubernetes Service) 클러스터 자동화 구성
  3. Ansible 개념과 사용 방식 이해
  4. Ansible을 활용한 Kubernetes 클러스터 자동화 구성

Part 1. Terraform으로 Linux 기반 AKS 클러스터 만들기

1. 개요

  • Terraform으로 AKS 클러스터 배포
  • 샘플 다중 컨테이너 애플리케이션 실행 (소매 시나리오 시뮬레이션)

👉 참고 URL

2. 실습 준비

  • Terraform 설치 및 구성
  • kubectl 다운로드
  • random_pet, azurerm_resource_group, azurerm_client_config, azurerm_kubernetes_cluster, azapi_resource, azapi_resource_action 등 Terraform 리소스 활용

3. Azure 로그인

  • az login (Azure CLI 기반 인증만 지원)

4. Terraform 코드 구성

  • providers.tf: Provider 정의 (azurerm, azapi, random 등)
  • ssh.tf: SSH 키 생성 및 출력
  • main.tf: Resource Group, AKS 클러스터 정의
  • variables.tf: 변수 정의 (리전, 노드 수, 사용자명 등)
  • outputs.tf: 출력 값 정의 (kube_config, 호스트, 사용자명 등)

5. Terraform 실행 단계

  1. terraform init -upgrade → 초기화
  2. terraform plan -out main.tfplan → 실행 계획 확인
  3. terraform apply main.tfplan → 배포 적용
  4. terraform output → 배포 결과 확인

6. 클러스터 확인 및 구성

  • Resource Group 및 AKS 클러스터 확인 (az aks list)
  • kubeconfig 추출 및 환경 변수 설정
  • kubectl get nodes로 상태 확인
  • az aks get-credentials로 kubeconfig 가져오기

7. 애플리케이션 배포

  • aks-store-quickstart.yaml 작성 → RabbitMQ, 주문 서비스, 제품 서비스, 스토어 프런트 배포
  • kubectl apply -f aks-store-quickstart.yaml

8. 애플리케이션 테스트

  • Pod 상태 확인 (kubectl get pods)
  • 서비스 외부 IP 확인 (kubectl get service store-front --watch)
  • 브라우저에서 store-front 접속

9. 리소스 정리

  1. AKS 리소스 삭제 → terraform plan -destroy -out main.destroy.tfplanterraform apply main.destroy.tfplan
  2. 서비스 주체 삭제 → az ad sp delete --id <sp>

Part 2. Ansible + Kubespray로 Kubernetes 클러스터 만들기

1. 개요

  • Terraform으로 VM 노드 생성
  • Ansible 기반 Kubespray로 K8S 클러스터 배포

👉 참고 URL

2. 실습 준비

  • Terraform 설치 및 구성
  • kubectl 다운로드
  • VM 노드 생성 후 Ansible + Kubespray로 클러스터 설치

3. Azure VM 기반 아키텍처

  • Master 2대 + Worker 3대 구성 (총 5대)
  • 보안 그룹(NSG) 규칙: SSH(22), API(6443), HTTP(80), HTTPS(443) 허용
  • Storage Account + SSH Key 생성
  • azurerm_linux_virtual_machine으로 VM 배포

4. Kubespray 설치 준비

  1. 노드 구성: /etc/hosts에 노드 IP와 이름 매핑
  2. sudoer 설정: azureuser에 NOPASSWD 권한 부여
  3. 패스워드 없는 SSH 설정: ssh-copy-id로 모든 노드에 키 배포
  4. 시스템 설정: IP Forwarding, swapoff, SELinux 해제
  5. 패키지 설치: Git, Python3, nfs-common, cifs-utils 등 설치

5. Kubespray로 K8S 설치

  1. Kubespray 클론 후 requirements.txt 설치
  2. inventory/mycluster 생성 및 노드 정보 작성
  3. Ansible inventory 파일 생성 → hosts.yaml
  4. 필요시 기존 K8S 클러스터 제거 (reset.yml)
  5. 새로운 K8S 클러스터 설치 (cluster.yml)

6. kubectl 설치 및 설정

  • Master1에서 kubeconfig 설정 (/etc/kubernetes/admin.conf)

  • 다른 노드에 kubectl 설치 및 kubeconfig 복사

  • 정상 설치 확인:

    kubectl version
    kubectl cluster-info