Tarraform을 활용한 Kubernetes 설치 및 설정

AWS CDK를 스터디하면서 IaC 기반으로 배포 스터디를 하고 싶었으나 AWS에 지불할 돈(?)이 없고, 그럼에도 IaC관련해서 제대로 스터디 해보고 싶어, '그래 로컬에 환경 구성하고 해보자.'라는 생각을 가지며 IaC하면 많은 사람들이 사용한다는 Tarraform을 이용하여 로컬환경을 구성해보려한다.

구글링을 해보니 Tarraform정식 가이드 문서에 Kubernetes provider로 설치하는 가이드가 잘되어 있어 이를 기반으로 한번 해보려 한다. 더 자세한 가이드가 궁금하신 분은 아래 URL을 참고 바란다.
(Guide : https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/guides/getting-started)

현재 사용중인 MacOS(x86)를 기준으로 설명한다.


사전 준비

  1. Installation Terraform
    brew install tfenv
  2. Installation Docker Desktop(Docker & Kubernetes)
    Docker 사이트에 들어가서 설치파일을 다운로드 후 설치하면된다. Docker 진영에서는 친절하게도 Docker에서 Kubernetes를 설치할 수 있도록 기능을 제공한다.(환경설정 클리릭) 이 부분을 이용하면 Kubernetes를 자동으로 설치할 수 있다.
    ** 2021년 9월 1일부터 정책이 변경되어 Docker Desktop을 설치하는 경우 사업장의 경우 25인 이상이고 년 매출액이 100억을 넘어가는 경우 Docker Desktop을 필수적으로 구매를 해야한다. 다행인점은 개인이나 비영리 사업장 등 매출과 관련없는 유저의 경우 기존 Open Source 정책을 유지하니 이점 참고하길 바란다.

Tarraform for Kubernetes

  1. Tarraform을 관리할 폴더 및 버전 설치
mkdir folder_name
tfenv install latest

# 설치 버전 확인 후 사용 설정
tfenv list
결과: 1.1.7

tfenv use 1.1.7
  1. Terraform init
terraform init
  1. Kubernetes에 배포할 Terraform 파일 Setup
    Terraform 작성 시 required_providers와 provider부분은 필수적으로 작성해야하며, Kubernetes를 원활하게 관리하기 위하여 namespace기반으로 관리하여야 한다. 아래 예시는 가이드 내용 출처로 작성하였다.
# file name : terraform_deployment.tf
terraform {
  required_providers {
    kubernetes = {
      source  = "hashicorp/kubernetes"
      version = ">= 2.0.0"
    }
  }
}
provider "kubernetes" {
  config_path = "~/.kube/config"
}
resource "kubernetes_namespace" "test" {
  metadata {
    name = "nginx"
  }
}
resource "kubernetes_deployment" "test" {
  metadata {
    name      = "nginx"
    namespace = kubernetes_namespace.test.metadata.0.name
  }
  spec {
    replicas = 2
    selector {
      match_labels = {
        app = "MyTestApp"
      }
    }
    template {
      metadata {
        labels = {
          app = "MyTestApp"
        }
      }
      spec {
        container {
          image = "nginx"
          name  = "nginx-container"
          port {
            container_port = 80
          }
        }
      }
    }
  }
}
resource "kubernetes_service" "test" {
  metadata {
    name      = "nginx"
    namespace = kubernetes_namespace.test.metadata.0.name
  }
  spec {
    selector = {
      app = kubernetes_deployment.test.spec.0.template.0.metadata.0.labels.app
    }
    type = "NodePort"
    port {
      node_port   = 30201
      port        = 80
      target_port = 80
    }
  }
}
  1. Terraform apply (to Kubernetes)
    아래 명령어로 apply하면 docker 및 kubernetes 설정이 완료된다.
terraform apply --auto-approve

위의 이미지는 아래 명령어로도 확인 가능하다.

kubectl get all -n [Your_namespace_Name ex:)nginx]

NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-86c669bff4-btdtn   1/1     Running   0          107m
pod/nginx-86c669bff4-q6zng   1/1     Running   0          107m

NAME            TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
service/nginx   NodePort   10.101.82.3   <none>        80:30201/TCP   106m

NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx   2/2     2            2           107m

NAME                               DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-86c669bff4   2         2         2       107m

이렇게 하면 Terraform을 이용해 Kubernetes에 배포가 완료되었다.

웹브라우저에 http://localhosrt:30201 치시면 아래 이미지와 같이 나온다.


부록

  1. Kubernetes에 배포한 것을 삭제하려먼 아래 명령어를 사용하면 된다.
terraform destroy
  1. 이외에 Terraform의 다양한 명령어가 궁금하면 아래 URL을 참고바란다.
    https://www.terraform.io/cli/commands

To-Do

관련 설정을 완료하였으니, 다음 챕터에는 Pyhton에서 Terraform을 어떻게 작성하는지를 스터디해보겠다.
(다행히 python package가 존재하네요^^. 아래 내용을 가지고 진행해보겠다.)
https://github.com/beelit94/python-terraform

좋은 웹페이지 즐겨찾기