[쿠버네티스] 2장 왜 쿠버네티스가 필요할까?

공효은·2023년 7월 2일
0

도커

목록 보기
10/12
post-thumbnail

2.1 쿠버네티스란?

  • 쿠버네티스는 컨테이너화된 애플리케이션의 배포, 확장 등을 관리하는 것을 자동화 하기 위한 플랫폼(컨테이너 오케스트레이션 엔진)이다.
  • 런타임 중 하나인 도커는 단독으로는 도커가 설치된 호스트(도커 호스트)를 동시에 여러 대 동작 시키거나 중앙에서 통합, 관리 할 수 없었다. 이렇게 도커 자체로는 여러 호스트로 구성되거나 일정 규모 이상의 서비스 환경에서 사용할 수 있는 시스템을 구축하기 어렵다.
  • 쿠버네티스로 대표되는 컨테이너 오케스트레이션 엔진을 사용해 이러한 시스템을 구축하는 것이 일반적이다.
  • 쿠버네티스에서 사용할 수 있는 컨테이너 런타임은 도커뿐만 아니라 컨테이너 디, cri-o등 다양한 런타임을 사용하여 구현할 수 있다.
  • 쿠버네티스에서 실제 컨테이너가 기동하는 노드(호스트가 되는 물리 머신이나 가상 머신)는 쿠버네티스 노드라 하고, 그 쿠버네티스 노드를 관리하는 노드는 쿠버네티스 마스터라 한다.

2.3 쿠버네티스를 사용하면 무엇을 할 수 있을까?

컨테이너는 '컨테이너 이미지를 기반으로 기동된 워크로드' 다.
도커를 사용하면 호스트에 컨테이너화된 애플리케이션을 쉽게 배포할 수 있다.
그러나 컨테이너를 서비스 환경에서 사용하려면 컨테이너 운영과 관련된 과제도 고려해야한다.

  • 여러 쿠버네티스 노드 관리
  • 컨테이너 스케줄링
  • 롤링 업데이트
  • 스케일링/오토 스케일링
  • 컨테이너 모니터링
  • 자동화된 복구
  • 서비스 디스커버리
  • 로드 밸런싱
  • 데이터 관리
  • 워크로드 관리
  • 로그 관리
  • 선언적 코드를 사용한 관리
  • 그 외 에코시스템과의 연계 및 확장

이런 과제들은 컨테이너 오케스트레이션 엔진인 쿠버네티스를 사용하면 자동화 할 수 있거나 간단한 오퍼레이션으로 해결할 수 있다.

오케스트레이션은 컴퓨터 시스템과 애플리케이션, 서비스의 자동화된 구성, 관리, 조정을 의미함

2.3.1 선언적 코드를 사용한 관리(laC)

쿠버네티스는 YML 형식이나 JSON 형식으로 작성한 선언적 코드(매니페스트)를 통해 배포하는 컨테이너로 주변 리소스를 관리할 수 있어 IaC(Infrastructure as Code)를 구현할 수 있다.

2.3.2 스케일링/오토 스케일링

쿠버네티스는 컨테이너 클러스터(쿠버네티스 클러스터)를 구성하여 여러 쿠버네티스 노드를 관리한다.
컨테이너 이미지를 기반으로 쿠버네티스 위에 컨테이너를 배포할 때 같은 컨테이너 이미지를 기반으로 한 여러 컨테이너(레플리카)를 배포하면 부하 분산 및 다중화 구조를 만들 수 있다.
또한, 부하에 따라서 컨테이너 레플리카 수를 자동으로 늘리거나 줄일(오토 스케일링) 할 수 있다.

2.3.3 스케줄링

컨테이너를 쿠버네티스 노드에 배포할 때 어떤 쿠버네티스 노드에 배포할 것인지를 결정하는 '스케줄링' 단계가 있다.
어피니티(Affinity)와 안티어피니티(Anti-Affinity)기능을 사용하여 컨테이너화 된 애플리케이션 워크로드의 특징이나 쿠버네티스 노드의 성능을 기준으로 스케줄링 할 수 있다.
ex) '디스크 I/O 가 많은' 컨테이너를 '디스크가 SSD'인 쿠버네티스 노드에 배치한다.

