
작은 보드 컴퓨터 위에 작은 클라우드를 올리는 일은 꽤 묘한 경험이다. 책상 위에 놓인 손바닥 크기의 장비가 Kubernetes를 돌리고 웹 서비스를 내보낸다. 거대한 데이터센터의 축소판이 바로 눈앞에 있는 셈이다. 이번에는 NVIDIA Jetson Xavier에서 Minikube를 사용해 웹 서비스를 띄우는 과정을 정리해 본다. Jetson은 ARM64 아키텍처라 일반 x86 PC와 몇 가지 차이가 있지만 구조는 거의 동일하다.
Jetson Xavier에서 Kubernetes를 돌리는 이유
Jetson 계열 장비는 원래 AI Edge 컴퓨팅을 위해 만들어졌다. 하지만 GPU가 있는 작은 서버이기도 하다. 그래서 다음 같은 실험이 가능하다.
- Edge AI 서비스
- Edge Kubernetes
- 로컬 AI inference 서비스
- IoT Gateway
즉 Jetson 하나가 Edge Cloud Node가 되는 셈이다.
1. 환경 준비
Jetson Xavier는 보통 Ubuntu 기반 JetPack OS를 사용한다.
먼저 패키지를 업데이트한다.
sudo apt update
sudo apt upgrade -y
필요한 도구 설치
sudo apt install -y curl apt-transport-https
2. Docker 설치
Minikube의 가장 간단한 드라이버는 Docker다.
sudo apt install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker
현재 사용자에게 docker 권한을 준다.
sudo usermod -aG docker $USER
로그아웃 후 다시 로그인해야 적용된다.
3. kubectl 설치 (ARM64)
curl -LO https://dl.k8s.io/release/stable.txt
VERSION=$(cat stable.txt)
curl -LO https://dl.k8s.io/release/$VERSION/bin/linux/arm64/kubectl
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
확인
(base) sunshout@xavier:~/k8s$ kubectl version --client
Client Version: v1.35.2
Kustomize Version: v5.7.1
4. Minikube 설치 (ARM64)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-arm64
sudo install minikube-linux-arm64 /usr/local/bin/minikube
확인
(base) sunshout@xavier:~/k8s$ minikube version
minikube version: v1.38.1
commit: c93a4cb9311efc66b90d33ea03f75f2c4120e9b0
5. Minikube 클러스터 시작
Jetson Xavier는 CPU와 메모리가 제한적이기 때문에 적당한 설정이 필요하다.
예시:
minikube start \
--driver=docker \
--cpus=4 \
--memory=4096
Jetson Xavier AGX라면 6 CPU / 8GB도 충분히 가능하다.
클러스터 상태 확인
(base) sunshout@xavier:~/k8s$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
노드 확인
(base) sunshout@xavier:~/k8s$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 21m v1.35.1
Jetson 같은 장비에서 Kubernetes를 쓸 때 가장 깔끔한 방법은 Minikube를 하나의 시스템 서비스처럼 다루는 것이다. 부팅하면 자동으로 클러스터가 올라오고, systemctl로 시작/정지할 수 있다. 작은 Edge 서버를 운영하는 느낌이 난다.
systemd 서비스 파일 생성
서비스 파일을 만든다.
sudo vi /etc/systemd/system/minikube.service
[Unit]
Description=Minikube Kubernetes Cluster
After=docker.service
Requires=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
User=sunshout
Environment=HOME=/home/sunshout
ExecStart=/usr/local/bin/minikube start --driver=docker --cpus=6 --memory=6144
ExecStop=/usr/local/bin/minikube stop
TimeoutStartSec=900
[Install]
WantedBy=multi-user.target
설명:
- Type=oneshot
Minikube는 데몬이 아니라 실행 후 종료되는 방식이라 이 옵션을 사용한다. - RemainAfterExit=yes
start 명령이 끝나도 서비스가 활성 상태로 유지된다. - User
Minikube를 실행할 Linux 사용자 - ExecStart
클러스터 시작 - ExecStop
클러스터 종료
systemd reload
새 서비스 등록
sudo systemctl daemon-reload
서비스 실행
Minikube 시작
sudo systemctl start minikube
상태 확인
systemctl status minikube
(base) sunshout@xavier:~/k8s$ systemctl status minikube
● minikube.service - Minikube Kubernetes Cluster
Loaded: loaded (/etc/systemd/system/minikube.service; disabled; vendor preset: enabled)
Active: active (exited) since Sat 2026-03-14 09:12:58 KST; 10s ago
Process: 1971019 ExecStart=/usr/local/bin/minikube start --driver=docker --cpus=6 --memory=6144 (code=exited, status=0/SUCCESS)
Main PID: 1971019 (code=exited, status=0/SUCCESS)
3월 14 09:11:14 xavier minikube[1971019]: ! Starting v1.39.0, minikube will default to "containerd" container runtime. See #21973 for more info.
3월 14 09:11:14 xavier minikube[1971019]: * Using Docker driver with root privileges
3월 14 09:11:14 xavier minikube[1971019]: * Starting "minikube" primary control-plane node in "minikube" cluster
3월 14 09:11:14 xavier minikube[1971019]: * Pulling base image v0.0.50 ...
3월 14 09:12:52 xavier minikube[1971019]: * Configuring bridge CNI (Container Networking Interface) ...
3월 14 09:12:53 xavier minikube[1971019]: * Verifying Kubernetes components...
3월 14 09:12:53 xavier minikube[1971019]: - Using image gcr.io/k8s-minikube/storage-provisioner:v5
3월 14 09:12:57 xavier minikube[1971019]: * Enabled addons: default-storageclass, storage-provisioner
3월 14 09:12:58 xavier minikube[1971019]: * Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
3월 14 09:12:58 xavier systemd[1]: Finished Minikube Kubernetes Cluster.
부팅 시 자동 시작
sudo systemctl enable minikube
이제 Jetson이 부팅하면 자동으로 Kubernetes가 올라온다.