[Kubernetis] 쿠버네티스 개념 #1

Kubernetis란?

현재 가장 유명한 컨테이너 오케스트레이션 도구이다.

 

컨테이너 오케스트레이션이란?

컨테이너화 된 애플리케이션에 대한 자동화된 설정, 관리 및 제어 체계

 

오케스트레이션의 기능

  • 클러스터 관리: 컨테이너를 분산 실행하고, 확장, 로드 밸런싱 등을 관리한다.
  • 네트워킹: 컨테이너 간 통신을 위한 가상 네트워크를 생성하고, 네트워크 정책을 설정하며, 컨테이너와 외부 네트워크 간의 연결을 관리한다.
  • 상태관리: 컨테이너 실행 상태, 애플리케이션의 설정 정보, 환경 변수 등을 관리하고, 애플리케이션의 상태 변화에 따라 컨테이너를 생성, 업데이트, 삭제하는 등의 작업을 수행한다.
  • 배포 관리: 새로운 애플리케이션 버전의 배포, 트래픽 분배 등을 수행하며, 애플리케이션의 가용성과 안정성을 유지하면서 배포 작업을 관리한다.
  • 배포 버전 관리: 여러 개의 애플리케이션 버전을 동시에 실행하거나, 이전 버전으로 롤백하는 등의 작업을 관리한다.
  • 서비스 디스커버리: 서비스 간의 동적인 디스커버리를 관리한다. 애플리케이션 간 통신을 위해 서비스의 IP 주소와 포트를 동적으로 발견하고 연결할 수 있게 하여, 애플리케이션의 확장과 변동에 유연하게 대응할 수 있도록 한다.
  • 볼륨 스토리지: 컨테이너 내부에서 데이터를 영속적으로 저장하기 위한 스토리지 관리를 합니다. 컨테이너가 종료되어도 데이터를 유지하고, 여러 컨테이너가 동시에 접근하여 데이터를 공유할 수 있다.

 

오케스트레이션이 필요한 이유

도커는 단일 호스트에서 동작하기 때문에 여러 호스트로 구성된 클러스터(공통의 목표를 위해 작동하는 컴퓨터 또는 애플리케이션들의 그룹)에서 실행 중인 컨테이너들을 관리할 수 없다.

따라서 여러 노드에서 실행 중인 컨테이너들을 중앙 제어할 수 있는 컨테이너 오케스트레이션 도구가 있어야한다.

 

오케스트레이션이 필요한 상황

  • 하나의 노드에서 100개의 컨테이너를 돌린다면?
    • 모든 컨테이너를 일일이 관리(생성, 삭제, IP, port, 리소스 분배 등)해야한다 = 한번에 다 설정하고 싶다.
  • 각각의 노드에서 컨테이너를 실행한다면 원하는 서비스를 어떻게 찾을까? (Service Discovery)
    • 프록시 서버를 사용해서 프록시 서버가 인스턴스 서버를 가리키도록 설정을 한다.
    • 스케일 아웃을 해서 노드를 추가로 운영할 때 같은 user-service를 192.168.0.100, 192.168.0.101 2가지 인스턴스에서 실행 중이라면 프록시 서버와 노드 사이에 로드밸런서를 설치한다. (서비스 추가 시 매번 설정해줘야한다) = 번거롭다.
  • 각각의 서비스를 어떻게 노출시킬까? (Gateway)
    • 퍼블릭 클라우드에 프록시 서버를 띄우고, 프라이빗 클라우드에 마이크로 서비스를 실행하면 된다.
    • 위 작업을 오케스트레이션을 사용하지 않고 작업한다면, 서비스가 생길 때마다 일일이 연결해줘야한다 = 번거롭다.
  • 서비스 운영 중에 실행 중인 몇개의 인스턴스가 죽는다면?
    • 개발자가 직접 죽은 인스턴스를 다시 살려야한다 -> 새벽에 문제가 생겨도 일어나서 조치를 해야한다 = 싫다.

Reference

도커와 쿠버네티스

오케스트레이션

'DevOps > Docker&Kubernetis' 카테고리의 다른 글

[Docker] 도커 개념 #1  (0) 2023.06.01