심심한 개발자의 취미생활

StatefulSet, Job, CronJob

스테이트풀셋을 이용한 안정성 모델링

  • 스테이트풀셋은 안정된 프레임워크에서 동작하는 애플리케이션에서 스케일링 기능을 제공하는 파드 컨트롤러이다.
  • 스테이트플셋은 도메인 네임으로 각각 식별되는 규칙적인 이름이 부여된 파드를 생성한다. 또한 이들 파드는 첫번째 파드가 Running 상태가 되면 그 다음 파드가 생성되는 식으로 순서대로 생성된다.
  • 스테이트풀셋은 미리 정해진 주 인스턴스와 부 인스턴스가 함께 동작하며 고가용성을 확보하며, 부 인스턴스의 개수를 늘리는 방식으로 스케일링디 되는데, 부 인스턴스는 데이터 동기화를 위해 주 인스턴스와 통신이 가능해야 한다. 디플로이먼트로는 이런 애플리케이션을 모델링 할 수 없는데, 레플리카셋에서는 특정 파드를 주 인스턴스로 지정할 수 없기 때문이다.

스테이트풀셋에서 초기화 컨테이너 활용

  • 스테이트풀셋에서의 초기화 컨테이너는 파드의 생성 순서에 따라 작동이 달라 질수 있다. 미리 지정된 파드 시작 순서 및 각기 구분 가능한 파드는 스테이트풀셋으로 클러스터 애플리케이션을 초기화 하는 밑바탕이 된다. 대개 파드의 시동 로직은 자신이 파드 0이면 주 인스턴스가 되기 위한 설정을 한다. 파드 0이 아니라면, 주 인스턴스가 준비될 때까지 기다린 후 부 인스턴스를 설정하고 파드 0의 주소와 동기화 한다.

볼륨 클레임 템플릿으로 스토리지 요청하기

  • 볼륨은 표준적인 파드 정의의 일부이다. 파드에서 컨피그맵이나 비밀값을 읽어 들일 수 있고, 영구 볼륨 클레임을 사용하여 컨테이너에 볼륨을 마운트할 수도 있다. 그러나 이런 볼륨은 모든 파드가 공유하는 스토리지이다. 모든 파드가 같은 데이터를 갖게 되는 읽기 전용 설정이라면 좋은 선택이다. 하지만 평범한 영구볼륨클레임을 마운트하면 모든 파드가 같은 볼륨에 데이터를 기록하게 된다

  • 각 파드의 영구볼륨클레임마다 별도의 스토리지가 마운트되게 하려면, 스테이트풀셋 정의에서 volumeClaimTemplate 필드를 기술해야 한다. 볼륨 클레임 템플릿에는 스토리지 용량이나 접근 유형 외에도 스토리지 유형에 대한 요구 사항을 기술할 수 있으며 볼륨 클레임 템플릿을 포함한 스테이트풀셋을 배치하면 각 파드마다 영구볼륨클레임이 생성되며 파드와 영구볼륨클레임이 연결된다.

    • volumeClaimTemplate를 사용하면 각 파드마다 동적으로 영구볼륨클레임이 생성되고, 스테이트풀셋의 파드와 마찬가지로 규칙적인 이름이 부여된다. 또한 레플리카마다 독립된 스토리지를 갖는다.
    • 파드와 영구 볼륨 클레임의 연결 관계는 파드가 교체되더라도 유지된다.
  • 스테이트풀셋과 볼륨 클레임 템플릿을 함께 사용하면 애플리케이션의 안정된 환경을 제공하기 위한 리소스이다. 하지만 그런 만큼 업데이트에 있어서는 다른 컨트롤러 리소스에 비해 유연성이 떨어진다. 스테이트풀셋을 설계할 때는 애플리케이션의 요구사항을 신중하게 검토하여야 한다.

잡과 크론잡을 이용한 유지 보수 작업

  • 데이터 중심의 애플리케이션은 연산에 사용하기 위한 데이터 복제본 못지않게 독립된 스토리지 계층의 보살핌을 받아야 한다. 잡(Job)은 이런 데이터 백업 및 복원 작업에 적합한 파드 컨트롤러이다.

Job

  • 잡은 파드 정의를 포함하는데 이 파드가 수행하는 배치 작업이 완료되는 것을 보장해 주는 역할이다.
  • 잡은 실행 가능한 컨테이너 이미지의 제한이 없지만 주의할 점은 프로세스가 작업을 마치고 종료되어야 한다는 것이다. 잡에 포함된 컨테이너가 스스로 종료되지 않는 프로세스를 실행한다면 이 잡은 영원히 완료되지 않을 것이다.

CronJob

  • 크론잡은 잡을 관리하는 컨트롤러이다. 주기적인 일정에 따라 잡을 생성한다.
  • 크론잡은 잡의 정의를 포함하여, 병렬로 진행하는 작업을 포함하여 잡으로 수행할 수 있는 작업은 모두 크론잡으로도 수행할 수 있다.
  • 잡을 실행할 스케줄은 리눅스의 cron 포맷으로 작성한다.

유상태 애플리케이션을 위한 플랫폼 선택