Container Orchestration/Kubernetes

Kubernetes 개념과 Minikube 실습

Somaz 2022. 3. 22. 03:22
728x90
반응형

 

Overview

Kubernetes(쿠버네티스)는 컨테이너화된 애플리케이션을 관리하는 오픈소스 플랫폼이다.
이를 통해 컨테이너 기반 애플리케이션의 배포, 확장, 운영을 자동화할 수 있으며, 확장성, 유연성, 높은 가용성을 제공한다.

본 문서에서는 Kubernetes의 개념, 특징, 아키텍처, 그리고 Minikube를 활용한 실습 과정을 정리한다.

정상적으로 minikube가 시작되었다!

 

 

 

 

 


 

 

 

1. Kubernetes 개념과 특징, 아키텍처

 

 

1) 개념

Kubernetes는 컨테이너를 효율적으로 관리하고, 배포/확장/운영을 자동화하는 컨테이너 오케스트레이션 플랫폼이다.
다양한 환경(클라우드, 온프레미스, 하이브리드)에서 컨테이너 애플리케이션을 안정적으로 실행할 수 있도록 지원한다.

 

 

 

2) 특징

 

다양한 배포 방식 지원

  • Deployment, StatefulSets, DaemonSet, Job, CronJob 등을 지원하여 다양한 배포 옵션을 제공한다.

 

자동 확장 (AutoScaling)

  • 트래픽 및 부하에 따라 HPA (Horizontal Pod Autoscaler), VPA (Vertical Pod Autoscaler) 를 활용해 자동으로 서버를 확장한다.

 

네트워크 및 로드밸런싱

  • Ingress Controller를 통해 여러 웹 애플리케이션을 하나의 로드밸런서를 통해 서비스할 수 있다.
  • 각 Pod에 고유한 IP를 할당하고, LoadBalancer 서비스를 활용하여 외부 접근이 가능하다.

 

네임스페이스 (Namespace) 지원

  • 하나의 Kubernetes 클러스터 내에서 논리적인 그룹을 분리하여 멀티테넌시 환경을 구성할 수 있다.

 

 

 

 

3) Kubernetes 아키텍처

Kubernetes는 컨트롤 플레인(Control Plane)노드(Node) 로 구성된 클러스터(Cluster) 아키텍처를 가진다.

 

 

컨트롤 플레인(Control Plane) 역할

  • API 서버 (kube-apiserver) : 모든 Kubernetes 요청을 처리하는 중앙 API 서버
  • 스케줄러 (kube-scheduler) : 워커 노드의 자원을 감시하고 Pod을 적절한 노드에 배치
  • 컨트롤러 매니저 (kube-controller-manager) : 클러스터 내 리소스를 관리하고 상태를 유지
  • etcd : 클러스터 상태 및 메타데이터를 저장하는 분산 데이터 저장소

 

워커 노드(Worker Node) 역할

  • kubelet : 각 노드에서 실행되며, API 서버와 통신하여 Pod의 상태를 관리
  • 컨테이너 런타임 (Container Runtime) : Docker, containerd, CRI-O 등의 컨테이너 실행 환경
  • kube-proxy : Kubernetes 네트워크 정책을 관리하고, 서비스 간 통신을 설정

 

 

 

 


 

 

 

 

 

 

2. Minikube 실습

Minikube는 로컬 환경에서 Kubernetes 클러스터를 실행할 수 있도록 지원하는 도구이다.
본 실습에서는 Minikube를 활용하여 Kubernetes 환경을 구성하고, 기본적인 애플리케이션을 배포하는 과정을 다룬다.

공식 튜토리얼: Minikube 실습

 

 

 

1) Minikube 클러스터 만들기

 

Minikube를 시작하면 로컬 환경에 Kubernetes 클러스터가 실행된다.

$ minikube start
 
 

정상적으로 시작되었는지 확인하려면:

$ minikube status