2.3.4 리소스 관리

  • 컨테이너 배치를 위한 지정이 특별히 없을 경우 쿠버네티스 노드의 CPU나 메모리의 여유 리소스 상태에 따라 스케줄링되기 때문에 사용자는 어떤 쿠버네티스 노드에 컨테이너를 배치할지 관리할 필요가 없다.
  • 리소스 사용 상태에 따라 클러스터 오토 스케일링 기능으로 쿠버네티스 클러스터의 쿠버네티스 노드도 자동으로 추가하거나 삭제할 수 있다.

2.3.5 자동화된 복구

  • 다중화(falut tolerant) 관점에서는 쿠버네티스의 중요한 콘셉트 중 하나인 자동화된 복구 기능(self-healing)이 있다.
  • 쿠버네티스 표준으로 컨테이너 프로세스를 모니터링하고 프로세스 정지를 감지하면 다시 컨테이너 스케줄링을 실행하여 컨테이너를 자동으로 재배포 한다.
  • 클러스터 노드에 장애가 발생하거나 노드를 축출했을 경우 그 노드의 컨테이너가 사라진다 하더라도 서비스에 영향 없이 애플리케이션을 자동으로 복구할 수 있도록 만들어져 있다.
  • 자동화된 복구 실행 조건에는 프로세스 모니터링 외에 HTTP/TCP나 셸 스크립트로 헬스 체크의 성공 여부를 설정할 수 있다.

2.3.6 로드 밸런싱과 서비스 디스커버리

로드 밸런싱

  • 여러 대로 구성된 애플리케이션을 하나의 애플리케이션으로 사용자에게 보여주고 접속시키려면 사용자에게 목적지가 되는 여러 대로 구성된 엔드포인트를 준비(할당)해야한다.
  • 예를 들어 가상머신을 사용하는 경우 로드밸런서를 통해 여러 가상 머신으로 라우팅되도록 구성하고 그 로드 밸런서 주소를 엔드포인트로 할당한다.
  • 쿠버네티스는 로드 밸런서 기능(서비스(Service) 나 인그레스(Ingress))을 제공하고 있으며 사전에 정의한 조건과 일치하는 컨테이너 그룹에 라우팅하는 엔드포인트를 할당할 수 있다.
  • 컨테이너를 확장할 때 엔드포인트가 되는 서비스에 컨테이너의 자동등록과 삭제, 컨테이너 장애 시 분리, 컨테이너 롤링 업데이트 시 필요한 사전 분리 작업도 자동으로 실행해 준다.

디스커버리

  • 컨테이너를 사용하여 시스템을 구축하는 경우에는 기능별로 독립된 작은 규모에 애플리케이션을 연계하여 시스템을 구현하는 '마이크로서비스 아키텍처'를 선택하는 것이 일반적이다.
  • 서비스에 서비스 디스커버리 기능이 있어 각각의 마이크로서비스가 정의된 복수의 매니페스트를 이용하여 시스템 전체를 쉽계 연계할 수 있다.

2.7 데이터 관리

쿠버네티스는 백엔드 데이터 스토어로 etcd를 채용하고 있다. etcd는 클러스터를 구성하여 이중화가 가능하고 컨테이너나 서비스의 매니페스트 파일도 이중화 구조로 저장한다.

또 쿠버네티스는 컨테이너가 사용하는 설정 파일이나 인증 정보 등의 데이터를 저장하는 구조도 가지고 있어 컨테이너 공통 설정이나 애플리케이션에서 사용되는 데이터베이스 인증정보등을 안전하고 이중화된 상태로 쿠버네티스에서 집중적으로 관리할 수 있다.

profile
잼나게 코딩하면서 살고 싶어요 ^O^/

0개의 댓글