Code States/TIL

[0518] 컨테이너 오케스트레이션 - 쿠버네티스 워크로드

ki1111m2 2023. 5. 18. 14:59

학습 목표

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

(이하 advanced)

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

  • 쿠버네티스 상에서 작동되는 애플리케이션
  • “워크로드 리소스”를 만들기 위해 YAML 파일과 같은 리소스 정의 파일을 사용하는 것이 일반적

파드 (Pods)


  • 쿠버네티스의 배포 가능한 가장 작은 컴퓨팅 유닛
  • 그 자체로 하나의 논리적인 호스트
  • 다음 요소들을 포함할 수 있으며, 도커 컨테이너처럼 파드 내에서 다음 요소들은 격리됨

  • 하나 이상의 애플리케이션 컨테이너
  • IP 주소
  • 볼륨과 같은 공유 스토리지

디플로이먼트 (Deployment)


  • 파드는 일시적이고, 언제나 삭제될 수 있음을 감안하고 만들기 때문에 사용자가 직접 개별 파드를 만들 일이 많지 않음
  • 파드가 실행되는 공간인 노드가 만일 실패하는 경우, 그 안에서 실행되는 파드 역시 사용할 수 없게됨
  • 쿠버네티스의 핵심은 컨테이너를 오케스트레이션하는 것으로, 파드 장애 시 자동 복구하거나, 복제하거나 하는 등의 일을 자동으로 처리하는 것
  • 결론적으로, 파드는 디플로이먼트, 스테이트풀셋, 데몬셋을 이용해 관리하는 것이 바람직함
  • 쿠버네티스의 Deployment는 서비스 노출의 의미가 아닌, 파드의 교체/배치(placement)와 관련된 선언적 명세
    • (레플리카셋, 즉 복제본 구성을 이용하여) 파드를 원하는 개수만큼 실행시킬 수 있음
    • (제어판 Control Plane을 이용하여) 파드를 업데이트할 수 있음
    • 마찬가지로, 파드를 롤백하는 것도 가능
  • 디플로이먼트는 파드의 복제본을 자동으로 업데이트하게 해주는 명세이므로, 쿠버네티스가 지원하는 배포 전략으로는 재생성(Recreate)과 롤링 배포(RollingUpdate) 방식을 선택할 수 있음

서비스


  • 클러스터 안에 파드는 각각 고유의 IP를 가지고 있지만, 직접 우리가 내부망에 접속할 수 있는 것은 아님
  • 어떻게 파드 안에 서비스가 외부로 노출될 수 있을까?
    • 서비스 리소스를 사용하면 파드에서 실행 중인 애플리케이션에 클러스터 외부에서 접근할 수 있음
    • 또한 서비스를 사용하여 클러스터 내부에서 사용할 수 있는 서비스만 게시할 수 있음
    • 쿠버네티스에서 서비스는 파드의 집합에 접근할 수 있는 정책을 정의하는 추상적 개념
    • 서비스 리소스가 정의된 YAML 파일에 selector라는 것을 이용해 서비스할 대상 타깃을 설정할 수 있음
  • 디플로이먼트를 통해 파드의 복제본을 원하는 개수만큼 실행시킬 수 있고, 서비스 리소스는 이러한 파드 집합에 접근할 수 있게함
  • 파드가 교체되거나, 어떤 특정 파드에 문제가 생긴 경우에도 사용 가능한 파드를 찾아 알아서 접속할 수 있게 도움