DevOps는 소프트웨어 엔지니어와 개발자가 애플리케이션을 개발하고 배포하는 방식을 크게 바꾸어 놓았습니다. 이러한 변화의 중심에는 단연 쿠버네티스(Kubernetes)가 있습니다.
이번 글에서는 우분투(Ubuntu)에서 MicroK8s를 사용해 로컬 쿠버네티스 인스턴스를 구축하는 방법을 단계별로 살펴보겠습니다. 이 환경을 갖추면 컨테이너 애플리케이션을 안전하고 안정적이며 확장성 높은 방식으로 손쉽게 호스팅할 수 있습니다.
왜 MicroK8s를 사용해야 할까?
쿠버네티스는 컨테이너화된 애플리케이션의 배포, 스케일링, 관리를 자동화하여 DevOps 운영을 획기적으로 효율화하는 오픈소스 플랫폼입니다. 흔히 K8s라고도 부르는데, 이는 'Kubernetes'라는 단어에서 k와 s 사이의 여덟 글자에서 유래한 이름입니다. MicroK8s는 말 그대로 경량화된 미니 쿠버네티스 인스턴스라고 이해하면 됩니다.
우분투를 기반으로 하는 대부분의 퍼블릭 및 프라이빗 프로덕션급 클라우드 환경에서는 Charmed Kubernetes를 사용해 컨테이너 앱을 관리합니다. 하지만 Charmed Kubernetes는 리소스 소모가 많고, 제대로 구성하려면 상당한 수준의 전문 지식이 필요하다는 단점이 있습니다.
바로 이런 경우에 MicroK8s가 좋은 대안이 됩니다. MicroK8s는 개발자 PC, IoT 기기, 엣지 디바이스에서 가상 머신 없이도 네이티브하게 실행할 수 있는 작고 가벼운 업스트림 쿠버네티스입니다. 또한 크로스 플랫폼을 지원하여 Intel과 ARM 아키텍처 모두에서 문제없이 동작합니다.
MicroK8s는 최소한의 진입 장벽으로 쿠버네티스를 익힐 수 있는 가장 효율적인 방법 중 하나입니다. CNCF(Cloud Native Computing Foundation)의 공식 인증을 받은 쿠버네티스 업스트림으로, 업계 표준에 부합하고 상호 운용 가능한 구현임을 보장받을 수 있습니다.
1단계: 우분투에 MicroK8s 설치하기
snap 명령어를 사용하면 우분투에 MicroK8s를 매우 간단하게 설치할 수 있습니다.
sudo snap install microk8s --classicGUI 환경을 선호한다면 우분투 소프트웨어 센터(Ubuntu Software Center)를 이용할 수도 있습니다. 검색창에 microk8s를 입력한 후 설치(Install) 버튼을 클릭하기만 하면 됩니다.

