본문 바로가기

취업/프로젝트

쿠버네티스 환경 구축하기 / 2025.01.23

가상 머신 3대에 쿠버네티스 환경을 구축해보자.

MN: 마스터 노드

SN01, SN02: 워커 노드


▶ 쿠버네티스 설치 준비

쿠버네티스를 설치하기에 앞서 모든 노드(마스터&워커)에 아래의 사전 작업을 수행해야한다.

  • swap 비활성화
# swap 임시 비활성화
sudo swapoff -a

# swap 영구 비활성화
sudo sed -i '/swap/s/^/#/' /etc/fstab

# swap 비활성화 확인 (출력값 없음)
sudo swapon -s

 

  • 방화벽 비활성화
# 방화벽 비활성화
sudo ufw disable

# 비활성화 확인 -> Status: inactive 출력
sudo ufw status

 

  • /etc/hosts 수정
    • ifconfig로 노드 ip 확인 후 진행
    • sudo vim /etc/hosts

 

  • 필수 패키지 설치
sudo apt update && sudo apt install -y apt-transport-https curl

▶ Docker 설치

Docker 설치 방법은 아래 페이지에서 확인할 수 있으며 apt repository를 사용해 설치를 진행했다.

https://docs.docker.com/engine/install/ubuntu/

 

Ubuntu

Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.

docs.docker.com


# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

# Install Docker package
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 이미지를 실행하여 설치 확인
sudo docker run hello-world

 

▶ 쿠버네티스 설치

이제 쿠버네티스 설치를 진행해보자. 설치 방법은 아래 페이지에서 확인할 수 있다.

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

 

Installing kubeadm

This page shows how to install the kubeadm toolbox. For information on how to create a cluster with kubeadm once you have performed this installation process, see the Creating a cluster with kubeadm page. This installation guide is for Kubernetes v1.32. If

kubernetes.io

 


※ 마스터 & 워커 노드 모두 설치

# Update the package list and Install required packages
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

# Add Kubernetes GPG key
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

# Add Kubernetes repository
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

# Update package list again
sudo apt-get update

# Install Kubernetes components
sudo apt-get install -y kubelet kubeadm kubectl

# Prevent automatic updates
sudo apt-mark hold kubelet kubeadm kubectl

▶ 쿠버네티스 init (마스터 노드에서만)

모든 노드에 쿠버네티스 설치를 진행한 후, 마스터 노드에서 아래 명령어를 입력해 쿠버네티스 초기화를 수행해보자.

sudo kubeadm init --pod-network-cidr=192.168.0.0/16

 

오류 1: [ERROR CRI]: container runtime is not running
해결 방안:
sudo rm /etc/containerd/config.toml
sudo systemctl restart containerd

오류 2: [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]
해결 방안:
sudo su 

modprobe br_netfilter
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

 

초기화에 성공하면 아래 사진과 같은 출력이 나온다. 

여기서 root가 아닌 계정에서도 kubectl 명령어를 사용할 수 있게 mkdir -p $HOME/.kube 부터 3줄의 명령어를 입력해준다.

 

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

▶ 쿠버네티스 join (워커 노드에서만)

위의 사진의 마지막 줄에 kubeadm join 192.168. ~~~ 명령어가 출력되는데 이를 복사하여 모든 워커노드에 입력한다.


입력 후, 마스터 노드에서 kubectl get nodes 명령어를 사용하면 join 된 것을 확인할 수 있다.

 

그러나, CNI 플러그인을 설치하지 않았기 때문에 모든 노드가 NotReady 상태이다.

kubectl get pods -A 명령어를 입력하면 coredns 파드가 Pending 상태인 것을 확인할 수 있다.


▶ Calico 설치 (마스터 노드에서만)

칼리코 설치 방법은 아래 페이지에서 확인할 수 있다.

https://docs.tigera.io/calico/3.28/getting-started/kubernetes/quickstart

 

Quickstart for Calico on Kubernetes | Calico Documentation

Install Calico on a single-host Kubernetes cluster for testing or development in under 15 minutes.

docs.tigera.io


# Install Calico
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/tigera-operator.yaml

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/custom-resources.yaml

명령어를 실행하면 calico pod들이 생성되고, 모든 노드의 상태가 Ready로 바뀐 것을 확인할 수 있다.