728x90
반응형
계획
- Terraform: 클라우드 제공자 (예: AWS, GCP, Azure)에서 Kubernetes 클러스터를 프로비저닝한다.
- Ansible: Kubernetes 클러스터에 애플리케이션을 배포합니다.
Terraform 단계
- Kubernetes 클러스터를 프로비저닝하기 위한 Terraform 구성 파일을 생성한다.
- Terraform 구성을 초기화하고 적용한다.
Ansible 단계
- Kubernetes 마스터 노드가 포함된 인벤토리 파일을 생성한다.
- Kubernetes 클러스터에 애플리케이션을 배포하기 위한 플레이북을 생성한다.
Terraform 구성
# main.tf
provider "aws" {
region = "us-west-2"
}
resource "aws_eks_cluster" "k8s_cluster" {
name = "k8s-cluster"
role_arn = aws_iam_role.eks_role.arn
vpc_config {
subnet_ids = aws_subnet.subnet[*].id
}
}
resource "aws_iam_role" "eks_role" {
name = "eks-role"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = "sts:AssumeRole"
Effect = "Allow"
Principal = {
Service = "eks.amazonaws.com"
}
},
]
})
}
resource "aws_subnet" "subnet" {
count = 2
vpc_id = aws_vpc.main.id
cidr_block = cidrsubnet(aws_vpc.main.cidr_block, 8, count.index)
}
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
}
Terraform 초기화 및 적용
terraform init
terraform apply
Ansible 인벤토리
# inventory
[k8s_master]
master ansible_host=<master_node_ip> ansible_user=ubuntu
Ansible 플레이북
# playbook.yml
---
- name: Deploy application to Kubernetes
hosts: k8s_master
become: yes
tasks:
- name: Create Kubernetes deployment
k8s:
state: present
definition:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
- name: Create Kubernetes service
k8s:
state: present
definition:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
Ansible 플레이북 실행
ansible-playbook -i inventory playbook.yml
- 끝 -
728x90
반응형