Code States/TIL

[0522] 컨테이너 오케스트레이션 - 쿠버네티스 구성 요소

ki1111m2 2023. 5. 22. 16:00

학습 목표

  • 컨테이너 오케스트레이션이 무엇인지 이해할 수 있다.
  • 쿠버네티스의 간단한 작동 원리를 이해할 수 있다.
  • 쿠버네티스 리소스 명세를 작성할 수 있다.
    • 파드 명세를 작성할 수 있다.
    • 디플로이먼트 명세를 작성할 수 있다.
    • 서비스를 이용해 파드를 노출할 수 있다.
  • kubectl 명령어를 사용하여 리소스의 생성, 삭제, 조회를 할 수 있다.
  • kubectl 명령어를 사용하여 롤아웃 관련 작업을 진행할 수 있다.
    • 롤링 배포 현황을 확인할 수 있다.
    • 새로운 버전에 문제가 발생했을 때 롤백할 수 있다.

(이하 advanced)

  • liveness probe를 이용하여 파드의 health check를 할 수 있다.
  • 쿠버네티스가 Stateful한 애플리케이션을 다루는 방법을 이해할 수 있다.
  • 쿠버네티스에서 인그레스를 이용한 HTTP 기반 라우팅을 적용할 수 있다.
  • helm 패키지 매니저를 사용할 수 있다.

  • 파드는 Stateless함
    • 파드는 일시적이며, 언제나 삭제될 수 있음
    • 따라서, 파드 그 자체는 Stateless
    • 이러한 파드의 교체와 배치를 담당하는 것이 디플로이먼트
    • 디플로이먼트는 레플리카셋을 통해 파드를 scale out하며, 이때 만들어지는 파드들은 상호 대체 가능함
  • 파드가 사라져도 데이터를 남기고 싶다면?
    • 파드 그 자체에 상태(데이터)를 남겨야만 하는 Stateful 애플리케이션으로는 MySQL, mongoDB, redis와 같은 데이터베이스가 있음
    • 데이터베이스 애플리케이션이 담긴 파드가 사라질 때, 데이터가 함께 사라지도록 두어서는 안 됨
    • 영속적인(Persistence) 데이터(프로그램의 실행이 종료되어도 사라지지 않는 데이터)를 저장하기 위해 볼륨(Volume)을 연결할 수 있음
  • Stateful한 애플리케이션을 관리하려면?
    • 파드 명세에 PV를 정의해서 직접 연결하는 것은 좋은 방법이 아님
    • 이러한 의존도를 줄이기 위해, 퍼시스턴스 볼륨 클레임(Persistence Volume Claim)을 이용하여 PV와 연결
    • PVC는 파드가 볼륨의 세부 사항을 몰라도 볼륨을 사용할 수 있게 도와줌
      • PV는 실제로 데이터가 저장되는 공간
      • PVC는 PV를 선택, 연결해 주는 요청 그 자체
  • Stateful한 애플리케이션이 수평 확장한다면?
    • 파드를 정의할 때 PVC를 통해 볼륨에 연결할 수 있음
    • 파드를 디플로이먼트로 배포해도, PVC를 통해 연결되는 볼륨은 하나이기 때문에, 결국 같은 스토리지를 사용하는 것이 됨
     

  • 파드마다 별도의 데이터를 저장할 수 있게 만들려면, 수평확장되는 파드에 서로 다른 PV가 연결되어야 함
  • 파드가 PV를 동적으로 요청해서 그때그때 볼륨이 생성되게 하려면 스토리지 클래스(StorageClass) 리소스를 사용해야 함
  • 사용자가 요청할 때, 자동으로 PV를 프로비저닝 할 수 있게 도움

  • 스테이트풀셋
    • 스테이트풀셋은 애플리케이션 구성(파드)을 복제하더라도, 스토리지 클래스를 이용해 파드가 필요로 하는 볼륨을 자동으로 프로비저닝하여 연결함
    • 첫 번째 파드를 primary(master), 두 번째 파드를 secondary 복제본처럼 구성하는 것도 가능함
    • 디플로이먼트와 스테이트풀셋 둘 다 동일한 컨테이너 스펙을 기반으로 둔 파드들을 관리한다는 점에는 같지만, 가장 결정적인 차이점은 파드의 순서와 고유성을 보장한다는 것
    • 스테이트풀셋이 생성한 파드는 상호 대체할 수 없는 파드
  • 스테이트풀셋을 사용할 때의 주의사항
    • 파드에 지정된 스토리지는 관리자에 의해 퍼시스턴트 볼륨 프로비저너를 기반으로 하는 storage class를 요청해서 프로비전하거나 사전에 프로비전이 되어야 함
    • 헤드리스 서비스가 필요함