사내 스터디 CUBE에서 진행하는 쿠버네티스 학습 내용을 정리한다. 원래 책만 보려고 했는데, 찾아보니 내가 이미 결제해놓은 강의의 강사님이 책의 저자라는 것을 알게 되어 영상도 같이 보게 되었다.
책: 컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 - 1장
인프런 강의 : 쉽게 시작하는 쿠버네티스(v1.25) - 쿠버네티스 환경 구성
컨테이너(container)
: 하나의 운영체제 커널에서 다른 프로세스에 영향을 받지 않고 독립적으로 실행되는 프로세스 상태
서비스 설계 종류
모놀리식 아키텍처 (monolithic architecture)
- 하나의 큰 목적이 있는 서비스 또는 애플리케이션에 여러 기능이 통합돼 있는 구조. 소프트웨어가 하나의 결합된 코드로 구성되어있음
- 장점 : 초기단계 설계가 용이. 개발이 좀 더 단순하고 코드 관리가 간편함
- 단점 : 서비스 수정 시 연관된 다른 서비스에 영향을 미칠 가능성이 큼. 서비스가 커져서 기능이 추가되면 서비스 간 관계가 복잡해질 수 있음
마이크로서비스 아키텍처 (MSA, microservices architecture)
- 시스템 전체가 하나의 목적을 지행하는 것은 모놀리식과 동일하지만, 개별 기능을 하는 작은 서비스를 각각 개발해서 연결한 구조
- 장점 : 개발된 서비스를 재사용하기 쉽고, 서비스 수정 시 연관된 다른 서비스에 영향 미칠 가능성이 적음. 사용량 변화에 따라 특정 서비스만 확장할 수도 있음.
- 단점 : 복잡도가 높으며 각 서비스가 서로 유기적으로 통신하는 구조 -> 네트워크 호출 횟수가 증가해 성능에 영향을 줄 수 있음
컨테이너 인프라 환경은 마이크로서비스 아키텍처로 구현하기 적합함.
구조 특이점
- 서비스 디스커버리: 서비스 개수가 고정되어 있지 않으므로 어떤 서비스가 등록되어 있는지 파악하기 위해 서비스 디스커버리 사용
- 이벤트 버스 서비스 : 수많은 서비스의 내부 통신을 이벤트로 일원화하고 효과적으로 관리하기 위해 별도 이벤트 버스를 서비스로 구성함.
컨테이너 인프라 환경 지원 도구
컨테이너 인프라 환경 구성요소 : 컨테이너
, 컨테이너 관리
, 개발환경 구성 및 배포 자동화
, 모니터링
도커 (docker)
- 컨테이너 환경에서 독립적으로 애플리케이션을 실행할 수 있도록 컨테이너 만들고 관리하는 것을 도와주는 컨테이너 도구
- 도커에서 실행한 애플리케이션은 운영 체제 환경에 관계없이 독립적인 환경에서 일관된 결과가 나옴
- 기존 가상머신을 이용한 가상화 환경과 많이 비교되는데, 더 많은 애플리케이션을 동작시킬 수 있고 더 가벼움
- 기타 비슷한 도구 :
컨테이너디(Containerd)
, 크라이오(CRI_O)
, 파드맨(Podman)
등
쿠버네티스 (kubernetes)
- 다수의 컨테이너 관리(Orchestration) : 컨테이너 자동 배포, 배포된 컨테이너 동작 보증, 부하에 따른 동적 확장 등
- 기타 비슷한 도구 :
도커 스웜(docekr swarm)
, 메소스(mesos)
, 노마드(nomad)
- 최초에는 구글의
Borg
라는 시스템에서 시작해 CNCF (Cloud Native Computing Foundation)
라는 클라우드 관련 오픈소스 기관으로 옮겨져 관리되고 있음. 오픈소스라서 vender-neutral
하다는 것이 큰 장점.
쿠버네티스 배포 종류 3가지
- 관리형 쿠버네티스
- 현업에서 가장 많이 사용
aws
, azure
, 구글 클라우드
등에서 서비스함
- 사용자는 배포만 해놓으면 거의 건드리지 않아도 됨
- 설치형 쿠버네티스
rancher
, openshift
등
- 설치할 수 있도록 자주 쓰는 설정 이미 패키지화된 상태
- 구성형 쿠버네티스
kops
, kubespray
, krib
, kubeadm
(실습에 사용할 예정) 등
- 필요로 하는 온프레미스 베어메탈 혹은 클라우드 환경에서 원하는 구성 설치 혹은 교육용
젠킨스 (jenkins)
- CI/CD 지원 도구 : 프로그램 빌드, 테스트, 패키지화, 배포 단계 자동화
- 기타 비슷한 도구 :
뱀부(Bamboo)
, 깃허브 액션(Github action)
, 팀시티(Teamcity)
모니터링 도구
- 프로메테우스 (prometheus): 상태 데이터 수집
- 그라파나 (grafana): 프로메테우스로 수집한 데이터 시각화