쿠버네티스가 편리한 이유
AS-IS 환경
- 모니터링 시스템이 개발 환경에 의존하거나, 배포 이후에 별도로 구축됨
- 개발단계에 모니터링 환경이 구축되지 않아서 모니터링이 구축되면 불필요해지는 개발사항이 제품에 포함됨
- 수동 설정 방식이거나, 통합되지 않은 배포 방식으로 인해 일부 앱의 모니터링이 누락될 수 있음
쿠버네티스 환경
- 개발과 모니터링 시스템이 독립적으로 구축됨
- 배포환경과 모니터링 시스템이 동시 구축됨
- 모니터링 범위에 app이 누락되지 않음
쿠버네티스 인프라 구축
최소 구축
개발
- 빌드도구
- gradle
- CI/CD
- gitlab
오케스트레이션/매니징
- 오케스트레이션
- kubernetes
- 서비스 검색
- CoreDNS(내부 DNS를 통한 서비스 간 통신)
- 원격호출
- gRPC
- 서비스 프록시
- nginx
런타임
- 컨테이너 런타임
- containerd
- 네트워크
- calico
플랫폼
분석
쿠버네티스 대표 기능
Traffic Routing
pod별 트래픽 분산
Self-Healing
OOM 등으로 pod가 죽은 경우 자동으로 재생성
AutoScaling
CPU/메모리 등의 Metric 기반으로 Pod 수 자동 조절 (HorizontalPodAutoscaler)
RollingUpdate
새 버전의 Pod를 점진적으로 생성하고, 준비 상태(Ready)가 되면 기존 Pod를 점진적으로 제거함 (무중단 배포)
서비스 안정화 및 인프라 환경 관리 코드화
서비스 안정화
신규 app이 생성됐을 때 자동으로 설정되어 휴먼 에러 방지
AS-IS
- 신규 app 수동 네트워크 설정
- 신규 app 수동 모니터링 연동
TO-BE(쿠버네티스)
- 신규 app 자동 네트워크 설정
- 신규 app 자동 모니터링 연동
인프라 환경 관리 코드화(IaC)
- 코드로 관리하므로 인프라에 대한 History 관리 가능
- 환경별 설정 차이를 코드로 비교 가능
- 미리 구성 인프라 환경 설정 파일 생성 가능
- 새 인프라 구축 시 이전에 작성된 코드 활용 가능