현재 회사에서 담당하고 있는 서비스는 AWS ECS 기반으로 운영되고 있다. 추후 ECS 기반 서비스를 EKS로 이관할 가능성이 있어, Kubernetes(k8s) 환경을 로컬에서 테스트하려는 계획을 진행 중이다. 로컬 k8s 환경 구축을 위해 여러 옵션을 검토하는 과정에서, Docker Desktop의 k8s 설정과 Minikube 두 가지 옵션이 있는 것을 알게 되었다. 이에 대해 어떤 차이가 있는지 의문을 갖게 되었는데 이번 시간에는 위 2가지 옵션의 차이점에 대해 간략히 알아보는 시간을 갖는다.
01. minikube?
# minikuba의 단일 노드 구성
┌─────────────────────────────────────────┐
│ Minikube Cluster (단일 노드) │
│ │
│ ┌────────────────────────────────────┐ │
│ │ Node #1 (Master + Worker) │ │
│ │ - Control Plane (API, etcd 등) │ │
│ │ - Pods, Services 실행 │ │
│ └────────────────────────────────────┘ │
└─────────────────────────────────────────┘
# minikube의 멀티 노드 구성
┌─────────────────────────────────────────┐
│ Minikube Cluster (멀티 노드) │
│ │
│ ┌───────────────────────────┐ │
│ │ Node #1 (Master) │ │
│ │ - Control Plane + etcd │ │
│ └───────────────────────────┘ │
│ | | │
│ ┌────────────┘ └───────────────┐ │
│ │ Worker Node #2 │ │
│ │ (Pods, Services 등 실행) │ │
│ └──────────────────────────────────┘ │
│ ... │
│ ┌──────────────────────────────────┐ │
│ │ Worker Node #N │ │
│ │ (Pods, Services 등 실행) │ │
│ └──────────────────────────────────┘ │
└─────────────────────────────────────────┘
Minikube는 k8s를 로컬에서 실행하기 위한 경량화된 솔루션으로, VM(Virtual Machine)이나 Container Runtime을 사용하여 k8s를 실행한다. 주로 k8s를 학습 및 테스트하기 위해 사용하며, VM을 사용하는 게 일반적이지만 Docker container를 기반으로 실행도 가능하다. 사용자는 -driver 옵션으로 실행 방식을 선택할 수 있다(VirtualBox, Docker… 등)
또한, Minikube의 노드 구성은 기본적으로 단일 노드로 구성이 된다. 하지만 Minikube의 경우 설정에 따라 멀티 노드(worker node가 N개)로 구성이 가능하며, 다양한 드라이버 및 설정을 지원한다. 또한 Docker Desktop의 k8s와 다르게 클러스터 내의 구동중인 노드들의 세부적인 제어도 가능하다.
01-1. window minikube 설치 방법
설치에 앞서 miniKube를 사용하기 위해서는 사용중인 데스크탑의 스펙이 아래 조건에 충족되어야 한다.
- 2 CPUs or more
- 2GB of free Mem
- 20GB of free disk space
- Internet connection
- Container or virtual machine manager, such as: Docker, QEMU, Hyperkit, Hyper-V, KVM, Parallels, Podman, VirtualBox, or VMware Fusion/Workstation
01-2. window minikube 설치 과정
minikube 공식 페이지에 접속 후 Download and run the installer for the latest release 을 선택 한다. 선택을 하면 minikube-installer.exe 파일이 다운로드 되고, 후에 해당 파일을 실행 한다. 설치를 완료한 후에는 기본 경로를 Path에 추가해준다.
내 PC > 속성 > 고급 시스템 설정 > Path(변수) 선택 > 아래 minikube 설치 경로를 추가한다.
환경 변수 설정까지 완료 하였으면, CMD 창에서 minikube 버전 정보를 확인한다.
아래와 같이 minikube 버전이 출력되어야 한다.
C:\Program Files\Kubernetes\Minikube
$ minikube version
01-3. minikube 실행 해보기
Git bash를 관리자 권한으로 실행 한다. 후에 아래 명령어들을 순차적으로 실행 해준다.
# minikube driver 확인
$ minikube config get driver
# minikube 기본 driver 설정 -> docker 런타임 환경 사용
# 로컬에서 docker가 구동중이어야 함
$ minikube config set driver docker
# minikube 실행
$ minikube start --cpus=2 --memory=4g --disk-size=100g --driver=docker --kubernetes-version=v1.28
# minikube 상태 확인
$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
minikube status
명령어를 통해 k8s가 설치되어 Running
상태인 부분을 확인할 수 있다.
클러스터 Context와 Node, 실행 중인 Pod 목록도 확인 해보자.
확인 해보면 minikube라는 이름, 단일 노드로 구성된 k8s를 확인 할 수 있다.
# k8s context 확인
# context란 클러스터, 사용자, 네임스페이스 정보를 사용하기 위한 커멘드이다
# 쉽게 말해 k8s 클러스터에 연결된 환경 설정이라 보면 된다
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
docker-desktop docker-desktop docker-desktop
* minikube minikube minikube default
# k8s node 확인
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 7m17s v1.28.15
# k8s pod 확인
$ kubectl get po -o wide -A
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system coredns-5dd5756b68-pthrd 1/1 Running 0 8m19s 10.244.0.2 minikube <none> <none>
kube-system etcd-minikube 1/1 Running 0 8m31s 192.168.49.2 minikube <none> <none>
kube-system kube-apiserver-minikube 1/1 Running 0 8m34s 192.168.49.2 minikube <none> <none>
kube-system kube-controller-manager-minikube 1/1 Running 0 8m34s 192.168.49.2 minikube <none> <none>
kube-system kube-proxy-8kb6b 1/1 Running 0 8m19s 192.168.49.2 minikube <none> <none>
kube-system kube-scheduler-minikube 1/1 Running 0 8m31s 192.168.49.2 minikube <none> <none>
kube-system storage-provisioner 1/1 Running 1 (7m54s ago) 8m28s 192.168.49.2 minikube <none> <none>
01-4. Nginx 배포 확인
# nginx deployment 파일
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
k8s Deployment 파일을 작성하고 Nginx container를 구동한다.
# 위에서 생성한 파일 실행
kubectl apply -f deploy.yaml
# 배포된 service 목록 확인
kubectl get svc
02. Docker desktop 구성
# Docker Desktop k8s의 노드 구성
┌─────────────────────────────────────────┐
│ Docker Desktop K8s Cluster (단일 노드) │
│ │
│ ┌────────────────────────────────────┐ │
│ │ Node #1 (Master + Worker) │ │
│ │ - Control Plane (API, etcd 등) │ │
│ │ - Pods, Services 실행 │ │
│ └────────────────────────────────────┘ │
└─────────────────────────────────────────┘
Docker Desktop은 Docker의 GUI 환경으로, Docker 엔진과 k8s를 통합하여 컨테이너+k8s를 로컬에서 실행할 수 있게 해준다. 기본적으로는 Docker 컨테이너 런타임을 사용하여 k8s 클러스터를 실행한다. Docker Desktop에서 제공해주는 k8s 역시 기본적으로 단일 노드로 구성이 된다. 하지만 Minikube와는 다르게 멀티 노드(worker node가 N)개로 구성이 불가능하며, Docker 기반으로 제어가 되기에 다양한 설정을 지원하지는 않는다. 또한 클러스터 내에 구동중인 노드들의 세부적인 제어 역시 불가능하다.
02-1. Docker desktop k8s 설치
Docker desktop에서는 UI 접속 > 설정 > Kubernetes > Enable kubernetes 활성화 진행하면 k8s 단일 노드 환경이 구성이 된다.
02-2. 어떤 기준으로 테스트 환경을 선택해야 할까?
Minikube는 다양한 드라이버 환경 + 세밀한 노드 제어
Docker Desktop k8s는 Docker 컨테이너 환경의 통합과 리소스 효율성
Minikube를 선택할때는 다양한 드라이버 환경(VM, Docker… 등등)에서 k8s 구동 및 테스트를 수행 하거나 k8s 클러스터의 세밀한 제어를 하고 싶은 경우 사용을 하면 될 것 같다. 이에 반해, Docker Desktop의 k8s의 경우 리소스 효율성과 Docker 컨테이너 환경과의 통합이 중요한 경우 사용을 하면 된다.
99. 참고 자료
minikube start
minikube is local Kubernetes, focusing on making it easy to learn and develop for Kubernetes. All you need is Docker (or similarly compatible) container or a Virtual Machine environment, and Kubernetes is a single command away: minikube start What you’ll
minikube.sigs.k8s.io
Minikube로 쿠버네티스 설치하기
Minikube란? Windows, Linux, macOS에서 쿠버네티스 환경을 간단하게 구축할 수 있도록 도와주는 도구이다. 쿠버네티스는 본래 API서버를 통해 클러스터 전체를 관리하는 Master노드와 Kubelet을 통해 Master노
hokka1179.tistory.com
Windows 11 minikube 설치과정 알아보기
kubernetes를 실습하기 위해 학습에 알맞게 간편하게 구축하여 사용할 수 있는 minukube를 설치하려고 한다. 관리형 쿠버네티스의 경우 비용이 청구되어 상용 수준의 테스트를 하기에는 무리가 있으
devlogar.tistory.com
Getting started
This section lists the different ways to set up and run Kubernetes. When you install Kubernetes, choose an installation type based on: ease of maintenance, security, control, available resources, and expertise required to operate and manage a cluster. You
kubernetes.io