2단계: 방화벽에서 MicroK8s 통신 허용하기
파드(pod) 간 원활한 통신과 인터넷 연결을 위해서는 방화벽의 컨테이너 네트워크 인터페이스(cni0)에서 들어오고 나가는 트래픽을 허용해야 합니다.
파드는 쿠버네티스에서 가장 작은 배포 단위로, 스토리지와 네트워크 리소스 등을 공유하는 하나 또는 여러 개의 컨테이너 묶음을 의미합니다.
sudo ufw allow in on cni0 && sudo ufw allow out on cni0그다음 아래 명령어를 실행합니다:
sudo ufw default allow routed3단계: 사용자를 microk8s 그룹에 추가하기
현재 상태에서는 대부분의 MicroK8s 명령어를 실행할 때 sudo를 함께 입력해야 합니다. 프로덕션 서버라면 좋은 보안 조치이지만, 개발용 머신에서는 굳이 필요하지 않을 수 있습니다.
sudo 입력을 생략하려면 사용자 계정을 microk8s 그룹에 추가하세요.
sudo usermod -aG microk8s $USER또한 현재 사용자를 ~/.kube 디렉터리의 소유자로 변경합니다.
sudo chown -f -R $USER ~/.kube변경 사항을 적용하려면 다음 명령어로 사용자 그룹을 다시 로드합니다:
newgrp microk8s4단계: 필수 애드온 활성화하기
기본적으로 MicroK8s는 엣지 및 IoT 기기에서 최소한의 리소스만 사용하도록 핵심 기능만 포함하고 있습니다. 하지만 몇 가지 중요한 애드온(addon)을 추가로 설치하면 MicroK8s 서비스를 훨씬 편리하게 관리할 수 있습니다. microk8s 명령어로 DNS, 대시보드, 스토리지 애드온을 활성화해 보겠습니다.
microk8s enable dns dashboard storageDNS 애드온은 다른 서비스들이 필요로 하는 경우가 많으므로 항상 활성화해 두는 것을 권장합니다.
대시보드 애드온은 MicroK8s에서 실행 중인 서비스 현황을 그래픽으로 한눈에 보여주며, 서비스 관리 용도로도 활용할 수 있습니다.
사용 가능한 MicroK8s 애드온 목록은 다음 명령어로 확인할 수 있습니다:
microk8s status5단계: MicroK8s 대시보드 접속하기
대시보드 애드온을 활성화했다면 이제 웹 브라우저를 통해 MicroK8s 대시보드에 접속할 수 있습니다.
먼저 대시보드 파드의 IP 주소가 필요합니다. 다음 명령어로 확인할 수 있습니다:
microk8s kubectl get all --all-namespaces
명령어 출력 결과에서 kubernetes-dashboard 서비스가 IP 주소 10.152.183.35의 TCP 443 포트에서 실행 중인 것을 확인할 수 있습니다. 단, 이 IP 주소는 무작위로 생성되므로 실제 환경에서는 값이 다를 수 있습니다.
브라우저에서 출력된 IP 주소로 접속합니다. 이 예시에서는 https://10.152.183.35:443이며, 정확한 URL을 입력했는지 반드시 확인하세요.
보안을 위해 쿠버네티스 대시보드는 로그인 시 인증 정보를 요구합니다. 다음 명령어로 기본 대시보드 토큰을 조회한 뒤, 출력된 kubernetes.io/service-account-token 값을 복사하여 토큰 입력란에 붙여넣으면 로그인할 수 있습니다.
token=$(microk8s kubectl -n kube-system get secret | grep default-token | cut -d " " -f1)
microk8s kubectl -n kube-system describe secret $token
로그인에 성공하면 대시보드에서 MicroK8s의 워크로드, 서비스, 설정, 클러스터 등 전체 현황을 한눈에 확인할 수 있습니다.

6단계: MicroK8s로 서비스 생성하기
MicroK8s가 실제로 어떻게 동작하는지 직접 확인해 보겠습니다. 두 개의 파드를 포함하는 microbot 서비스를 배포해 볼 텐데요, 먼저 kubectl 명령어로 배포(deployment)를 생성합니다:
microk8s kubectl create deployment microbot --image=dontrebootme/microbot:v1다음 명령어로 microbot 파드를 2개로 스케일링합니다.
microk8s kubectl scale deployment microbot --replicas=2microbot 배포를 외부에서 접근할 수 있도록 서비스(service)를 생성합니다.
microk8s kubectl expose deployment microbot --type=NodePort --port=80 --name=microbot-service이제 두 개의 microbot 파드가 service/microbot-service라는 이름으로 배포되었습니다. 다음 명령어로 microbot 서비스를 비롯한 전체 서비스의 상세 정보를 확인할 수 있습니다:
microk8s kubectl get all --all-namespaces
microbot 서비스가 NodePort 방식으로 실행 중이므로, PC의 브라우저에서 바로 접근할 수 있습니다. 이 예시에서는 무작위로 할당된 30353 포트를 사용하고 있습니다.
브라우저에서 https://localhost:30353으로 접속하세요. 여기서 30353은 위 명령어 출력 결과에 표시된 포트 번호이며, 반드시 자신의 환경에 맞는 포트 번호를 사용해야 합니다.

쿠버네티스 vs 도커: 무엇을 선택해야 할까?
이번 가이드에서는 PC나 엣지 디바이스에 최소 사양의 쿠버네티스를 로컬로 설치하는 방법을 살펴보았습니다. 쿠버네티스는 이미 많은 개발자의 워크플로우에 깊숙이 자리 잡았으며, 프로덕션 환경에서 대규모 컨테이너 애플리케이션을 배포하는 데 널리 활용되고 있습니다.
쿠버네티스는 도커 컨테이너를 비롯한 여러 컨테이너를 손쉽게 관리하고 오케스트레이션하는 데 최적화되어 있습니다. 반면 단독 도커(Docker)는 주로 단일 컨테이너를 관리하는 용도로 적합합니다. 따라서 도커와 쿠버네티스 중 무엇을 선택할지는 팀의 기술 역량과 프로덕션에 배포할 소프트웨어의 규모에 따라 결정하는 것이 좋습니다.