Education*
Devops
Architecture
F/B End
B.Chain
Basic
Others
CLOSE
Search For:
Search
BY TAGS
linux
HTTP
golang
flutter
java
fintech
개발환경
kubernetes
network
Docker
devops
database
tutorial
cli
분산시스템
www
블록체인
AWS
system admin
bigdata
보안
금융
msa
mysql
redis
Linux command
dns
javascript
CICD
VPC
FILESYSTEM
S3
NGINX
TCP/IP
ZOOKEEPER
NOSQL
IAC
CLOUD
TERRAFORM
logging
IT용어
Kafka
docker-compose
Dart
Minikube 와 함께하는 Kubernetes Study 1 - Minikube 설치
Recommanded
Free
YOUTUBE Lecture:
<% selectedImage[1] %>
yundream
2023-12-02
2023-01-10
42878
 ## Minikube [Minikube 와 함께하는 Kubernetes 목차](https://www.joinc.co.kr/w/kubernetes_minikube_index) Kubenetes(k8s)는 핫한 기술이기는 하지만 설치/운영은 어렵다. K8s는 개념도 복잡한데다가 설치 하는 것 자체가 하나의 과업이다 보니 진입 문턱이 매우 높다. 당장 클러스터를 구성해야 하는데, GCP나 AWS를 이용하려고 하면 비용이 문제고 로컬에 구성하려고 하면 클러스터 구성에서 부터 만만한 작업이 아니다. **Minikube**는 MacOS, Linux, Windows에서 로컬로 간단하게 Kubernetes 클러스터를 구현하도록 도와주는 툴이다. Minikube는 아래의 Kubenetes 기능을 지원한다. - 로드밸런서 : minikube tunnel. 로드밸런서를 이용해서 서비스를 인터넷에 노출 할 수 있다. 이 방법을 사용하는 각 서비스에 고유한 IP 주소가 할당된다. - 다중 클러스터 : minikube start -p name - NodePort : minikube service * 영구(Persistent) 볼륨 : minikube는 PersistentVolumes를 지원한다. Minikube VM 혹은 베어메탈의 로컬호스트에서 만들어진 디렉토리에 파일을 영구적으로 유지하도록 구성 할 수 있다 * Ingress : Ingress는 외부에서의 접속 규칙을 정의하는 API 객체다. NGINX ingress controll를 이용해서 Minikube ingress 규칙을 설정 할 수 있다. * Dashboard * Container runtimes : minikube의 **Docker**를 기본 컨테이너 런타임으로 사용한다. * Apiserver와 kubelet 옵션 * Addons 기능 * NVIDIA GPU support * Filesystem mounts Minikube로 운영은 할 수 없지만 Kubernetes 학습을 위한 완전한 환경을 만들 수 있다. ## Minikube 설치와 Hello World Application 배포 이 문서에서 Minikube를 설치하고 Hello World Application을 배포하는 법을 살펴보려 한다. 일단 애플리케이션 배포를 성공하고 차근 차근 세부 개념들을 실습위주로 익혀보자. ## 설치 사양 최소 설치 사양은 아래와 같다. 매우 가볍기 때문에 부담없이 설치 할 수 있다. - 2개 이상의 CPU - 2G 이상의 여유 메모리 - 20G 이상의 여유 디스크 공간 - 인터넷 연결 - Docker, Hyperkit, Hyper-V, KVM, Parallels, Podman, VirtualBox, VMWare 등의 컨테이너 혹은 가상 머신 관리자 중 하나 이 문서는 우분투 리눅스 22.10를 기준으로 작성했다. ## Docker install Kubernetes는 Docker를 기반으로 하는 시스템이다. 아직 Docker를 설치하지 않았다면, [Docker install](https://www.joinc.co.kr/w/man/12/docker/install) 문서를 참고해서 Docker를 설치한다. ## Minikube 설치 ```shell curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube ``` ## Cluster 시작 ``` minikube start ``` 아래와 같은 메시지가 나오면 설치 성공이다. ``` ? Ubuntu 22.10 의 minikube v1.29.0 ✨ 자동적으로 docker 드라이버가 선택되었습니다. 다른 드라이버 목록: none, ssh ? Using Docker driver with root privileges ? minikube 클러스터의 minikube 컨트롤 플레인 노드를 시작하는 중 ? 베이스 이미지를 다운받는 중 ... ? 쿠버네티스 v1.26.1 을 다운로드 중 ... > preloaded-images-k8s-v18-v1...: 397.05 MiB / 397.05 MiB 100.00% 12.40 M > gcr.io/k8s-minikube/kicbase...: 407.18 MiB / 407.19 MiB 100.00% 8.91 Mi ? Creating docker container (CPUs=2, Memory=3400MB) ... ? 쿠버네티스 v1.26.1 을 Docker 20.10.23 런타임으로 설치하는 중 ▪ 인증서 및 키를 생성하는 중 ... ▪ 컨트롤 플레인이 부팅... ▪ RBAC 규칙을 구성하는 중 ... ? Configuring bridge CNI (Container Networking Interface) ... ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5 ? Kubernetes 구성 요소를 확인... ? 애드온 활성화 : storage-provisioner, default-storageclass ❗ /usr/local/bin/kubectl is version 1.18.8, which may have incompatibilities with Kubernetes 1.26.1. ▪ Want kubectl v1.26.1? Try 'minikube kubectl -- get pods -A' ? 끝났습니다! kubectl이 "minikube" 클러스터와 "default" 네임스페이스를 기본적으로 사용하도록 구성되었습니다. ``` ## Cluster 확인 kubectl을 이용해서 cluster를 관리 할 수 있다. kubectl을 설치해야 하는데 직접 다운로드해서 설치하는 방법도 있지만 minikube를 이용해서 설치 할 수도 있다. ```shell minikube kubectl -- get po -A ``` 만약 설치가 안됐다면 아래와 같이 kubectl을 설치한다. ``` > kubectl.sha256: 64 B / 64 B [-------------------------] 100.00% ? p/s 0s > kubectl: 45.80 MiB / 45.80 MiB [------------] 100.00% 24.48 MiB p/s 2.1s NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-787d4945fb-r29h2 1/1 Running 0 8m29s kube-system etcd-minikube 1/1 Running 0 8m41s kube-system kube-apiserver-minikube 1/1 Running 0 8m41s kube-system kube-controller-manager-minikube 1/1 Running 0 8m41s kube-system kube-proxy-tj9sz 1/1 Running 0 8m29s kube-system kube-scheduler-minikube 1/1 Running 0 8m41s kube-system storage-provisioner 1/1 Running 1 (7m59s ago) 8m40s ``` 아래와 같이 alias를 설정하면 kubectl을 사용하는 것처럼 사용 할 수 있다. ```bash alias kubectl="minikube kubectl --" ``` 실행하면 cluster의 pod 목록을 확인 할 수 있다. 지금은 기본 pod가 출력될 것이다. ```shell $ kubectl get po -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-787d4945fb-r29h2 1/1 Running 0 13m kube-system etcd-minikube 1/1 Running 0 13m kube-system kube-apiserver-minikube 1/1 Running 0 13m kube-system kube-controller-manager-minikube 1/1 Running 0 13m kube-system kube-proxy-tj9sz 1/1 Running 0 13m kube-system kube-scheduler-minikube 1/1 Running 0 13m kube-system storage-provisioner 1/1 Running 1 (13m ago) 13m ``` ## Hello Application 배포 ### Kubenetes NODE, POD, Service Kubernetes에서의 애플리케이션을 배포하기 위해서 알고 있어야 하는 컴포넌트는 NODE, POD, Service 3개다.  K8s는 분산 컴퓨팅 플랫폼으로 하나 이상의 컴퓨터 시스템(서버)로 구성된다. 이를 **NODE**라고 한다. **POD**는 애플리케이션 배포단위이다. 컨테이너 기반의 애플리케이션이라고 이해하면 된다. 컨테이너를 실행하기 위한 컨테이너 런타임은 다양한 것들이 사용될 수 있으나 일반적으로는 Docker를 많이 사용한다. **Deployment**는 POD를 어떻게 실행할지에 대한 설정 정보를 가지고 있다. 어떤 도커 이미지를 사용 할 것인지, 몇 개의 복제본을 실행할 것인지에 대한 정보를 가지고 있으며 이 정보에 따라서 POD를 실행하고 관리한다. **Service**는 하나 이상의 **POD**의 그룹이다. POD는 노드위에서 옮겨 다니는 컨테이너이기 때문에 고정할 수 없다. 서비스를 이용해서 이들 POD을 관리 할 수 있다. ### Deployment 그럼 hello-world 애플리케이션을 deploy 해보자. ```shell kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4 ``` create deployment 명령으로 deployment를 생성할 수 있다. deployment는 pod 즉 컨테이너를 실행하기 때문에 컨테이너를 실행할 image를 설정해야 한다. 여기에서는 구글이 제공하는 echoserver:1.4 이미지를 설정했다. get deployments 명령으로 deployment 목록을 조회할 수 있다. ```shell $ kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE hello-minikube 1/1 1 1 69s ``` deployment는 pod를 샐성한다고 했으니 get pod 명령으로 pod 목록을 조회해 보자. ```shell $ kubectl get pods NAME READY STATUS RESTARTS AGE hello-minikube-7474c89846-2mgb8 1/1 Running 0 81s ``` ### Service 만들기 지금 하나의 POD로 구성된 deployment를 만들었지만 이 POD는 클러스터의 내부 IP만 가지고 있기 때문에 외부에서 접근할 수 없다. 외부에서 접근하려고 하면 클러스터 가상 네트워크 바깥에서 컨테이너에 접근 할 수 있도록 POD를 **kubenetes 서비스(service)로 노출(expose)** 해야 한다. kubectl expose 명령과 --type=LoadBalancer 플래그를 사용해서 서비스를 만들 수 있다. ```shell kubectl expose deployments hello-minikube --type=LoadBalancer --port=8080 ``` 이제 8080 포트를 이용해서 외부에서 접근 할 수 있다. 전체 서비스 목록을 살펴보자. ```shell kubectl get services ``` 대략 아래와 같은 결과를 확인 할 수 있을 것이다. ```shell NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-minikube LoadBalancer 10.111.2.22 <pending> 8080:31493/TCP 3m24s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6h53m ``` AWS와 같은 클라우드 환경에서는 서비스에 접근 할 수 있도록 외부 IP 주소가 할당되지만 로컬 PC에서는 **minikube service** 명령어로 서비스에 접근 할 수 있다. ```shell $ minikube service hello-minikube |-----------|----------------|-------------|---------------------------| | NAMESPACE | NAME | TARGET PORT | URL | |-----------|----------------|-------------|---------------------------| | default | hello-minikube | 8080 | http://192.168.49.2:32690 | |-----------|----------------|-------------|---------------------------| ? Opening service default/hello-minikube in default browser... ``` 이제 해당 URL로 브라우저를 이용해서 접근 할 수 있다.  혹은 **kubectl port-forward** 명령으로 포트워딩해서 서비스에 접근 할 수 있다. ```shell kubectl port-forward service/hello-minikube 7080:8080 ``` 웹브라우저를 이용해서 localhost:7080으로 접근하면 된다. ### Dashboard minikube dashboard 명령으로 클러스터를 모니터링 할 수 있는 대시보드를 실행 할 수 있다.  ### 삭제 이제 service, deploy를 삭제하고 마무리 하자. ```shell kubectl delete service hello-minikube kubectl delete deployment hello-minikube ```
Recent Posts
Vertex Gemini 기반 AI 에이전트 개발 05. 첫 번째 LLM 애플리케이션 개발
LLama-3.2-Vision 테스트
Vertex Gemini 기반 AI 에이전트 개발 04. 프롬프트 엔지니어링
Vertex Gemini 기반 AI 에이전트 개발 03. Vertex AI Gemini 둘러보기
Vertex Gemini 기반 AI 에이전트 개발 02. 생성 AI에 대해서
Vertex Gemini 기반 AI 에이전트 개발 01. 소개
Vertex Gemini 기반 AI 에이전트 개발-소개
생성 AI 모델 Flux.1 설치 및 사용
GPT를 이용한 Reranker 테스트
5분만에 만들어보는 Streamlit 챗봇
Archive Posts
Tags
cloud
devops
kubernetes
minikube와 함께하는 kubernetes study
Copyrights © -
Joinc
, All Rights Reserved.
Inherited From -
Yundream
Rebranded By -
Joonphil
Recent Posts
Archive Posts
Tags