Terraform과 Ansible의 역할 분담
- Terraform: 인프라 프로비저닝 및 관리
- Ansible: 생성된 인프라에 소프트웨어 설치 및 구성
Terraform이란?
: 인프라를 코드로 정의하고, Kubernetes 클러스터 내의 리소스(Deployment, Service 등) 관리
구성
# terraform/providers.tf
provider "kubernetes" {
config_path = "~/.kube/config" # Kubernetes 클러스터 설정 파일 경로
}
provider "helm" {
kubernetes {
config_path = "~/.kube/config"
}
}
# helm 차트를 패키징하고 배포하기 위한 terraform 리소스 정의
# terraform/helm.tf
resource "helm_release" "api_server" {
name = "api-server" # 릴리즈의 이름
chart = "./k8s/helm-chart" # 배포할 차트의 경로, 로컬 Helm 차트 경로
version = "0.1.0" # 차트 버전
namespace = "api-base" # k8s 네임 스페이스
values = [
file("k8s/helm-chart/values.yaml")
# Helm 차트에 적용할 값들을 정의하는 YAML 파일의 경로를 지정합니다. 이 파일은 차트의 설정 값을 사용자 정의할 때 사용됩니다.
]
}
helm으로 리소스들을 관리할 수 있다.
→ Terraform에서 해당 릴리즈만 helm install로 실행시키면 배포(쿠버네티스 클러스터 설정)가 완료된다.
Ansible이란?
- 애플리케이션의 구성, 데이터베이스 초기화, 운영 및 배포 이후 설정 작업 등 세부적인 작업 수행
구성
[k8s_pods]
alertmanager-prometheus-kube-prometheus-alertmanager-0 ansible_host=10.244.0.57
grafana-deployment-6cf6665d5c-8c4wp ansible_host=10.111.114.132
my-mysql-0 ansible_host=10.101.244.126
mysql-6bc459546b-254rc ansible_host=10.101.244.126
prometheus-deployment-7d8998f4b6-pm49f ansible_host=10.102.232.167
prometheus-kube-prometheus-blackbox-exporter-54457f4744-xfsw2 ansible_host=10.108.193.40
prometheus-kube-prometheus-operator-c4897fd85-f48l8 ansible_host=10.110.34.210
prometheus-kube-state-metrics-55b547994c-wtrwh ansible_host=10.100.53.231
prometheus-node-exporter-hqnfw ansible_host=10.106.28.96
prometheus-prometheus-kube-prometheus-prometheus-0 ansible_host=10.102.232.167
springboot-app-dbfd67bd6-hlp2z ansible_host=10.111.72.78
[defaults]
inventory = ./inventory
host_key_checking = False
deprecation_warnings = False
- name: Set up servers
hosts: all
become: yes
tasks:
- name: Clone API Server repository
git:
repo: 'https://github.com/qwer9545/k8s-api-server-base.git'
dest: '/path/to/destination'
version: 'main/step05_probono'
- name: Install Helm
apt:
name: helm
state: present
- name: Initialize Helm repository
command: helm repo add stable https://charts.helm.sh/stable
register: helm_repo_result
failed_when: "'added' not in helm_repo_result.stdout"
쿠버네티스와 helm-chart, Terraform, ansible 등 이름과 알고있던 개념들을 이해하면서 서비스를 구축하다보니 시간이 생각보다 많이 소요되었고, helm과 terraform 설정의 완성도가 많이 떨어진 것 같다.
추가로 쿠버네티스와 테라폼에 관련된 내용은 인프런 강의나 실습을 통해 계속 학습해나가며 숙련도를 높여나가야겠다.