Infra

간단하게 실습하며 배우는 Kubernetes와 Terraform (1) 로컬 Kubernetes 클러스터에 웹 서버 배포 자동화하기

Joonfluence 2025. 2. 8.

서론

오늘 로컬 환경에서 Kubernetes 및 Terraform에 대해 간단하게 실습하며, 적용해보겠습니다.
참고로 설명은 Mac OS (M1 2020) 환경에 맞춰져 있습니다. Homebrew가 설치되어 있다는 가정 하에 실습이 진행됩니다.
또한 Kubernetes 클러스터를 로컬에서 실행하기 위해, Docker가 로컬 환경에 설치된 상태여야 합니다.

목표 

이번 목표는 로컬 환경에서 Kubernetes 클러스터 위에 웹 서버 배포를 Terraform으로 자동화하는 것 입니다. 

1단계 : 실습 환경 구축

간단하게 Mac에서 brew를 이용하여, Kubernetes와 Terraform을 사용할 수 있는 환경을 구축해보겠습니다.

brew install kubectl kubernetes-cli helm kind terraform

설치하는 요소들에 대한 간략한 설명입니다.

  1. kubectl: Kubernetes 클러스터 관리 도구
  2. kind: 로컬에서 Kubernetes 클러스터 실행을 위한 도구
  3. helm: Kubernetes 패키지 매니저
  4. terraform: 인프라 자동화를 위한 도구

2단계 : Terraform을 활용한 Kubernetes 클러스터 자동화

  1. 별도 디렉토리를 구성하고, 간단하게 Terraform 프로젝트 설정 파일을 작성해줍니다.
mkdir terraform-k8s && cd terraform-k8s
touch main.tf

kind 클러스터를 Terraform으로 관리하려면, 직접적으로 kind를 제어할 수 있는 공식적인 Terraform 제공자가 없으므로, kind 클러스터를 만드는 다른 방법을 시도할 수 있습니다. 예를 들어, kind 클러스터를 생성하는 쉘 명령어를 Terraform null_resource와 함께 사용하는 방식입니다.

resource "null_resource" "kind_cluster" {
  provisioner "local-exec" {
    command = "kind create cluster --name terraform-cluster"
  }

  triggers = {
    always_run = "${timestamp()}"
  }
}

output "kubeconfig" {
  value = "~/.kube/config"
  sensitive = true
}

 

  1. Terraform 실행
terraform init
terraform apply

Terraform을 이용해서 Kubernetes 클러스터를 코드로 정의하고 실행하는 것까지 완료됩니다.

3단계: Helm을 활용한 애플리케이션 배포 자동화

Helm 차트를 활용한 Nginx 배포해보겠습니다.

helm repo add bitnami https://charts.bitnami.com/bitnami # Bitnami Helm 차트 저장소를 Helm에 추가하는 명령
helm install my-nginx bitnami/nginx # Bitnami의 Nginx Helm 차트를 사용하여 Kubernetes 클러스터에 Nginx 애플리케이션을 설치하는 작업

배포된 서비스를 아래와 같은 쿠버네티스 CLI 명령어로 확인할 수 있습니다.

kubectl get pods
kubectl get svc

4단계: 실제 확인하기

포트포워딩을 통해, Nginx가 잘 배포되었는지 확인하려면, kubectl port-forward 명령어를 사용해서 로컬에서 접근할 수 있습니다.

kubectl port-forward svc/my-nginx 8080:80  

간단하게 실습하며 배우는 Kubernetes와 Terraform (1) 로컬 Kubernetes 클러스터에 웹 서버 배포 자동화하기 - 4단계: 실제 확인하기

반응형

댓글