쿠버네티스 구조
- 쿠버네티스는 추상적이기 때문에 이해하기 쉽지 않다. 그래서 해당 구조를 통해 이해를 돕기 위해 아래 그림을 통해 알아보자.
- 마이크로서비스 아키텍처, CD/CI, ING Controller, PV/PVC, NFS, POD 등등..
마이크로 서비스 아키텍처(MSA)
- 마이크로 아키텍처란 여러 개의 서비스를 독립적인 서비스로 분리시켜놓은 구조를 말한다.
- 독립된 서비스들은 각 하나의 기능을 담당하여
- 위 그림을 보면 ArgoCD, Front-End, Back-End, Grafana, Prometheus 등등 여러 구조로 나뉘게 되는데 그 아래로 Pod로 나뉘게 되고 Pod는 여러 개의 컨테이너로 나뉘게 된다.
- 즉, 쿠버네티스는 MSA 기반 아키텍처를 사용하고 있다.
그럼 왜 마이크로 서비스 아키텍처를 사용하는 것일까?
- 서비스가 각각 분리되어 있다보니, 어떤 서비스는 javascript로, 어떤 서비스는java로 또 어떤 서비스는 C로 개발할 수 있다. 즉, 언어에 제약이 없다.
- 개발팀과 운영팀이 서로 방해가 되지 않으면서 협력할 수 있어, 동일한 애플리케이션에 더 많은 개발자들이 동시 참여 가능함으로 효율적인 개발이 가능하다.
- 기존 모놀리식 아키텍처의 경우 어떤 서비스에 장애가 발생하면 다른 서비스 또한 장애가 발생하는 경우가 있었는데 MAS의 경우 독립된 서비스이기 때문에 서로 영향을 주지 않는다.
등등 많은 장점들이 있다.
Ingress Controller
- 사용자와 노드들 사이에 ING Controller가 HTTPS를 관리하고 있다.
- ING Controller는 Ingress Controller의 줄임말이다.
Ingress
- Ingress는 클러스터 외부에서 내부로 접근하는 요청들을 어떻게 처리할 지 정의해둔 규칙들의 모음.
- 도메인 기반 가상 호스팅 제공, 외부에서 접속 가능한 URL 사용, 로드밸런싱, SSL 처리 등
Ingress Controller
- Ingress Controller는 수신 리소스에 따라 HTTP 로드 벨런서를 구성하는 프로그램이다.
- 클러스터 외부에서 내부로 오는 HTTP 및 HTTPS 요청을 관리하거나, 서비스로 라우팅하여 로드밸런싱한다.
- 즉, 트래픽을 효율적으로 관리하고 외부에서 내부로 접근할 수 있도록 관리한다.
PV/PVC
- Back-End 노드 아래 Pod 아래를 확인하면 PV와 PVC를 확인할 수 있다.
- PV와 PVC에 대한 설명은 아래 링크를 클릭
- Pod가 PV를 생성하고, PVC도 생성하여 NFS에 접근하는데 이 그림은 정적 프로비저닝의 예시이다.
- PV/PVC를 만들기에는 효율적이지 않기 때문에 보통 개발자들은 동적 프로비저닝을 사용한다.
- 동적 프로비저닝은 PVC를 생성하면 PV가 자동으로 생성된다.
그럼 현재 PVC가 NFS에 접근하고 있는데 NFS란 무엇일까?
- NFS란 네트워크 상에서 다른 컴퓨터의 파일 시스템을 마운트해 공유하는 것이다.
- 즉 자신에 서버에 저장하는 것이 아니고 다른 서버에 데이터를 저장함으로 용량을 확보할 수 있다.
- 그래서 해당 그림은 Back-end에서 데이터를 저장하고 불러올 때 Pod에 있는 PV를 통해 스토리지 접근하게된다.
- 스토리지는 NFS를 통해서 다른 서버의 데이터를 가져오고 이로 인해 데이터를 효율적으로 가져오고 저장할 수 있게된다.
CI/CD
- 노드들 중 가장 왼쪽에 ArgoCD라는 노드가 있다.
- 이 노드의 파드는 ArgoCD에 접근하고 있다.
- 이유를 알기 위해서는 CI/CD에 대해서 알아야 한다.
- 이 ArgoCD는 Back-end와 Front-End에서 만든 서비스들을 지속적으로 배포하기 위한 노드다.
EX) 애플리케이션이 배포되어 있는 상태에서 수정해야할 상황이 있다면?
- 개발자가 코드를 고쳐 github와 같은 곳에 merge한다. -> CI을 통해 자동으로 빌드와 테스트를 한다. -> CD를 통해 배포할 때 문제가 없는지 검증하고 지속적인 배포를 실행한다.
helm
- 그림처럼 ArgoCD나 Mysql, Prometheus 등 tool를 어떻게 사용해야할까?
- helm를 통해 쉽게 관리할 수 있다.
- CI/CD를 위한 Tool이나 Database 등 쉽게 관리 가능하기 때문에 helm을 통해 각 차트를 관리한다.
728x90
반응형
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes] kube config를 통해 외부 클러스터를 로컬 클러스터에서 실행하기 (0) | 2024.08.07 |
---|---|
[Kubernetes] Ingress를 이용하여 Jenkins 구축 (0) | 2024.08.05 |
[Kubernetes] helm이란? (0) | 2024.07.22 |
[Kubernetes] 쿠버네티스 클러스터의 구조와 컴포넌트 (0) | 2024.07.22 |
[Kubernetes] EmptyDir Volume (0) | 2024.07.15 |