macOS 기반 Kubernetes 구성 및 Dashboard 설치 개발환경 설정
Mac에 Minikube를 설치하려면 다음 단계를 따르면 됩니다. Homebrew를 사용하여 Minikube를 설치하는 방법입니다.
사전 요구 사항
- Homebrew 설치: Homebrew가 설치되어 있어야 합니다. Homebrew가 없다면 다음 명령어를 사용하여 설치할 수 있습니다.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Hypervisor 설치: Minikube는 가상화를 사용하므로, 가상화 소프트웨어가 설치되어 있어야 합니다. 기본적으로 Mac에서는 HyperKit을 사용할 수 있습니다. HyperKit을 설치하려면 다음 명령어를 사용합니다.
brew install hyperkit
Minikube 설치
- Minikube 설치: Homebrew를 사용하여 Minikube를 설치합니다.
brew install minikube
- Minikube 시작: Minikube를 시작하여 Kubernetes 클러스터를 생성합니다.
minikube start --driver=hyperkit
- kubectl 설치: Minikube와 함께 사용할 Kubernetes 커맨드라인 도구인 kubectl을 설치합니다.
brew install kubectl
Minikube 사용
- 클러스터 상태 확인: Minikube 클러스터의 상태를 확인합니다.
minikube status
- Kubernetes 구성 확인: kubectl을 사용하여 Kubernetes 클러스터 정보를 확인합니다.
kubectl cluster-info
- Dashboard 열기: Minikube Dashboard를 열어 웹 인터페이스를 통해 클러스터를 관리할 수 있습니다.
minikube dashboard
기본적인 Kubernetes 명령어 예시
- Pods 목록 조회
kubectl get pods -A
- Namespace 생성
kubectl create namespace my-namespace
- Deployment 생성
kubectl create deployment nginx --image=nginx --namespace=my-namespace
- 서비스 노출
kubectl expose deployment nginx --type=NodePort --port=80 --namespace=my-namespace
이 과정을 따라하면 Mac에 Minikube를 성공적으로 설치하고 사용할 수 있습니다. 또는, Mac 환경에서 Docker Desktop을 사용하여 Kubernetes를 활성화 할 수 있습니다. Docker Desktop에서 Kubernetes 기능을 활성화하면 기본적인 Kubernetes 클러스터가 실행되지만, 기본적으로 Ingress Controller는 포함되어 있지 않습니다. 따라서 Ingress 기능을 사용하려면 별도로 Ingress Controller를 설치해야 합니다. 일반적으로 많이 사용되는 Ingress Controller로는 NGINX Ingress Controller가 있습니다. NGINX Ingress Controller를 설치하는 방법을 아래에 설명하겠습니다.
1. Docker Desktop에서 Kubernetes 활성화
- Docker Desktop을 실행합니다.
- Docker Desktop의 설정(Settings)으로 이동합니다.
- "Kubernetes" 탭을 선택합니다.
- "Enable Kubernetes" 옵션을 체크하여 활성화합니다.
- "Apply & Restart"를 클릭하여 Docker Desktop을 재시작합니다.
2. Helm 설치
Mac에서 Helm을 설치하려면 Homebrew를 사용할 수 있습니다.
brew install helm
3. NGINX Ingress Controller 설치
Helm을 사용하여 NGINX Ingress Controller를 설치합니다.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install my-ingress ingress-nginx/ingress-nginx
이 명령어를 실행하면 my-ingress
라는 이름의 NGINX Ingress Controller가 설치됩니다.
4. Ingress Resource 생성
다음은 Ingress Resource를 정의하는 예시입니다. 이 파일을 example-ingress.yaml
로 저장합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: example.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: example-service
port:
number: 80
이 파일을 적용하려면 다음 명령어를 실행합니다.
kubectl apply -f example-ingress.yaml
5. /etc/hosts 파일 수정
로컬 환경에서 example.local
도메인을 사용하기 위해 /etc/hosts
파일을 수정합니다. 터미널에서 다음 명령어를 사용하여 파일을 엽니다.
sudo nano /etc/hosts
파일에 다음 줄을 추가합니다.
127.0.0.1 example.local
6. Kubernetes 설정 확인
설치된 NGINX Ingress Controller와 Ingress Resource가 제대로 동작하는지 확인합니다.
kubectl get pods -n ingress-nginx
kubectl get svc -n ingress-nginx
kubectl get ingress
위 명령어들을 통해 Ingress Controller가 정상적으로 설치되었는지, Ingress Resource가 제대로 설정되었는지 확인할 수 있습니다.
필요에 따라 NGINX Ingress Controller의 설정을 커스터마이징할 수 있습니다. 자세한 내용은 NGINX Ingress Controller 공식 문서를 참고하시기 바랍니다. 이 과정을 통해 Mac 환경에서 Docker Desktop을 사용하여 Kubernetes 클러스터를 설정하고 Ingress 기능을 활성화할 수 있습니다.
아래는 MacOS에서 로컬 개발 환경을 위한 Minikube 클러스터를 Docker 기반으로 구성하는 방법입니다. 로컬에서 Kubernetes 클러스터를 설정하고, DNS 및 TLS 인증서를 구성하여 애플리케이션을 테스트할 수 있도록 도와줍니다.
1. 준비 사항
Minikube 설치를 위해서는 Docker와 같은 컨테이너 환경이나 가상 머신 환경이 필요합니다. 설치에 필요한 모든 애플리케이션은 Homebrew를 사용하여 설치합니다.
2. Minikube 설치
brew install minikube
3. DNSMasq 설정
DNSMasq는 소규모 네트워크에 DNS 서비스를 제공하는 경량의 DNS 포워더입니다. 이를 사용하여 .test
도메인을 로컬 IP 주소(127.0.0.1
)로 해석하게 할 수 있습니다.
3.1 DNSMasq 설치
brew install dnsmasq
3.2 DNSMasq 구성
.test
도메인을 127.0.0.1
로 해석하도록 DNSMasq를 구성합니다.
M1 사용자
echo "address=/test/127.0.0.1" >> /opt/homebrew/etc/dnsmasq.conf
Intel 사용자:
echo "address=/test/127.0.0.1" >> /usr/local/etc/dnsmasq.conf
DNSMasq를 재시작합니다.
sudo brew services restart dnsmasq
3.3 MacOS DNS 해석기 설정
MacOS에서 추가적인 DNS 해석기를 설정하기 위해 /etc/resolver/
디렉토리에 구성 파일을 생성합니다.
sudo mkdir -p /etc/resolver
도메인 파일을 생성합니다.
sudo tee /etc/resolver/test >/dev/null <<EOF
nameserver 127.0.0.1
EOF
이제 .test
도메인을 해석할 수 있는지 확인합니다.
ping -c 1 tonys.test
.test
도메인이 127.0.0.1
로 해석되어야 합니다.
4. MKCERT 설치 및 설정
MKCERT는 로컬에서 신뢰할 수 있는 개발용 인증서를 생성하는 도구입니다.
4.1 MKCERT 설치
brew install mkcert
4.2 인증서 생성
다음 명령어로 로컬에서 신뢰할 수 있는 인증서를 생성합니다.
mkcert -install \
-cert-file certs/mkcert.pem \
-key-file certs/mkcert-key.pem \
hello-john.test hello-jane.test \
k8s.dashboard.test "*.dashboard.test" \
"*.test" \
localhost 127.0.0.1 ::1
5. Minikube 클러스터 생성
다음 명령어로 Minikube 클러스터를 생성합니다.
minikube start \
--addons=ingress,ingress-dns,dashboard,metrics-server \
--cni=flannel \
--install-addons=true \
--kubernetes-version=stable \
--vm-driver=docker --wait=false \
--cpus=4 --memory=6g --nodes=1 \
--extra-config=apiserver.service-node-port-range=1-65535 \
--embed-certs
6. Minikube Ingress 설정
6.1 인증서를 클러스터에 추가
생성된 인증서를 클러스터에 추가합니다.
kubectl -n kube-system create secret tls mkcert --key certs/mkcert-key.pem --cert certs/mkcert.pem
6.2 Ingress 애드온을 사용자 인증서로 설정
다음 명령어로 Ingress 애드온을 설정합니다.
minikube addons configure ingress
프롬프트에서 kube-system/mkcert
를 입력합니다.
-- Enter custom cert (format is "namespace/secret"): kube-system/mkcert
애드온을 재시작합니다.
minikube addons disable ingress
minikube addons enable ingress
7. Minikube 터널 시작
터널을 시작하여 클러스터 내 워크로드에 접근할 수 있도록 합니다.
minikube tunnel
8. Ingress 테스트
터널이 실행 중인 상태에서 다음 명령어로 Hello World 애플리케이션을 배포합니다.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/minikube/master/deploy/addons/ingress-dns/example/example.yaml
이제 다음과 같이 배포된 애플리케이션에 접근할 수 있습니다.
curl hello-john.test
HTTPS로 접근하여 인증서가 mkcert에서 발급되었는지 확인합니다.
curl -v https://hello-john.test
MacOS에서 Minikube를 사용하여 로컬 Kubernetes 클러스터를 설정하고, 로컬에서 테스트하기 위한 환경을 구성할 수 있습니다.