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)
- 잡을 관리하는 컨트롤러
- 주기적인 일정에 따라 잡을 생성
- 완료한 잡과 파드를 자동으로 삭제하지 않음
문제
- 다른 주기로 배치작업을 하는 어플리케이션 A, B 를 어떤 방식으로 배포해야 하는가?
- 디플로이먼트을 통해 이중화 데이터베이스 (active-standby) 를 배포할 때, 아래 상황에서 생기는 문제와 스테이트풀셋을 사용하면 해당 문제를 어떻게 해결할 수 있는 지 설명하시오.
- 초기화 컨테이너를 통한 active 파드, standby 파드 설정 시
- 각 파드에 볼륨 마운트 시
'DevOps > k8s' 카테고리의 다른 글
[쿠버네티스 교과서] k8s 스터디 6주차 - 11장, 12장 (2) | 2024.09.30 |
---|---|
[쿠버네티스 교과서] k8s 스터디 5주차 - 9장, 10장 (1) | 2024.09.29 |
[쿠버네티스 교과서] k8s 스터디 3주차 - 5장, 6장 (4) | 2024.09.03 |
[쿠버네티스 교과서] k8s 스터디 2주차 - 3장, 4장 (0) | 2024.08.27 |
[쿠버네티스 교과서] k8s 스터디 1주차 - 1장, 2장 (0) | 2024.08.26 |
댓글