마이크로서비스 아키텍처(MSA)
- 응용 시스템 개발 및 구성을 위한 아키텍처 스타일의 하나
- 애플리케이션이 서비스 모임으로 개발되어 각 마이크로서비스는 특정한 기능을 수용하고 개별 작업을 처리, 이 서비스들이 서로 연결되어 전체 응용을 구성
➡️ 컨테이너 모델은 마이크로 서비스를 구현하기에 적합
쿠버네티스(Kubernetes, k8s) 란?
- 컨테이너 오케스트레이션 솔루션
- 다수의 컨테이너들을 관리하면서 자동 배포, 배포된 컨테이너의 동작 보증, 부하에 따른 동적 확장 등의 기능을 담당
- 도커와 잘 어울리는 실행 환경 구성 도구
: 도커 컨테이너들을 클러스터 내에 실행하고 관리하는 데 적합
: 지속적 통합과 인도(CI/CD) 에 유효하게 적용할 수 있음
k8s 클러스터의 구성 요소
- 클러스터는 하나 이상의 노드로 구성됨
- 마스터 노드 (컨트롤 플레인)
- 워커 노드
: 컨테이너 런타임 - 포드를 이루는 컨테이너의 실행을 담당
k8s 가 제공하는 기능
- 컨테이너 밸런싱
- 트래픽 로드 밸런식
- 동적 수평 스케일링
- 오류 복구
- 롤링 업데이트
- 스토리지 오케스트레이션
- 서비스 디스커버리
k8s 오브젝트들
기본 오브젝트
Pod
: 한 개 이상의 컨테이너로 단일 목적의 일을 하기 위해서 모인 단위
: 독립적인 공간과 사용 가능한 IP를 가지고 있음, 언제든지 죽을 수 있음
Namespace
: k8s 클러스터에서 사용되는 리소스들을 구분해 관리하는 그룹
Volume
: 포드가 생성될 때 포드에서 사용할 수 있는 디렉토리를 제공
: 클러스터 내에서 이용할 수 있는 저장 장치의 추상화된 객체로 볼륨을 정의
< PersistentVolume, PV>
: 클러스터 내에 존재하는 스토리지를 추상화한 것
: 클러스터 내의 노드에 존재하는 물리적 저장장치를 이용할 수도 있으며, 다양한 원격 저장소 및 클라우드 서비스들도 이용할 수 있음
<PersistentVolumeClaim,PVC>
: (사용자에 의한) PV 를 이용하기 위한 요청
: 저장 공간의 크기와 접근 모드 (읽기/쓰기,...) 를 지정
Service
: 유동적인 포드들에 대한 접속을 안정적으로 유지하도록 클러스터 내/외부에 연결하는 역할
: 클러스터 내부에서 동작하는 기능을 외부로 "노출" 하는 것을 서비스라고 부름
: 클러스터 IP, 노드포트, 로드밸런서, 인그레스
<클러스터 IP>
: 클러스터 내부에서만 접근할 수 있는 IP 를 할당
: 포트 포워딩 또는 프록시를 통해 클러스터 외부로부터 접근 가능
: 테스트, 디버깅 등의 목적에 제한적으로 이용
<노드포트>
: 모든 워커 노드의 특정 포트를 열고 여기로 오는 모든 요청을 노드포트 서비스에 전달
: 노드 포트 서비스는 해당 요청을 처리할 수 있는 포드로 요청을 전달
<인그레스>
: 엄밀히 말하자면 k8s 서비스의 한 종류는 아니고, 복수의 서비스에 대해 목적에 따라 트래픽을 연결하는 도구
디플로이먼트(Deployment)
: 기본 오브젝트들을 보다 효율적으로 작동할 수 있도록 조합하고 추가로 구현한 것
: 레플리카셋 오브젝트를 합쳐 놓은 형태로 단순하게 생각할 수 있음
쿠버네티스 기본 사용법
기본 명령어
- kubectl get : 리소스 목록 조회
예: kubectl get pods, kubectl get services - kubectl delete : 리소스 삭제
예: kubectl delete pod <pod-name>
파드 관리
- 파드 생성: kubectl run nginx --image=nginx
- 파드 목록 조회: kubectl get pods
서비스 관리
- 서비스 생성: kubectl expose deployment nginx --port=80 --type=LoadBalancer
- 서비스 목록 조회: kubectl get services
🌟 배운 점
오늘은 쿠버네티스 라는 것에 대해서 배웠다. 난생 처음 들어보기도 하고, 낯설어서 인강을 들으면서도 이게 무슨 역할을 한다는 건지 잘 이해가 가지 않았다. 도커와 같이 쓰길래 둘의 연관성을 찾아보니 도커로 만든 컨테이너를 쿠버네티스가 관리한다고 한다. 도커는 개발 단계에서, 쿠버네티스는 운영 단계에서 주로 사용하며 함께 사용하여 애플리케이션의 개발부터 배포, 운영까지의 전체 라이프 사이클을 관리한다고 한다. 써본 적이 없어서 설명을 들어도 감이 잘 안잡힌다. 아무래도 직접 사용해보는 경험이 필요할 것 같다.
'데브코스' 카테고리의 다른 글
인수테스트 자동화 (0) | 2024.12.06 |
---|---|
젠킨스(Jenkins) (0) | 2024.12.06 |
웹 개발 파이프라인 구축 (0) | 2024.12.02 |
오픈 소스 컨트리뷰트, 저작자 되기 (2) | 2024.12.01 |
오픈 소스 프로젝트 (0) | 2024.11.30 |