1.33v 쿠버네티스 클러스터 구축

YYY·2025년 5월 10일

UTM + Ubuntu VM 3대에 만드는 안정적인 Kubernetes 클러스터


1. UTM VM 3대 구성

  1. UTM에서 Ubuntu 22.04 ARM64 VM
    • CPU 2, RAM 4 GB, 디스크 20 GB 이상
  2. Ubuntu 22.04 ARM64 VM 설치 → 사용자 pcadmin 생성
  3. SSH 활성화
  4. master, worker1, worker2 VM 3대 생성

2. Static IP 할당 (각 VM) - 혹시모르니까

# 인터페이스 이름(enp0s1)은 'ip a'로 확인 후 바꿔주세요
sudo tee /etc/netplan/01-static.yaml > /dev/null <<EOF
network:
  version: 2
  ethernets:
    enp0s1:
      dhcp4: no
      addresses:
        - 192.168.64.X/24   # master:7, worker1:8, worker2:10
      gateway4: 192.168.64.1
      nameservers:
        addresses: [8.8.8.8,1.1.1.1]
EOF
sudo netplan apply
ip a  # 설정 확인

3. 모든 VM - 공통 사전 작업

# ① swap 비활성화
sudo swapoff -a
sudo sed -i '/ swap /s/^/#/' /etc/fstab

# ② 커널 설정 (bridge & forward)
sudo modprobe br_netfilter
sudo tee /etc/sysctl.d/k8s.conf > /dev/null <<EOF
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
sudo sysctl --system

# ③ containerd 설치 & systemd cgroup 활성화
sudo apt update
sudo apt install -y containerd
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml >/dev/null

# → 핵심: cgroup 드라이버를 systemd로 맞추기
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

sudo systemctl restart containerd

4.모든 VM - kubeadm 도구 설치

# ① Google apt-key 설치
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg \
  https://packages.cloud.google.com/apt/doc/apt-key.gpg

# ② Kubernetes apt 소스 추가
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] \
  https://apt.kubernetes.io/ kubernetes-xenial main" | \
  sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt update

# ③ kubelet, kubeadm, kubectl 설치 & 버전 고정
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

5.Master에서 - kubeconfig, flannel

sudo kubeadm init \
  --apiserver-advertise-address=192.168.64.7 \
  --pod-network-cidr=10.244.0.0/16

# pcadmin 계정용 kubeconfig 복사
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 워커 조인 명령 출력
kubeadm token create --print-join-command

# Flannel CNI 설치 & 검증
kubectl apply -f \
  https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

6.Worker 조인

# master에서 복사한 join 커맨드
sudo kubeadm join 192.168.64.7:6443 \
  --token <TOKEN> \
  --discovery-token-ca-cert-hash sha256:<HASH>

7.kube-proxy CrashLoop 방지 패치

kubectl -n kube-system get daemonset kube-proxy -o yaml \
  | sed '/args:/a\    - --nodeport-addresses=primary' \
  | kubectl apply -f -

트러블슈팅

증상원인 & 해결
API 서버 곧바로 죽음containerd cgroup 불일치 → SystemdCgroup=true 설정 확인
kubectl 연결 refused/timeoutadmin.conf 복사(/root/.kube/config 또는 $HOME/.kube/config) 또는 KUBECONFIG 설정
Worker join 실패sudo 미사용 또는 이전 join 잔여물 → sudo kubeadm reset -f
kube-proxy CrashLoopBackOff--nodeport-addresses=primary 패치
profile
무지렁이 탈출기

0개의 댓글