Cloud & Platform
Terraform과 Ansible을 활용한 클라우드 인프라 구성
Terraform과 Ansible을 활용한 클라우드 인프라 구성 학습 내용을 정리한 백필 노트입니다.
이 글은 2025년 학습 기록을 블로그 형식으로 정리한 백필 노트입니다.
💡 실습 핵심 사항
- Terraform 개념과 사용 방식 이해
- Terraform을 활용한 AKS(Azure Kubernetes Service) 클러스터 자동화 구성
- Ansible 개념과 사용 방식 이해
- 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 실행 단계
terraform init -upgrade→ 초기화terraform plan -out main.tfplan→ 실행 계획 확인terraform apply main.tfplan→ 배포 적용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. 리소스 정리
- AKS 리소스 삭제 →
terraform plan -destroy -out main.destroy.tfplan→terraform apply main.destroy.tfplan - 서비스 주체 삭제 →
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 설치 준비
- 노드 구성:
/etc/hosts에 노드 IP와 이름 매핑 - sudoer 설정:
azureuser에 NOPASSWD 권한 부여 - 패스워드 없는 SSH 설정:
ssh-copy-id로 모든 노드에 키 배포 - 시스템 설정: IP Forwarding, swapoff, SELinux 해제
- 패키지 설치: Git, Python3, nfs-common, cifs-utils 등 설치
5. Kubespray로 K8S 설치
- Kubespray 클론 후
requirements.txt설치 inventory/mycluster생성 및 노드 정보 작성- Ansible inventory 파일 생성 →
hosts.yaml - 필요시 기존 K8S 클러스터 제거 (
reset.yml) - 새로운 K8S 클러스터 설치 (
cluster.yml)
6. kubectl 설치 및 설정
-
Master1에서 kubeconfig 설정 (
/etc/kubernetes/admin.conf) -
다른 노드에 kubectl 설치 및 kubeconfig 복사
-
정상 설치 확인:
kubectl version kubectl cluster-info