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)를 기준으로 설명한다.
brew install tfenv
mkdir folder_name
tfenv install latest
# 설치 버전 확인 후 사용 설정
tfenv list
결과: 1.1.7
tfenv use 1.1.7
terraform init
# 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
}
}
}
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 치시면 아래 이미지와 같이 나온다.
terraform destroy
관련 설정을 완료하였으니, 다음 챕터에는 Pyhton에서 Terraform을 어떻게 작성하는지를 스터디해보겠다.
(다행히 python package가 존재하네요^^. 아래 내용을 가지고 진행해보겠다.)
https://github.com/beelit94/python-terraform