본문 바로가기
DevOps/k8s

[쿠버네티스 교과서] k8s 스터디 4주차 - 7장, 8장

by 민트맛녹차 2024. 9. 10.
24.09.04 ~24.09.10
k8s 사내 스터디에서 쿠버네티스 교과서 7, 8 장을 읽으며 공부한 내용

 

 

7. 멀티컨테이너 파드를 이용하여 애플리케이션 확장하기

 

파드는 네트워크 및 파일 시스템을 제공하는 가상환경

파드 내 컨테이너들은 파드의 네트워크 공유

  • localhost 주소를 통해 컨테이너 간 통신
  • 외부 트래픽 받을 시 다른 포트 사용해야함

파드 내 컨테이너들은 파드의 볼륨 공유 가능

  • 컨테이너는 자신만의 파일시스템을 가짐
  • 컨테이너는 파드에서 제공한는 볼륨을 마운트할 수 있음
  • 볼륨을 공유하여 컨테이너 간 정보 교환 가능

 

파드는 어플리케이션을 구성하는 단위이므로, 한 파드내에 다른 어플리케이션을 함께 넣는 것은 지양할 것

 

사이드카 패턴 (sidecar pattern)

  • 추가 컨테이너가 어플리케이션 컨테이너를 지원하는 구도

 

초기화 컨테이너 (init container)

  • 어플리케이션 컨테이너 실행 전, 추가 컨테이너를 먼저 실행하여 어플리케이션 실행 준비를 시켜줄 수 있음
  • 이러한 추가 컨테이너를 초기화 컨테이너라고 함
  • 파드 내 초기화 컨테이너를 여러 개 정의할 수 있으며 순서 부여 가능
  • 각각의 초기화  컨테이너는 목표를 달성 후 종료되고 다음 초기화 컨테이너를 실행시킴
  • 모든 초기화 컨테이너가 목표를 달성해야 어플리케이션/사이드카 컨테이너를 실행

 

어댑터 컨테이너 (adapter container)

  • 어플리케이션과 컨테이너 플랫폼 사이를 중재하는 역할을 하는 컨테이너
  • 어플리케이션 컨테이너의 변경 없이 어댑터 컨테이너의 추가로 필요한 기능을 추가할 수 있음

 

앰버서더 컨테이너 (ambassador container)

  • 외부와의 통신을 추상화하여, 어플리케이션과 외부와의 통신을 제어하고 단순화하는 역할
  • 앰버서더 컨테이너를 통해 어플리케이션이 외부와 통신 시, 아래와 같이 동작
    • 어플리케이션 컨테이너 -> 앰버서더 컨테이너
    • 앰버서더 컨테이너 -> 외부에 통신 요청
  • 다양한 트래픽을 어플리케이션 로직의 변경 없이 처리할 수 있음

 

초기화 컨테이너가 실패하면 어플리케이션 컨테이너는 업데이트 되지 않음. (즉 새로운 레플리카셋으로 변경하지 않음)

파드 속 컨테이너는 기본적으로 서로의 프로세스에 접근 불가하지만, 설정 추가 시 컴퓨팅 공간을 공유해 접근 가능

 

 

 

8. 데이터를 많이 다루는 애플리케이션 실행하기: 스테이트풀셋과 잡

 

스테이트풀셋 (StatefulSet)

  • 안정된 어플리케이션에 스케일링 기능을 제공하는 파드 컨트롤러
  • 상태를 유지할 필요 없는 (stateless) 어플리케이션에 적합한 디플로이먼트와 달리 상태의 일관성이 요구되는 (stateful) 어플리케이션 에 적합
    • ex) active-standby 의 데이터베이스 구성 시, standby 는 항상 active 를 바라봐야하는데, 디플로이먼트를 사용해 통신하면 파드 ip 변동 + 서비스를 통한 통신으로 부적절함
  • 데이터베이스, 클러스터 어플리케이션 (메시지큐, 분산파일시스)에 사용하기 적합 
  • 도메인 네임으로 각각 식별되는 규칙적인 이름이 부여된 파드를 생성
    • 레이블셀렉터에 의지하지 않고 파드가 관리됨
    • 0번부터 n번까지 순서대로 생성
    • 파드 수동 삭제시 대체 파드 생성되는데, 삭제된 파드의 이름과 설정을 유지함
  • 앞선 파드가 Running 상태가 되어야 다음 파드가 생성
  • 파드의 도메인 네임으로 통신하기 위해 서비스를 헤드리스 서비스로 생성해야함

스테이트풀셋에서 초기화 컨테이너를 활용해 클러스터 어플리케이션의 초기화를 구현 가능함

ex) acitve-passive model

 

파드에 평범한 영구볼륨 클레임을 마운트하면 모든 파드가 같은 볼륨에 데이터를 기록

클러스터 어플리케이션은 파드마다 다른 볼륨을 필요로함

파드의 영구볼륨클레임마다 별도의 스토리지가 마운트 되게 하려면 볼륨 클레임 템플릿 (volumeClaimTemplate) 을 기술해야함

  • 레플리카셋은 여러 파드가 같은 PV 와 PVC 를 공유하는 반면, 스테이트풀셋은 파드마다 각각 PV 와 PVC 를 가짐
  • 파드가 교체되더라도, 기존의 파드가 사용한 PVC 를 사용하여 이전과 동일한 상태 유지

 

 

잡 (Job)

  • 파드가 수행하는 배치 작업이 완료되는 것을 보장해주는 역할
  • 데이터 백업 및 복원 작업에 적합한 컨트롤러
  • 컨테이너는 작업을 마치고 종료됨
  • completions 와 parallelism 사용 시 병렬 진행 가능

 

크론잡 (CronJob)

  • 잡을 관리하는 컨트롤러
  • 주기적인 일정에 따라 잡을 생성
  • 완료한 잡과 파드를 자동으로 삭제하지 않음

 

 

문제

  1. 다른 주기로 배치작업을 하는 어플리케이션 A, B 를 어떤 방식으로 배포해야 하는가?
  2. 디플로이먼트을 통해 이중화 데이터베이스 (active-standby) 를 배포할 때, 아래 상황에서 생기는 문제와 스테이트풀셋을 사용하면 해당 문제를 어떻게 해결할 수 있는 지 설명하시오.
    • 초기화 컨테이너를 통한 active 파드, standby 파드 설정 시
    • 각 파드에 볼륨 마운트 시 

 

 

댓글