정상적으로 minikube가 시작되었다!

 

 

 

 
 

Minikube 대시보드 실행

$ minikube dashboard
  • Minikube의 웹 UI를 통해 리소스를 관리할 수 있다.
  • 만약 URL을 찾을 수 없음 오류가 발생하면 [Preview Port 30000] 버튼을 눌러 해결 가능하다.

대시보드를 열엇다!

 

 

 

 

 

2) 디플로이먼트 (Deployment) 생성

애플리케이션을 실행하기 위해 kubectl create 명령어를 사용하여 디플로이먼트를 생성한다.

$ kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4

 

 

생성된 디플로이먼트 확인

$ kubectl get deployments
대시보드에서도 볼 수 있다!

 

 

 
 

파드(Pod) 목록 확인

$ kubectl get pods
 
 

클러스터 이벤트 확인

$ kubectl get events
 
 
 

kubectl 환경 설정 확인

$ kubectl config view

 

 

 

 

 

3) 서비스(Service) 생성 및 노출

 

기본적으로 Pod는 클러스터 내부에서만 접근 가능하다.
kubectl expose 명령어를 사용하여 외부에서 접근할 수 있도록 한다.

$ kubectl expose deployment hello-node --type=LoadBalancer --port=8080
 
 

서비스 목록 확인

$ kubectl get services
  • Minikube는 LoadBalancer 타입을 직접 지원하지 않으므로, 아래 명령어를 사용하여 서비스에 접근해야 한다.
 
$ minikube service hello-node
 

대시보드 확인



 
 

특정 포트에서 서비스 실행

$ minikube service hello-node --url

 

  • 출력된 URL을 브라우저에서 실행하면 애플리케이션의 응답을 확인할 수 있다.

 

 

 

 

 

 

4) Minikube 애드온 사용

Minikube는 다양한 기능을 확장할 수 있는 애드온(Addons) 을 제공한다.

 

 

지원하는 애드온 목록 확인

$ minikube addons list
 
 

애드온 활성화 예시 (metrics-server)

$ minikube addons enable metrics-server
 

활성화된 애드온 확인

$ kubectl get pod,svc -n kube-system
 
 

애드온 비활성화

$ minikube addons disable metrics-server

 

 

 

 

 

5) Kubernetes 리소스 정리 (제거)

 

실습이 끝난 후, 생성한 리소스를 삭제한다.

$ kubectl delete service hello-node $ kubectl delete deployment hello-node

 

 

Minikube 자체를 완전히 종료하려면:

$ minikube stop
 
 

모든 데이터를 삭제하려면:

$ minikube delete
 

 

 

 


 

 

마무리

Kubernetes는 현대 애플리케이션의 배포와 운영을 위한 강력한 오케스트레이션 도구로, 클라우드 네이티브 환경에서 필수적인 요소로 자리 잡고 있다.


이번 글에서는 Kubernetes의 핵심 개념과 아키텍처를 이해하고, 로컬에서 이를 실습할 수 있는 Minikube를 활용해 클러스터를 구성하고 애플리케이션을 배포하는 전 과정을 다뤄보았다.

 

Minikube는 복잡한 클라우드 환경이 없어도 간단한 명령어로 Kubernetes를 직접 체험할 수 있어 학습자나 개발자에게 매우 유용한 도구이다.


또한, kubectl 명령어를 통해 클러스터 상태를 조회하고, 서비스 노출 및 리소스 삭제까지 모든 관리 작업을 수행해봄으로써, Kubernetes 워크플로우 전반을 실습해볼 수 있었다.

 

앞으로 실제 운영 환경에서의 Kubernetes 사용을 고려한다면, Helm, Ingress, Persistent Volume, Namespace, CI/CD 연동 등 다양한 고급 기능으로 학습을 확장해보는 것도 좋다.

 

 

 

 

 


Reference

 

 

 

 

728x90
반응형