✅ 설치 환경
- Ubuntu 22.04 LTS VM (Local PC에서 구성)
- CPU 4Core / Memory 4GB / Storage 40GB
- Master Node 1대, Worker Node 2대
✅ 전체적인 구성 흐름
- Windows 워크스테이션에서 Ubuntu VM 생성 (과정 생략)
- Ubuntu VM에 KVM 설치 (Terraform이 VM 생성 가능하도록)
- Terraform으로 VM 여러 개 생성 // 여기까지 완료
- Kubernetes 설치 (Kind로 설치) -> 다음편부터!
- Cilium 설치 후 네트워크 테스트
* VM 사양이 CPU 4코어, RAM 4GB라서 Kubernetes 클러스터를 구성할 때 Node 개수를 2~3개 이하로 제한
1️⃣ 필수 패키지 설치 및 Ubuntu VM에 가상화 환경 설정 (KVM)
1. Ubuntu에 패키지 업데이트 및 필수 패키지 설치, kvm 설치
sudo apt update && sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager apt-transport-https ca-certificates curl gpg net-tools jq traceroute
sudo add-apt-repository ppa:rmescandon/yq
sudo apt update
sudo apt install yq -y
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.forwarding = 1
vm.overcommit_memory = 1
vm.panic_on_oom = 0
vm.max_map_count = 1048576
fs.file-max = 8388608
fs.inotify.max_user_watches = 12288
kernel.pid_max = 4194304
net.core.netdev_max_backlog = 1000
net.core.somaxconn = 1024
net.ipv4.tcp_fin_timeout = 60
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
EOF
sudo sysctl --system
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl containerd
sudo apt-mark hold kubelet kubeadm kubectl
mkdir -p /etc/containerd/
containerd config default > /etc/containerd/config.toml
sed -i "s/SystemdCgroup = false/SystemdCgroup = true/g" /etc/containerd/config.toml
sudo crictl config --set runtime-endpoint=unix:///run/containerd/containerd.sock --set image-endpoint=unix:///run/containerd/containerd.sock
systemctl daemon-reload
systemctl enable --now containerd
systemctl enable --now kubelet
2. KVM 서비스 활성화
sudo systemctl enable --now libvirtd
sudo usermod -aG libvirt $USER
newgrp libvirt
3. 설치 확인 (아래와 같이 빈 목록이 나와야 한다.)
virsh list --all
Id Name State
------------------------------
2️⃣ Terraform 설치
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
// Terraform 설치
sudo apt update && sudo apt install -y terraform
// Terraform 설치 확인
terraform -v
위 과정으로 Terraform을 설치하는데 계속 "E: Unable to locate package terraform" 에러가 떠서, GPT에게 물어보니.. APT 대신 Snap으로 설치할 수 있다고 해서 아래의 명령어로 테라폼을 설치해주었다.
// Terraform snap으로 설치
sudo snap install terraform --classic
// Terraform 버전 확인
terraform -v
3️⃣ Terraform으로 VM 여러 개 생성 ( Master 1대, Worker 2대 필요)
: Terraform을 사용하여 가상 머신 3개(Master vm 1대, Worker vm 2대)를 자동 생성해보자.
1. Terraform 파일 (main.tf) 작성
: 아래의 명령어로 main.tf를 작성해주자.
mkdir ~/terraform-kvm && cd ~/terraform-kvm
nano main.tf
2. VM 3대 생성하는 Terraform 코드 작성
: Terraform 기본 저장소(registry.terraform.io/hashicorp/libvirt)에는 libvirt 프로바이더가 없기 때문에 별도로 설정해줘야 한다.
<main.tf>
terraform {
required_providers {
libvirt = {
source = "dmacvicar/libvirt"
version = "~> 0.7.0"
}
}
}
provider "libvirt" {
uri = "qemu:///system"
}
# 공통 Ubuntu VM 이미지 생성
resource "libvirt_volume" "ubuntu_base" {
name = "ubuntu_base"
pool = "default"
source = "/home/ubuntu/ubuntu-22.04-server.qcow2" # 미리 다운받은 이미지
format = "qcow2"
}
# 마스터 노드 생성 (1개)
resource "libvirt_domain" "master_node" {
name = "k8s-master"
memory = "3072" # RAM 3GB (마스터는 조금 더 필요)
vcpu = 2 # CPU 2개 (여유있게 설정)
disk {
volume_id = libvirt_volume.ubuntu_base.id
}
network_interface {
network_name = "default"
}
cloudinit = libvirt_cloudinit_disk.master_init.id
}
# 워커 노드 생성 (2개)
resource "libvirt_domain" "worker_nodes" {
count = 2
name = "k8s-worker-${count.index + 1}"
memory = "2048" # RAM 2GB
vcpu = 2 # CPU 2개
disk {
volume_id = libvirt_volume.ubuntu_base.id
}
network_interface {
network_name = "default"
}
cloudinit = libvirt_cloudinit_disk.worker_init.id
}
# 클라우드-이니트 (초기 SSH 설정)
resource "libvirt_cloudinit_disk" "master_init" {
name = "master_init.iso"
pool = "default"
user_data = <<EOF
#cloud-config
hostname: k8s-master
EOF
}
resource "libvirt_cloudinit_disk" "worker_init" {
name = "worker_init.iso"
pool = "default"
user_data = <<EOF
#cloud-config
hostname: k8s-worker
EOF
}
또 마스터 노드와 워커 노드에서 참조할 ubuntu qcow2에 대해 개별 디스크를 사용하도록 각각 생성해줘야 한다.
<워커 노드 디스크 생성>
cd /var/lib/libvirt/images/
# 워커 노드 1 디스크 생성
sudo qemu-img create -f qcow2 -b ubuntu_base.qcow2 -F qcow2 k8s-worker-1.qcow2 10G
# 워커 노드 2 디스크 생성
sudo qemu-img create -f qcow2 -b ubuntu_base.qcow2 -F qcow2 k8s-worker-2.qcow2 10G
# 권한 설정
sudo chown libvirt-qemu:kvm k8s-worker-1.qcow2 k8s-worker-2.qcow2
sudo chmod 644 k8s-worker-1.qcow2 k8s-worker-2.qcow2
위 사진과 같이 각 마스터와 워커 노드에 대해 qcow2가 별도로 생성되어 있고, 소유 권한이 노란색 표시한 부분과 같아야 한다.
💡 설명
- KVM을 Terraform으로 관리 (provider "libvirt")
- Ubuntu 22.04 VM 이미지 사용 (source = "/home/ubuntu/ubuntu-22.04-server.qcow2")
- VM 3개 생성 (count = 3)
- Master Node에 RAM 3GB, vCPU 2개 할당 / Worker Node에 RAM 2GB, vCPU 2개 할당
- cloudinit 초기 설정 추가
4️⃣ Terraform 실행
1. Terraform 초기화
terraform init
terraform init 명령어로 초기화 확인!
2. 배포될 VM 확인
terraform plan
3. Terraform으로 VM 생성
terraform apply -auto-approve
4. 생성된 VM 목록 확인
: 아래와 같이 State에 running이 적혀있으면 성공!
virsh list --all
아래는 Terraform으로 vm 생성하고 실행하면서 겪은 자잘자잘한 에러들...
🔧 terraform plan 을 입력했을 때 "Terraform will perform the following actions~ 하며 몇개의 노드 정보가 뜨길래 apply 로 생성까지 하려고했으나.. 역시 바로 될 리가 없지 ^^.. 아래와 같이 에러가 떴다. can't find storage pool 'default' 와 Error: error while starting the creation of CloudInit's ISO image: exec: "mkisofs": executable file not found in $PATH 가 뜬 것..두둥
일단 can'f find storage pool 'default'는 Terraform이 libvirt의 기본 스토리지 풀을 찾지 못하는 문제로, virsh pool-list --all 를 입력하면 위 사진과 같이 비어있는 상태로 출력된다. 아래 명령어로 기본 스토리지 풀을 생성해준 뒤, 다시 terraform apply -auto-approve 명령어로 실행!
virsh pool-define-as --name default --type dir --target /var/lib/libvirt/images
virsh pool-start default
virsh pool-autostart default
🔧 그다음 에러인 exec: "mkisofs": executable file not found in $PATH 는 Terraform이 cloud-init ISO 파일을 만들 때 필요한 mkisofs 프로그램을 찾지 못하는 문제로 아래와 같이 설치해주고 다시 확인해보자.
// genisoimage 설치
sudo apt update && sudo apt install -y genisoimage
// 설치 확인
which mkisofs
// 출력 결과
/usr/bin/mkisofs
🔧 마지막으로 또 에러가 떴는데, Terraform 으로 Ubuntu VM 생성을 해주려면, 내 vm 안에 설치하려는 운영체제의 qcow2 파일이 필요하다. 까먹고 내가 설치를 안한것;;
🔧 그리고 가상화 설정도.. 해주어야 한다.
// 아래 명령어를 쳤을 때 숫자가 0이 아닌 1 이상의 숫자가 나와야 kvm 지원!
egrep -c '(vmx|svm)' /proc/cpuinfo
// KVM 모듈 로드
sudo modprobe kvm
sudo modprobe kvm_intel
// KVM 정상적으로 동작하는지 확인
kvm-ok
'Opensource > k8s' 카테고리의 다른 글
Kubernetes 클러스터에서 Nginx 서비스를 생성하고 브라우저에서 접근하기 (0) | 2025.02.17 |
---|---|
WSL에서 kind로 쿠버네티스 멀티 노드 클러스터 생성하기 (2) | 2025.02.12 |
Windows WSL 환경에서 kind로 쿠버네티스(Kubernates) 생성하기 (0) | 2025.02.12 |