aws EC2에 Minikube를 올리도록 하자.
나의 관심사는 최대한 비용을 덜 내야 하기 때문에 SPOT인스턴스 말고는 선택지가 없다. 물론 단점이 있긴 하지만...
1. AWS가 인스턴스를 회수 할 수 있다. 작업이 중단될 가능성이 있다는 뜻이다.
2. 가격변동성이 있는데 가격이 변동해도 on-demand보다는 싸다. 경영장의 입장에서 정확하게 예측하려면 어렵겠지만..
3. 이거또한 (1)의 연속성이다. 인스턴스가 중단될 경우를 대비하여 체크포인트, 상태 저장 등 이런 거를 처리해줘야 하는데 나는 개발서버이기도 하고 데이터를 크게 다룰거 같지 않아서 그냥 사용하기로 했다.
4. 모든 유형이 SPOT 인스턴스로 제공되지 않는다는 것인데, 나같은 개인이나 작은 회사에서는 사용할 만한 인스턴스를 다 지원한다. 큰 기업이나 세부적으로 튜닝해야하는 기업들한테나 해당되는 얘기다.
aws에서 EC2에서 Spot Request를 할 수 있다. 나는 4core, 16ram으로 세팅한 Spot 인스턴스로 받았다. 물론 정지도 가능해야 했기데 on-demand 설정은 켜줬다. 실제 Spot보다는 조금 비싼데 그래도 on-demand보다 74%싸다고 한다.
여기인스턴스에 접속해서 docker를 설치해줄거다. Minikube는 backend driver를 여러가지로 할 수 있는데 docker가 제일 일반적이라서 docker를 backend driver로 잡을 거다. docker 설치하는 방법은 공식 홈페이지를 참고하자. 구글에 치기 귀찮은 사람들을 위해서 링크는 첨부한다.
https://docs.docker.com/engine/install/ubuntu/
Ubuntu
Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.
docs.docker.com
SSH로 Instance에 접근하든 클라우드 쉘을 이용해서 접근하든 어떻게 해서든 인스턴스에 접속하자. 후에 아래 명령어를 실행하여 docker를 설치한다.
# Add Docker's official GPG key:
$ sudo apt-get -y update
$ sudo apt-get -y install ca-certificates curl
$ sudo install -m 0755 -d /etc/apt/keyrings
$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
$ sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get -y update
$ sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
docker가 설치되었으면 docker명령어를 현재 리눅스 유저가 실행할 수 있는 실행 권한을 주도록한다.
$ sudo usermod -aG docker ${USER}
$ sudo systemctl restart docker
$ sudo reboot
다시 접속해서
$ docker ps
CONTAINER IMAGE COMMAND CREATED STATUS PORTS NAMES
이렇게 나오면 docker가 완전히 설치 완료 되었다.
docker가 설치 되었으니 minikube를 설치 할 수 있다. 마찬가지로 링크는 아래 첨부해두겠다.
https://minikube.sigs.k8s.io/docs/start/?arch=%2Flinux%2Fx86-64%2Fstable%2Fbinary+download
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
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
$ sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64
Minikube가 설치 되었으니 클러스터를 올려보자. 기본세팅의 리소스는 너무 작기도 하고 내가 빌린 인스턴스가 4cpu/16g이니, 4cpu에 12g정도 할당해주겠다. 흠 4g정도는 내부용으로 빼노았다.
$ minikube config set cpus 4
$ minikube config set memory 12288
$ minikube config view
- cpus: 4
- memory: 12288
minikube 설정이 완료되었고, 클러스터를 올려보자. 클러스터이름은 camping으로 짓도록 하고 노드는 3개로 설정했다. 통상 3개가 최소 노드이니까~
$ minikube start -n 3 -p camping
설치가 되었으면 확인해보는건 좋은습관이다.
$ minikube status -p camping
실제돌아가고 있는 Pod는 Node를 확인하기 위해서는 Kubectl이 설치가 되어야 한다. Pod가 뭔지 Node가 뭔지는 여기서 다루지 않겠다. (나중에 기회되면 작성하는 식으로...)
$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
$ sudo chmod +x kubectl
$ sudo mv kubectl /usr/local/bin
$ kubectl get po -A
minikube가 올라갔으니 plugin을 설치해주도록 하겠다. Minikube는 기본적으로 Service Type이 LoadBalancer를 지원하지 않고 NodePort만 지원한다. Kubernetes클러스터의 경량화버전이기 때문이다. 그러나 Metallb를 이용해서 NodePort를 LoadBalancer처럼 사용할 수 있다. 또한 Minikube는 192.168.49.2 IP로 설치가 된다. 이 것은 나중에 올릴 Service Mesh에서 아주 요긴하게 사용할 거다. 일단은 metallb를 설치 및 설정만 하자.
$minikube addons list
명령어로 설치할 수 있는 addon을 확인할 수 있다. 우리는 여기서 metallb를 사용하겠다.
$ minikube addons list
# |-----------------------------|--------------------------------|
# | ADDON NAME | MAINTAINER |
# |-----------------------------|--------------------------------|
# | ambassador | 3rd party (Ambassador) |
# | auto-pause | minikube |
# | cloud-spanner | Google |
# | csi-hostpath-driver | Kubernetes |
# | dashboard | Kubernetes |
# | default-storageclass | Kubernetes |
# | efk | 3rd party (Elastic) |
# | freshpod | Google |
# | gcp-auth | Google |
# | gvisor | minikube |
# | headlamp | 3rd party (kinvolk.io) |
# | helm-tiller | 3rd party (Helm) |
# | inaccel | 3rd party (InAccel |
# | | [info@inaccel.com]) |
# | ingress | Kubernetes |
# | ingress-dns | minikube |
# | inspektor-gadget | 3rd party |
# | | (inspektor-gadget.io) |
# | istio | 3rd party (Istio) |
# | istio-provisioner | 3rd party (Istio) |
# | kong | 3rd party (Kong HQ) |
# | kubeflow | 3rd party |
# | kubevirt | 3rd party (KubeVirt) |
# | logviewer | 3rd party (unknown) |
# | metallb | 3rd party (MetalLB) |
# | metrics-server | Kubernetes |
# | nvidia-device-plugin | 3rd party (NVIDIA) |
# | nvidia-driver-installer | 3rd party (NVIDIA) |
# | nvidia-gpu-device-plugin | 3rd party (NVIDIA) |
# | olm | 3rd party (Operator Framework) |
# | pod-security-policy | 3rd party (unknown) |
# | portainer | 3rd party (Portainer.io) |
# | registry | minikube |
# | registry-aliases | 3rd party (unknown) |
# | registry-creds | 3rd party (UPMC Enterprises) |
# | storage-provisioner | minikube |
# | storage-provisioner-gluster | 3rd party (Gluster) |
# | storage-provisioner-rancher | 3rd party (Rancher) |
# | volcano | third-party (volcano) |
# | volumesnapshots | Kubernetes |
# | yakd | 3rd party (marcnuri.com) |
# |-----------------------------|--------------------------------|
$ minikube addons enable metallb -p camping
$ kubectl edit configmap config -n metallb-system
여기서 ipaddress에
192.168.49.2/32
를 추가해주자. 그러면 metallb 세팅은 완료가 된다.
EC2인스턴스에 Minikube를 올렸다. 서비스를 시작하기 위한 아주 중요한 첫걸음이다... 하지만 막상 해야될 작업을 보니 좀 막막하긴 하지만 열심히 한번 작성해보겠다.
'devops > minikube' 카테고리의 다른 글
6. Istio: 서비스 메쉬의 선두주자 (25) | 2024.11.19 |
---|---|
5. Connect to Minikube Cluster via Teleport(3) (25) | 2024.11.19 |
4. Connect to Minikube Cluster via Teleport(2) (24) | 2024.11.19 |
3. Connect to Minikube Cluster via Teleport(1) (24) | 2024.11.19 |
1. EKS는 너무 비싸다 (2) | 2024.11.19 |