쿠버네티스 클러스터 관리 자동화
- Ansible, Terraform 등을 이용한 관리 자동화
- 키워드: 쿠버네티스 관리 자동화, Kubernetes Ansible
서론
쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 강력한 플랫폼입니다. 그러나 쿠버네티스 클러스터의 설정, 관리 및 유지보수는 복잡하고 시간 소모적일 수 있습니다. 이를 해결하기 위해 다양한 자동화 도구를 사용할 수 있습니다. 이번 포스팅에서는 Ansible과 Terraform을 사용하여 쿠버네티스 클러스터를 자동화하는 방법을 초보자도 이해할 수 있도록 자세히 설명합니다.
본론
쿠버네티스 관리 자동화의 필요성
쿠버네티스 클러스터는 다수의 노드와 다양한 설정을 포함하고 있어, 수동으로 관리하는 것은 비효율적입니다. 자동화 도구를 사용하면 설정 오류를 줄이고, 일관성을 유지하며, 관리 작업을 효율적으로 수행할 수 있습니다. 특히 대규모 클러스터에서는 자동화가 필수적입니다.
Ansible을 이용한 쿠버네티스 관리 자동화
Ansible 개요
Ansible은 오픈 소스 IT 자동화 도구로, 설정 관리, 애플리케이션 배포, 작업 자동화를 간편하게 수행할 수 있습니다. YAML 형식의 플레이북(Playbook)을 작성하여 다양한 작업을 자동화할 수 있습니다.
Ansible 설치
Ansible을 설치하려면 다음 명령어를 사용합니다.
sudo apt-get update
sudo apt-get install ansible -y
인벤토리 파일 설정
Ansible 인벤토리 파일은 관리할 호스트 목록을 정의합니다.
[masters]
master1 ansible_host=192.168.1.1
[nodes]
node1 ansible_host=192.168.1.2
node2 ansible_host=192.168.1.3
Ansible 플레이북 작성
플레이북은 YAML 형식으로 작성되며, 특정 작업을 자동화하는 데 사용됩니다. 다음은 쿠버네티스 클러스터를 설정하는 예제입니다.
- hosts: masters
become: yes
tasks:
- name: Install Docker
apt:
name: docker.io
state: present
- name: Add Kubernetes APT key
apt_key:
url: https://packages.cloud.google.com/apt/doc/apt-key.gpg
state: present
- name: Add Kubernetes APT repository
apt_repository:
repo: deb http://apt.kubernetes.io/ kubernetes-xenial main
state: present
- name: Install kubeadm, kubelet, and kubectl
apt:
name: "{{ item }}"
state: present
with_items:
- kubeadm
- kubelet
- kubectl
- name: Initialize Kubernetes master
command: kubeadm init --pod-network-cidr=10.244.0.0/16
- name: Create .kube directory
file:
path: /root/.kube
state: directory
mode: 0700
- name: Copy admin.conf to .kube/config
copy:
src: /etc/kubernetes/admin.conf
dest: /root/.kube/config
remote_src: yes
- name: Install Calico network plugin
command: kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
- hosts: nodes
become: yes
tasks:
- name: Install Docker
apt:
name: docker.io
state: present
- name: Add Kubernetes APT key
apt_key:
url: https://packages.cloud.google.com/apt/doc/apt-key.gpg
state: present
- name: Add Kubernetes APT repository
apt_repository:
repo: deb http://apt.kubernetes.io/ kubernetes-xenial main
state: present
- name: Install kubeadm, kubelet, and kubectl
apt:
name: "{{ item }}"
state: present
with_items:
- kubeadm
- kubelet
- kubectl
- name: Join Kubernetes node to the cluster
command: kubeadm join 192.168.1.1:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
Ansible 플레이북 실행
플레이북을 실행하여 쿠버네티스 클러스터를 설정합니다.
ansible-playbook -i inventory.ini playbook.yml
Terraform을 이용한 쿠버네티스 관리 자동화
Terraform 개요
Terraform은 인프라를 코드로 관리할 수 있게 해주는 오픈 소스 도구입니다. 선언적 구성 파일을 사용하여 인프라를 프로비저닝하고 관리합니다.
Terraform 설치
Terraform을 설치하려면 다음 명령어를 사용합니다.
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install terraform
Terraform 설정 파일 작성
Terraform 설정 파일은 .tf
확장자로 작성되며, 인프라 리소스를 정의합니다. 다음은 AWS에서 쿠버네티스 클러스터를 설정하는 예제입니다.
provider "aws" {
region = "us-west-2"
}
resource "aws_vpc" "k8s_vpc" {
cidr_block = "10.0.0.0/16"
}
resource "aws_subnet" "k8s_subnet" {
vpc_id = aws_vpc.k8s_vpc.id
cidr_block = "10.0.1.0/24"
availability_zone = "us-west-2a"
}
resource "aws_security_group" "k8s_sg" {
vpc_id = aws_vpc.k8s_vpc.id
ingress {
from_port = 0
to_port = 65535
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 65535
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_instance" "k8s_master" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.medium"
subnet_id = aws_subnet.k8s_subnet.id
security_groups = [aws_security_group.k8s_sg.name]
tags = {
Name = "k8s-master"
}
provisioner "remote-exec" {
inline = [
"sudo apt-get update",
"sudo apt-get install -y docker.io",
"sudo systemctl enable docker",
"sudo systemctl start docker",
"curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -",
"sudo apt-add-repository 'deb http://apt.kubernetes.io/ kubernetes-xenial main'",
"sudo apt-get update",
"sudo apt-get install -y kubelet kubeadm kubectl",
"sudo kubeadm init --pod-network-cidr=10.244.0.0/16",
"mkdir -p $HOME/.kube",
"sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config",
"sudo chown $(id -u):$(id -g) $HOME/.kube/config",
"kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml"
]
connection {
type = "ssh"
user = "ubuntu"
private_key = file("~/.ssh/id_rsa")
host = self.public_ip
}
}
}
resource "aws_instance" "k8s_node" {
count = 2
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.medium"
subnet_id = aws_subnet.k8s_subnet.id
security_groups = [aws_security_group.k8s_sg.name]
tags = {
Name = "k8s-node-${count.index}"
}
provisioner "remote-exec" {
inline = [
"sudo apt-get update",
"sudo apt-get install -y docker.io",
"sudo systemctl enable docker",
"sudo systemctl start docker",
"curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -",
"sudo apt-add-repository 'deb http://apt.kubernetes.io/ kubernetes-xenial main'",
"sudo apt-get update",
"sudo apt-get install -y kubelet kubeadm kubectl",
"sudo kubeadm join ${aws_instance.k8s_master.public_ip}:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>"
]
connection {
type = "ssh"
user = "ubuntu"
private_key = file("~/.ssh/id_rsa")
host = self.public_ip
}
}
}
Terraform 실행
Terraform을 실행하여 쿠버네티스 클러스터를 프로비저닝합니다.
terraform init
terraform apply
쿠버네티스 관리 자동화의 장점
- 일관성 유지: 자동화된 설정 파일을 사용하여 일관된 환경을 구축할 수 있습니다.
- 효율성 향상: 수동 작업을 줄이고, 반복적인 작업을 자동화하여 효율성을 높일 수 있습니다.
- 오류 감소: 수동 설정 시 발생할 수 있는 오류를 줄이고, 신뢰성을 높일 수 있습니다.
- 확장성: 대규모 클러스터 관리 시 자동화 도구를 사용하여 쉽게 확장할 수 있습니다.
결론
쿠버네티스 클러스터 관리 자동화는 클러스터의 설정, 관리 및 유지보수를 간편하게 하고, 효율성을 높이며, 오류를 줄이는 데 필수적입니다. Ansible과 Terraform을 사용하여 클러스터를 자동화하는 방법을 설명하였으며, 이를 통해 일관된 환경을 구축하고, 관리 작업을 효율적으로 수행할 수 있습니다. 이를 통해 안정적이고 신뢰할 수 있는 쿠버네티스 클러스터를 구축할 수 있기를 바랍니다.