Ubuntu에서 Kubernetes 클러스터 구성하기

gclee·2025년 2월 19일

Kubernetes

목록 보기
6/7
post-thumbnail

개요

이 글에서는 Ubuntu Server 3대를 활용하여 Kubernetes 클러스터를 구축하는 방법을 설명합니다.

서버 정보

  • 마스터 노드: 192.168.0.101
  • 워커 노드 1: 192.168.0.102
  • 워커 노드 2: 192.168.0.103

Kubernetes 클러스터를 구성하기 위해 필요한 사전 준비부터 클러스터 초기화, 네트워크 설정, 워커 노드 추가까지 차례대로 설명합니다.


1. 사전 준비 (모든 노드에서 실행)

패키지 업데이트 및 필수 도구 설치

sudo apt update && sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
  • apt-transport-https: HTTPS를 통해 패키지를 다운로드할 수 있도록 함.
  • ca-certificates: 인증서를 관리하는 패키지.
  • curl: 네트워크 요청을 처리하기 위한 도구.

스왑 비활성화

sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab
  • 쿠버네티스는 스왑 메모리를 사용하지 않으므로 비활성화해야 함.

네트워크 옵션 설정

sudo cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

sudo cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sudo sysctl --system
  • br_netfilter 모듈을 로드하여 Kubernetes 네트워크 브리징을 활성화.
  • sysctl 설정을 적용하여 네트워크 트래픽이 올바르게 처리되도록 함.

2. 컨테이너 런타임 설치 (모든 노드에서 실행)

Containerd 설치 및 설정

sudo apt install -y containerd
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
  • containerd: 경량화된 컨테이너 런타임으로 쿠버네티스에서 기본적으로 사용.
  • SystemdCgroup 활성화: 쿠버네티스에서 컨테이너 관리를 systemd로 일원화하기 위해 필요.

3. 쿠버네티스 저장소 추가 (모든 노드에서 실행)

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
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
  • 공식 Kubernetes 패키지 저장소를 추가하여 최신 kubeadm, kubelet, kubectl을 설치할 수 있도록 설정.

4. 쿠버네티스 필수 컴포넌트 설치 (모든 노드에서 실행)

sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
  • kubeadm: 쿠버네티스 클러스터를 초기화하는 도구.
  • kubelet: 각 노드에서 Pod를 관리하는 핵심 컴포넌트.
  • kubectl: 쿠버네티스를 관리하는 CLI 도구.
  • apt-mark hold: 패키지 자동 업데이트 방지.

5. 쿠버네티스 클러스터 초기화 (마스터 노드에서 실행)

sudo kubeadm init --pod-network-cidr=10.244.0.0/16
  • 쿠버네티스 클러스터를 초기화하며, Pod 네트워크를 위한 CIDR을 설정.

kubectl 설정 (마스터 노드에서 실행)

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 마스터 노드에서 kubectl 명령어를 사용할 수 있도록 환경 설정.

6. 네트워크 플러그인 설치 (마스터 노드에서 실행)

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  • Flannel을 설치하여 Pod 간 네트워크 통신을 가능하게 함.
  • 네트워크 플러그인이 설치되지 않으면 노드 상태가 NotReady 상태로 유지됨.

7. 워커 노드 클러스터 추가 (워커 노드에서 실행)

마스터 노드에서 kubeadm init을 실행하면 다음과 같은 join 명령어가 출력됨.

kubeadm join 192.168.0.101:6443 --token <TOKEN> \
    --discovery-token-ca-cert-hash sha256:<HASH>

이 명령어를 각 워커 노드(192.168.0.102, 192.168.0.103)에서 실행하여 클러스터에 추가.


8. 클러스터 상태 확인 (마스터 노드에서 실행)

kubectl get nodes

정상적으로 설치되었다면 모든 노드가 Ready 상태여야 함.

배포 테스트

0개의 댓글