Overview
Kubernetes(쿠버네티스)는 컨테이너화된 애플리케이션을 관리하는 오픈소스 플랫폼이다.
이를 통해 컨테이너 기반 애플리케이션의 배포, 확장, 운영을 자동화할 수 있으며, 확장성, 유연성, 높은 가용성을 제공한다.
본 문서에서는 Kubernetes의 개념, 특징, 아키텍처, 그리고 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 환경을 구성하고, 기본적인 애플리케이션을 배포하는 과정을 다룬다.
1) Minikube 클러스터 만들기
Minikube를 시작하면 로컬 환경에 Kubernetes 클러스터가 실행된다.
$ minikube start
정상적으로 시작되었는지 확인하려면:
$ minikube status
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
- Kubernetes 공식 문서: https://kubernetes.io/ko/docs/
- Minikube 공식 문서: https://minikube.sigs.k8s.io/docs/
'Container Orchestration > Kubernetes' 카테고리의 다른 글
Kubernetes Probe (Liveness, Readiness, Startup) (0) | 2022.07.15 |
---|---|
Kubernetes 컨테이너 이미지 생성하기 (0) | 2022.05.10 |
Kubernetes 클러스터 구축하기(kubespray) (0) | 2022.05.10 |
Kubernetes 클러스터 구축하기(kubeadm) (0) | 2022.05.03 |
쿠버네티스 배포 도구 : Kubeadm vs Kubespray vs Kops (0) | 2022.05.03 |