경량화 K8s
실무에서 Kubernetes(K8S) 도입에 앞서, 개인적으로 필요한 부분들을 먼저 학습하고 활용해두면 좋을 것다는 생각이 들었다.
하지만, K8S 는 기본적으로 클러스터 환경을 전제로 설계된 만큼 제대로 테스트 하려면 여러 대의 서버가 필요했지만 개인 학습 환경에서는 온전한 K8S 를 구동하기에는 리소스가 너무 무거워 테스트 하기 버거운 문제가 발생하였다.
그래서 경량화 K8S 로 눈을 돌렸고, 아래와 같은 대안들을 찾게 되었다.
- Minikube: 가장 대중적이고 레퍼런스가 많아 학습용으로 좋지만, VM/컨테이너 구조상 다른 경량화 툴에 비해 무거움.
- K3s: IoT/Edge를 위해 극한으로 경량화되어 가볍지만, 내부 구조(SQLite 등)가 표준과 달라 설정이 까다로울 수 있음.
- Microk8s: Add-on 시스템으로 다양한 기능을 손쉽게 테스트할 수 있으나, Snap 패키지 의존성이 강하고 Linux(Ubuntu) 외 환경에서는 성능 제약이 있음.
이외에도 여러 후보들이 존재하였지만, 현재 나의 상태는 기본적인 이론 학습보다는 빠르게 구축하고 직접 활용해보는 것에 중점을 두고 있었기 때문에 클러스터 환경 구축에 제약이 없고, 필요한 기능을 애드온으로 손쉽게 조작할 수 있는 Microk8s 를 최종적으로 선택하여 활용하기로 결정하였다.
설치 방법
상세한 설치 방법은 공식 홈페이지를 참고
https://canonical.com/microk8s/docs/getting-started
MicroK8s 설치
sudo snap install microk8s --classic --channel=1.35
관리자 권한 할당을 위한 그룹 생성
sudo usermod -a -G microk8s $USER
mkdir -p ~/.kube
chmod 0700 ~/.kube
su - $USER
클러스터 구성 시, 노드 추가 ( 마스터 노드 )
microk8s add-node
클러스터 참여 ( 워커 노드 )
microk8s join 192.168.1.230:25000/92b2db237428470dc4fcfc4ebbd9dc81/2c0cb3284b05
( 해당 명령어는 마스터 노드에서 출력된 Join 명령어를 그대로 복사하여 실행하면됨 )
기본 명령어
miku get nodes # 노드 상태 확인
miku describe node <노드명> # 특정 노드 상세 정보 확인
miku get pods # 모든 Pod 목록
miku get pods -o wide # Pod IP, 배치된 노드까지 보기
miku describe pod <pod명> # Pod 이벤트 & 에러 상세 보기
miku delete pod <pod명> # 특정 Pod 삭제
miku get deploy # Deployment 목록
miku describe deploy <이름> # Deployment 상세
miku rollout restart deployment/<이름> # 앱 재시작 (스프링 같은 경우 필수!)
miku delete deploy <이름> # Deployment 삭제
miku get svc # Service 목록
miku describe svc <이름> # Service 상세 정보
miku delete svc <이름> # Service 삭제
miku logs -f <pod명> # 특정 Pod 로그 실시간 보기
miku logs -f deployment/<이름> # Deployment 단위 로그 보기
miku logs -f -l app=<라벨명> # 라벨 기반 Pod 로그 한꺼번에 보기
miku logs -f --all-containers=true # 모든 컨테이너 로그 보기
miku exec -it <pod명> -- /bin/bash # Pod 내부 접속 (bash가 없으면 sh)
miku run test --image=nginx --restart=Never # 임시 Pod 실행
miku expose pod test --type=NodePort --port=80 # Pod를 외부 노출
miku apply -f app.yaml # yaml 적용 (업데이트 포함)
miku delete -f app.yaml # yaml에 정의된 리소스 삭제
miku get pods -n kube-system # 시스템 Pod 확인
miku get all -n default # default 네임스페이스 리소스 확인
miku describe node <노드이름> # CPU/메모리 확인
miku top node # 전체 CPU/메모리 확인