반갑습니다. 저는|기업가이자, 엔지니어입니다.
ARM(M1, M2, etc) MacOS 환경에서 Minikube 를 이용하여 K8s 개발환경 설정하기

ARM(M1, M2, etc) MacOS 환경에서 Minikube 를 이용하여 K8s 개발환경 설정하기

Tags
MacOS
k8s
minikube
Published
발행일 - 2022년 9월 7일
Author
Eugene Jeon (전유진)
AuthorLink
 

개요

Minikube 는 K8s 개발하던 분들을 중심으로 개발만을 위해 새롭게 빌드된 도구이다.
목적에 맞게 개발용도로는 아주 우수하다. 하지만 프로덕션 환경으로는 적합하지 않으니 참고하여 사용하자.
 

Docker 설치

아래 사이트를 참고하여, Docker Desktop 을 설치하면 간편하다.
 
하지만, Docker Desktop 의 Lisence 정책으로 인해 사용하지 못 할 수 도 있다.
이때는 CLI 를 이용하여 Docker Engine 을 직접 설치해도 무방하다.
 

Minikube 설치

설치는 간단하다. homebrew 를 이용하자.
(bash)
brew install minikube

Calico 사용 및 Minikube 실행

주의! 설치했다고 끝이 아니다. 실행까지 해 주어야 K8s 환경이 완성된다.
(bash)
minikube start --driver=docker --container-runtime=containerd --mount --mount-string="$HOME/mnt:/mnt"
  • --driver=docker : docker 드라이버를 이용한다.
  • --container-runtime=containerd : container runtime 은 containerd 를 사용한다.
  • --network-plugin=cni : 네트워크는 CNI 플러그인을 사용한다. (더 이상 사용하지 않는다.)
  • --cni=calico : CNI 로는 calico 를 사용한다. (도커를 사용할 것이라서 필요없다.)
  • --mount : daemon 실행시, 자동으로 마운트를 동작시킨다.
  • --mount-string="$HOME/mnt:/mnt" : $HOME/mnt 경로를 /mnt 로 마운트 시킨다.
 
💡
한가지 팁이 있다. 실행 할때, docker 를 이용한다. docker port minikube 를 이용하여 사용하는 port 를 확인할 수 있다. 이 때 MariaDB/PostgreSQL 등 을 이용하고, 개발용이므로 localhost 에서 직접 접근하고 싶다면, --ports=3306:33306 등과 같은 옵션을 줄 수 있다. 또한 여러개를 나열할 수 도 있다. 예시) --ports=3306:33306 --ports=9000:39000 --ports=9001:39001 참고로 minikube 에서 기본적으로 사용할 수 있는 port 의 기본 범위는 30000-32767 이며, 30000 이하로 할당할때는 오류가 난다. 그래서 --extra-config=apiserver.service-node-port-range=1-65535 와 같은 옵션으로 변경도 가능하다. 또한, 기본 범위 이상인 port 를 적용하는 것은 오류없이 바로 반영이 된다.
 

Nginx Ingress 활성화

Minikube 에서는 addons 기능이 존재한다. 그래서 설치하지 않고, 간단하게 nginx ingress 를 활성화 할 수 있다. 자세한 내용은 아래 사이트를 참고하도록 하자.
 
아래 명령어를 이용하여 nginx ingress 를 활성화 하기
(bash)
minikube addons enable ingress
 
활성화 여부를 확인하려면 아래 두 가지 명령어 중 하나를 입력하면 된다.
(bash)
kubectl get pods -n ingress-nginx kubectl get service -n ingress-nginx
 

Helm 설치

MetalLB 를 설정하기 전, Helm 을 설치하자. 이후 패키지를 설정하거나 관리할 때, Helm 이 조금 더 쉽고 편할 것이다.
(bash)
brew install helm
 

MetalLB 설치

Minikube 의 addons list 를 확인하면, MetalLB 가 존재하는 것을 볼 수 있다. 간단하게 활성화 시킬 수 있다.
(bash)
minikube addons enable metallb
 
아래 명령어를 이용하여 MetalLB 상태를 확인할 수 있다.
(bash)
kubectl get all -n metallb-system
 
이제 사용은 가능하다.
하지만 아직 외부 IP 를 결정해주지 않았다. 프로덕션 서버에서와 같이 Nginx Ingress 를 LoadBalancer 로 활용하고 싶을 것이다. 아래와 같이 ConfigMap 파일을 수정하도록 하자.
(bash)
kubectl edit cm -n metallb-system
(yaml)
# Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be # reopened with the relevant failures. # apiVersion: v1 data: config: | address-pools: - name: default protocol: layer2 addresses: # - 192.168.200.1/24 # IP range를 추가 - 192.168.200.1-192.168.200.254 # ...
 
바로 Nginx Ingress 에서 external ip 를 할당받아본다.
아래 명령어를 이용하여, 서비스 구성을 수정할 것이다.
(bash)
kubectl edit svc -n ingress-nginx ingress-nginx-controller
 
파일의 끝단을 확인하면, type: NodePort 라는 부분을 발견했을 것이다. 이를 type: LoadBalancer 로 변경해주면 된다.
(yaml)
# ... selector: app.kubernetes.io/component: controller app.kubernetes.io/instance: ingress-nginx app.kubernetes.io/name: ingress-nginx sessionAffinity: None type: LoadBalancer # ...
 
이제 적용여부를 확인해보자.
(bash)
kubectl -n ingress-nginx get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ingress-nginx-controller-admission ClusterIP 10.101.0.0 <none> 443/TCP 51m ingress-nginx-controller LoadBalancer 10.106.1.1 192.168.0.1 80:32109/TCP,443:32108/TCP 51m
 
 

몇 가지 팁!

1. minikube ip 확인하기

(bash)
echo $(minikube ip)

2. minikube 를 이용하여 서비스 url 노출 및 확인

(bash)
minikube service <SERVICE_NAME> -n <NAMESPACE> --url
 

마무리

이제 설정은 끝이났다. 개발 및 테스트를 위해 원하는 구성으로 만들면 된다.
 
💡
만약, 실수해서 전부 삭제/초기화 하고 새로 설치하려면 아래 명령어를 이용하면 된다.
(bash)
minikube delete --all --purge
 

Loading Comments...