쿠버네티스 이해하기

  • 쿠버네티스는 컨테이너를 실행하는 플랫폼
  • 컨테이너화된 애플리케이션의 시작, 롤링 업데이트, 서비스 수준 유지, 수요에 따른 스케일링, 보안 접근 등 다양힌 기능을 제공한다.
  • 쿠버네티스의 핵심 개념
    • 애플리케이션 정의에 사용되는 API
    • 애플레케이션이 실제로 동작하는 클러스터
  • 클러스터는 도커 같은 컨테이너 런타임이 동작하는 여러 대의 서버가 모여 하나의 논리적 단위를 구성하는 것을 의미한다.
  • YAML 파일에 애플리케이션을 기술하고 이 파일을 쿠버네티스 API에 전달하면, 쿠버네티스가 파일게 기술된 애플리케이션 구성을 이해하고 클러스터 현재 상태와 비교한다.
    • 파일에 기술된 바람직한 상태와 현재 상태에 차이가 있따면 컨테이너를 추가 또는 제거한다.
    • 컨테이너는 고가용성을 위해 여러 노드에 흩어져 있으며 쿠버네티스가 관리하는 가상 네트워크로 서로 통신할 수 있다.
    • 쿠버네티스 클러스터를 사용하면 각각의 노드를 신경 쓸 필요가 없다.
  • 애플리케이션 구성을 파일에 기술하면, 그 구성을 따라 쿠버네티스가 애플리케이션을 실행하고 관리해준다.
    • 어떤 노드가 고장을 일으키더라도 해당 노드에서 실행되던 컨테이너는 다른 노드에서 실행된 컨테이너로 대체된다.\
    • 특정한 컨테이너가 이상을 일으켰다면 쿠버네티스가 해당 컨테이너를 재시작한다.
    • 애플리케이션의 컴포넌트 중 하나의 부하가 높아지면 해당 컴포넌트의 컨테이너를 추가로 실행한다.
  • 쿠버네티스는 컨테이너 외에도 여러 가지 리소스를 관리한다.
    • 쿠버네티스 클러스터에는 분산 데이터베이스가 들어 있다.
      • 분산 데이터베이스에는 애플리케이션 구성 정보는 물론이고 API 키나 데이터베이스 접속 패스워드 같은 비밀값도 함께 저장할 수 있다.
      • 쿠버네티스는 이들 정보를 자연스럽게 컨테이너에 전달해준다.
      • 클러스터에 정확한 설정이 들어 있다면 어떤 환경이라도 동일한 컨테이너 이미지를 사용할 수 있다.
    • 쿠버네티스는 스토리지도 제공한다.
      • 이를 이용하여 컨테이너 외부에 데이터를 저장할 수 있으며 유상태 애플리케이션이라도 고가용성을 확보할 수 있다.
    • 또한 클러스터로 들어오는 트래픽을 관리하며, 각 요청을 해당하는 컨테이너로 전달해주는 기능도 있다.
  • 쿠버네티스는 자신이 실행하는 애플리케이션이 어떤 것인지 따지지 않는다.
    • 리눅스 애플리케이션, 윈도우 애플리케이션 등 어떤 애플리케이션이든 그 구성을 동일한 AP를 사용하여 YAML 파일로 기술하면 이들 모두를 하나의 클러스터에 실행할 수 있다.
  • 애플리케이션을 기술한 YAML 파일은 애플리케이션 매니페스트(application manifest)라고 한다.
    • 이런 이름이 붙은 것은 파일 내용이 애플리케이션을 구성하는 모든 컴포넌트의 목록이기 떄문이다.
    • 쿠버네티스에서 애플리케이션을 구성하는 컴포넌트를 리소스라고 하며, 리소스 역시 여러 종류가 있다.

실습 환경 만들기

쿠버네티스 명령행 도구 설치하기

  • kubectl은 쿠버네티스 클러스터에 접속한 후 쿠버네티스 API를 이요하여 클러스터를 관리한다.
  • 설치(macOS): brew install Kubernetes-cli

생성한 클러스터 확인하기

  • 클러스터에 포함된 모든 노드의 목록 확인: kubectl get nodes