yeonghoon.kim

  • 게시판
  • 갤러리

ARM Kubernetes 구축 2 - VM 생성과 클러스터 설치

김영훈 2026.02.14 10:17 조회 수 : 138

VNC / KVM 설치 후 VM 3개 만들고 Kubernetes 클러스터 설치.

macvlan은 포기.

WiFi 환경에서 VM 외부 통신이 불안정해서 libvirt default NAT 사용.

VM 구성.

k8s-master
192.168.122.10
4 core
8GB
50GB

k8s-worker1
192.168.122.11
4 core
8GB
50GB

k8s-worker2
192.168.122.12
4 core
8GB
50GB

Ubuntu Server ARM64 ISO 준비.

mkdir -p ~/iso
cd ~/iso
wget https://cdimage.ubuntu.com/releases/24.04.4/release/ubuntu-24.04.4-live-server-arm64.iso

virt-manager로 VM 생성.

Memory 8192 MB
CPU 4
Storage 50 GB
Network default NAT

인터페이스 확인.

ip link show

Ubuntu VM 기본 인터페이스는 enp1s0.

고정 IP 설정.

sudo tee /etc/netplan/99-static.yaml > /dev/null << 'EOF'
network:
  version: 2
  ethernets:
    enp1s0:
      dhcp4: false
      addresses: [192.168.122.10/24]
      routes:
        - to: default
          via: 192.168.122.1
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]
EOF

sudo chmod 600 /etc/netplan/99-static.yaml

sudo netplan apply

worker는 주소만 변경.

192.168.122.11
192.168.122.12

SSH 키 설정.

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ''

ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]

sudo NOPASSWD 설정.

echo "ubuntu ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ubuntu
sudo chmod 440 /etc/sudoers.d/ubuntu

모든 노드 공통.

sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

커널 모듈.

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

sudo modprobe overlay
sudo modprobe br_netfilter

sysctl.

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

sudo sysctl --system

containerd 설치.

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg

sudo apt-get install -y containerd

sudo mkdir -p /etc/containerd
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
sudo systemctl enable containerd

Kubernetes 패키지 설치.

sudo mkdir -p /etc/apt/keyrings

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/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.29/deb/ /' | \
  sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl

sudo apt-mark hold kubelet kubeadm kubectl

sudo systemctl enable kubelet

master 초기화.

sudo kubeadm init \
  --pod-network-cidr=10.244.0.0/16 \
  --apiserver-advertise-address=192.168.122.10 \
  --control-plane-endpoint=192.168.122.10

kubectl 설정.

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

Flannel 설치.

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

worker join.

sudo kubeadm join 192.168.122.10:6443 --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash>

검증.

kubectl get nodes -o wide

kubectl get pods --all-namespaces

nginx 테스트.

kubectl create deployment nginx-test --image=nginx

kubectl expose deployment nginx-test --port=80 --type=NodePort

NODEPORT=$(kubectl get svc nginx-test -o jsonpath='{.spec.ports[0].nodePort}')

curl http://192.168.122.10:$NODEPORT

문제 확인용.

kubectl describe pod <pod-name>

kubectl get events --all-namespaces --sort-by='.lastTimestamp'

sudo systemctl status containerd
sudo journalctl -u containerd -f

sudo systemctl status kubelet
sudo journalctl -u kubelet -f

초기화.

sudo kubeadm reset -f
sudo rm -rf /etc/cni/net.d
sudo rm -rf ~/.kube

worker 초기화.

sudo kubeadm reset -f
sudo rm -rf /etc/cni/net.d

  • 추천 0

  • 비추천 0
이 게시물을
목록

댓글 0

번호 제목 글쓴이 날짜 조회 수
공지 2025 일본 여행 계획 김영훈 2024.10.10 4118
공지 현금, 저축, 투자, 지출, 예산, 보험 내역(2024-05-30) 김영훈 2024.03.10 3752
317 OpenClaw 복원과 GLM-5.1 전환 김영훈 2026.04.07 145
316 교토 4박 5일 여행 일정: Google Calendar로 관리하는 일정짜기 김영훈 2026.04.05 124
315 7일간의 일본 여행 일정 짜기: 신칸센 + JR 패스 + Google Calendar 활용 프로젝트 김영훈 2026.03.28 128
314 JSON-LD 학습 - 메일과 Calendar 자동 인식 김영훈 2026.03.28 151
313 WAF 운영 6주 분석 김영훈 2026.03.13 199
312 Tech Support 플랫폼 김영훈 2026.03.04 80
311 ChloeToken 테스트넷 배포 김영훈 2026.03.02 232
310 Redis 대기열 시스템 김영훈 2026.03.01 212
309 Apache RewriteRule 쿼리스트링 처리 김영훈 2026.02.28 258
308 비트코인 자동매매 봇 대시보드 김영훈 2026.02.21 144
307 ARM Kubernetes 구축 6 - 무중단 업그레이드 김영훈 2026.02.20 208
306 ARM Kubernetes 구축 8 - 실전 보안 RBAC 네트워크 정책 Pod 보안 김영훈 2026.02.20 194
305 ARM Kubernetes 구축 7 - 클러스터 무중단 업그레이드 v1.29→v1.35 김영훈 2026.02.20 252
304 ARM Kubernetes 구축 4 - 외부 접근 환경 VPN MetalLB Ingress 김영훈 2026.02.18 246
303 ARM Kubernetes 구축 5 - 실전 업그레이드 경험기 v1.29→v1.35 김영훈 2026.02.18 238
302 ARM Kubernetes 구축 3 - 모니터링 스택 Prometheus Grafana 김영훈 2026.02.16 179
301 ARM Kubernetes 구축 1 - VNC & KVM 설치 김영훈 2026.02.14 70
» ARM Kubernetes 구축 2 - VM 생성과 클러스터 설치 김영훈 2026.02.14 138
299 OpenClaw 모델 삭제 사고 김영훈 2026.02.13 114
298 LLM 모델 선정 김영훈 2026.02.12 141
쓰기 태그
 첫 페이지 1 2 3 4 5 6 7 8 9 10 끝 페이지