Kubernetes

무엇인가?

  • 구글에서 만든 컨테이너 오케스트레이션 오픈소스

왜 나왔는가?

어플리케이션 배포를 시대에 맞춰 아래 3개로 나눌 수 있다.

Deployment

전통적인 배포

  • 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

+ Recent posts