참고자료
Kubernetes란 무엇인가
좌측부터 온프레미스 -> VM -> Container 기반의 배포 방식을 나타낸 그림이다.
컨테이너와 가상 머신은 모두 리소스 가상화 기술이지만 차이점이 있다. Container vs VM
특성 | 가상 머신 (VM) | 컨테이너 |
---|---|---|
가상화 수준 | 하드웨어 계층까지 전체 머신을 가상화함. 각 VM은 자체 운영 체제를 포함한 완전한 컴퓨터 시스템을 에뮬레이션함 | 운영 체제 수준 위의 소프트웨어 계층만 가상화함. 호스트 OS 커널을 공유하면서 애플리케이션과 그 종속성만을 포함함 |
리소스 효율성 | 각 VM이 자체 OS를 실행하므로 더 많은 시스템 리소스를 사용함. 일반적으로 크기가 몇 GB에 달할 수 있음 | 호스트 OS를 공유하므로 더 가볍고 효율적임. 일반적으로 크기가 몇 MB 정도임 |
시작 시간 | 전체 OS를 부팅해야 하므로 시작하는 데 몇 분이 걸릴 수 있음 | 초 단위 또는 그 이하로 매우 빠르게 시작할 수 있음 |
격리 수준 | 완전한 격리를 제공함. 각 VM은 독립적인 시스템으로 작동하므로 보안 측면에서 강점이 있음 | OS 커널을 공유하므로 VM보다 격리 수준이 낮음. 하나의 컨테이너가 손상되면 다른 컨테이너에 영향을 미칠 가능성이 있음 |
이식성 | 이식성이 있으나, 크기가 크고 다른 하이퍼바이저 환경으로 이동할 때 호환성 문제가 발생할 수 있음 | 매우 이식성이 높음. 동일한 OS 커널을 가진 어떤 시스템에서도 쉽게 실행할 수 있음 |
개발 및 배포 | 개발 및 테스트 환경을 정확히 복제하는 데 유용하나, 생성과 관리에 더 많은 시간과 리소스가 필요함 | 빠른 개발, 테스트, 배포 주기에 적합함. CI/CD 파이프라인에 쉽게 통합될 수 있음 |
용도 | 서로 다른 OS를 실행해야 하거나, 완전한 격리가 필요한 경우, 또는 특정 하드웨어 구성을 에뮬레이트해야 할 때 적합함 | 마이크로서비스 아키텍처, 클라우드 네이티브 애플리케이션, 확장 가능한 웹 서비스 등에 이상적임 |
빠르게 애플리케이션을 포장하고 배포할 수 있는 컨테이너 방식이 채택되는 최근 추세에 따라 이 컨테이너들을 전체적으로 관리할 수 있는 오케스트레이션인 쿠버네티스가 중요해졌다. 공식문서에서도 아래와 같은 이유로 쿠버네티스가 필요하다고 한다.
그것이 쿠버네티스가 필요한 이유이다! 쿠버네티스는 분산 시스템을 탄력적으로 실행하기 위한 프레임 워크를 제공한다. 애플리케이션의 확장과 장애 조치를 처리하고, 배포 패턴 등을 제공한다. 예를 들어, 쿠버네티스는 시스템의 카나리아 배포를 쉽게 관리할 수 있다.
Kubernetes가 제공하는 것과 아닌 것
쿠버네티스가 제공하는 것
- 다양한 워크로드 지원 (stateless, stateful, 데이터 처리 등)
- 서비스 디스커버리와 로드 밸런싱
- 스토리지 오케스트레이션
- 자동화된 롤아웃과 롤백
- 자동화된 빈 패킹 (리소스 최적화)
- 자동화된 복구 (self-healing)
- 시크릿과 구성 관리
- 메트릭 수집 및 노출 메커니즘
- 선언적 API
- 독립적이고 조합 가능한 제어 프로세스
- 현재 상태를 의도한 상태로 지속적으로 조정하는 기능
쿠버네티스가 제공하지 않는 것
- 소스 코드 배포
- 애플리케이션 빌드
- CI/CD 워크플로우
- 로깅, 모니터링, 경보 솔루션
- 기본 설정 언어/시스템 강제
- 포괄적인 머신 설정, 유지보수, 관리, 자동 복구 시스템
- 중앙화된 제어 시스템
구성요소
Master
Master는 Manage, Plan, Schedule와 다른 노드들을 Monitor하는 역할을 수행한다.
Worker Node
호스팅하고 있는 컨테이너들을 의미한다.