Kubernetes
무엇인가?
- 구글에서 만든 컨테이너 오케스트레이션 오픈소스
왜 나왔는가?
어플리케이션 배포를 시대에 맞춰 아래 3개로 나눌 수 있다.
전통적인 배포
- Application 을 물리 서버에 배포함.
- 서로 다른 물리 서버에서 각 Application 을 실행하는 것.
- 다만, 하나의 서버에 여러 Application 인스턴스를 실행하면 다른 어플리케이션에 성능이 저하될 수 있는 문제가 있음 ->
리소스를 충분하게 활용하지 못하는 한계점
가상화된 배포
VM(Virtual Machine) : 가상화된 하드웨어 내 자체 운영체제를 포함한 모든 구성요소를 실행하는 머신
-
리소스를 충분하게 활용하기 위해서 가상화 가 도입되었고, 그 수단이 VM(Virtual Machine)
-
단일 물리 서버 CPU 에서 여러 VM 을 실행할 수 있도록 함.
-
가상화를 사용함으로써, VM 간 어플리케이션을 격리하고 다른 VM에 있는 어플리케이션에 자유롭게 Access 하지 못하므로 일정 수준 이상 보안성 확보
-
다만, Application 간에 OS 를 공유하지는 않음 ->
서비스를 확장할 경우 비용이 커지는 문제
컨테이너 배포
- VM 과 유사하면서도 Application 간에 운영체제를 공유한다. ->
VM 배포와의 차이점
- 컨테이너도 자체 파일 시스템, CPU 점유, 메모리, 프로세스 Space 등이 있음.
VM 기반으로 서비스를 운영할 경우와 대비하여, 서비스가 확장할 것을 대비하여 Scale Out 에 용이한 컨테이너 배포 방식을 많이 사용한다.
컨테이너 배포 장점
- App 생성과 배포가 쉽다
- CI/CD 구축이 쉽다
- 개발과 운영 분리가 쉽다.
- 배포 시점이 아닌 Build/Release 시점에 컨테이너 이미지를 만들기 때문에 Application 이 인프라 구조로 부터 분리된다
- 개발 및 테스팅 및 운영환경에 걸쳐 일관성이 보장된다.
- 클라우드 및 OS 배포 간 이식성이 보장된다.
- Window 용 어플리케이션, Ubuntu 용 어플리케이션 등 OS 별 프로그램을 따로 개발할 필요 X
- 컨테이너 마다 CPU, 메모리, Disk 용량 설정이 가능하다.
왜 필요한가?
서비스 운영 중 컨테이너가 하나 다운될 경우, 이미지를 자동으로 생성하고 배포까지 자동으로 되어야한다.
예를 들어, 내비 시스템에서 장애가 발생해서 운전 중 내비가 죽는 경우... 생각만 해도 끔찍하다.
즉, 무중단 + 무장애에 Focus 를 두고 서비스를 운영해야 되는데 여기에 가장 적합한 방식이 컨테이너 배포 방식이고 쉽게 활용할 수 있는 것이 바로 Kubernetes 이다.
k8s 아래와 같은 기능 목록을 살펴보자
- 네트워크 트래픽이 많아질 경우, 자동 로드밸랜싱
- 디스크 용량이 부족할 경우. 저장소 시스템을 자동 탑재 가능
- 컨테이너를 노드에 맞춰 가장 리소스를 잘 사용할 수 있도록
- Self-Healing : 실패한 컨테이너를 다시 시작하거나 교체하고, 사용자 응답하지 않는 컨테이너 kill 을 알아서 해줌.
- Security : 암호, OAuth 토큰, SSH 중요 정보 저장 및 관리 가능
k8s 가 제공하지 않는 기능
- 어플리케이션 유형을 제약하지 않음.
- 소스 코드를 배포하지 않고 App을 빌드하지 않음.
- App 레벨 서비스를 제공하지 않음.
- 로깅, 모니터링, Alarm 솔루션 제공하지 않음.
다음 챕터는 쿠버네티스 컴포넌트.
Referenced From
'개발 > k8s' 카테고리의 다른 글
ingress 호출 시 403 에러가 나는 경우 체크할 사항 (1) (0) | 2023.06.01 |
---|---|
k8s 기초 튜토리얼 (0) | 2020.12.18 |
쿠버네티스(k8s) 컴포넌트 (0) | 2020.12.17 |