24.08.28 ~24.09.03
k8s 사내 스터디에서 쿠버네티스 교과서 5, 6 장을 읽으며 공부한 내용
5. 볼륨, 마운트, 클레임을 이용한 데이터 퍼시스턴시
파드내에만 데이터를 저장한다면 데이터의 손실이 일어나므로, 어떤 노드 내 파드에서라도 동일하게 접근 가능한 저장소가 필요
컨테이너는 각각 파일시스템을 가지므로, 파드의 재시작은 컨테이너의 데이터 손실을 유발함
4장에서 컨피그맵/비밀값을 볼륨을 통해 사용했던 것 처럼, 볼륨에 데이터를 저장하여 파드의 생애주기와 상관없이 데이터를 유지하고 접근 가능하다
공디렉터리 (EmptyDir)
- 파드와 같은 생애주기를 가지는 볼륨의 유형
- 파드가 생성된 노드의 임시 디스크 (임시 파일 시스템) 에 기록
- 컨테이너가 대체되더라도 데이터가 유지되지만, 파드가 대체되면 빈 디렉터리가 되어버림
- 임시 저장 목적(로컬 캐시)으로 사용 가능
호스트경로 (HostPath) 볼륨
- 노드의 특정 디렉터리를 가리키는 볼륨
- 노드의 디스크와 같은 생애주기를 가짐
- 컨테이너가 마운트 경로 디렉터리에 데이터 기록 시, 실제 데이터는 노드의 디스크에 기록
- 파드가 대체되어도 데이터가 유지되지만, 파드가 동일한 노드에만 배치되어야 유지
- 노드가 두 개 이상인 경우 항상 같은 노드에 실행하라는 설정을 넣어야해, 자가수복성 제한
- 호스트경로 볼륨에 사용할 수 있는 디렉터리 제한이 없어, 경로를 루트 디렉터리로 설정 시 보안 상 문제 발생 가능
- 볼륨 마운트 시 볼륨의 하위 디렉터리 마운트 가능
분산 스토리지 시스템을 사용한 볼륨에 마운트 시, 클러스터 내 임의의 노드에서도 데이터를 접근할 수 있음
분산 스토리지로 클러스터 환경에 따라 NFS, 글러스터FS, 애저 디스트, 일래스틱 블록 스토어(Elastic Block Store) 등을 사용 가능하다
k8s 가 스토리지 계층의 추상화를 함으로 이런 설정이 가능하며, 해당 추상에는 영구볼륨 (PersistentVolume, PV) 과 영구볼륨클레임 (PersistentVolumeClaim, PVC) 이 있다
영구볼륨 (PersistentVolume, PV)
- 사용 가능한 스토리지의 조각을 정의한 리소스
- 파드는 직접 PV 를 사용하지 못함
영구볼륨클레임 (PersistentVolumeClaim, PVC)
- 파드가 사용하는 스토리지의 추상
- 파드는 PV 를 사용해 어플리케이션에서 사용할 스토리지를 요청
- PVC 는 요구 조건이 일치하는 PV 와 함께 쓰이며, PVC 와 연결된 PV 는 다른 PVC 와 연결 불가 (일대일 관계)
- 일치하는 PV 가 없는 PVC 는 요구 조건이 일치하는 PV 가 생성될 때까지 대기
PV 와 PVC 를 사용하는 방법은 크게 두 가지
- 정적 볼륨 프로비저닝 : PV 와 PVC 를 명시적으로 생성해서 연결하는 방법
- 동적 볼륨 프로비저닝 : PVC 만 생성하면 그에 맞는 PV 를 클러스터에서 동적으로 생성해주는 방법
6. 컨트롤러 리소스를 이용한 어플리케이션의 스케일링
동일한 어플리케이션이 돌아가는 파드 - 레플리카 (replica)
파드를 직접 관리하는 컨트롤러 리소스는 레플리카셋(ReplicaSet)
레플리카셋은 파드의 템플릿을 통해 레플리카를 생서
디플로이먼트가 레플리카셋을 관리
레플리카셋은 파드를 관리
레플리카셋은 항상 제어 로푸를 돌며 관리 중인 리소스 수와 필요한 리소스 수를 확인 -> 삭제된 파드 대체 / 변경된 레플리카수를 확인해 새로운 파드 생성
레플리카셋이 생성한 파드는 항상 레플리카셋과 동일한 라벨을 가짐
서비스 컨트롤러는 파드를 모니터링하며, 라벨 셀렉터와 일치하는 라벨을 가진 파드를 찾아 엔드포인트에 등록
데몬셋 (DaemonSet) 은 클러스터 내 모든 노드 또는 셀렉터와 일치하는 일부 노드에서 단일 레플리카 또는 파드로 동작하는 리소스 (대충 노드마다 하나씩 있다는 뜻)
노드에서 정보를 수집해 중앙의 수집모듈에 전달하는 등의 인프라 적인 목적으로 사용 (로그, 활성지표 등)
데몬셋은 특정 노드에만 파드를 실행시킬 수 있음
문제
1. 호스트경로 볼륨을 사용해 바탕화면의 data 폴더에 posgres 의 데이터를 공유하는 postgres 파드를 생성하자 (디플로이먼트를 통해 생성)
2. k8s 클러스터 내에서 파드의 메트릭을 모니터링 하는 모니터링 툴을 배포해 사용하고자 한다. 해당 모니터링 툴의 배포 방법을 생각해보자
최종 문제
1. 쿠버네티스에서는 왜 pv 와 pvc 를 분리하여 사용하는가? 이러한 구조가 가지는 장단점에 대해 설명하시오
2. 신규 어플리케이션에 캐시기능을 넣었다. 배포 후에도 잘 동작하지 않는다면 무엇을 고쳐야 하는가?
3. 쿠버네티스에서 PostgreDB 를 구성하고자 한다. 어떻게 구성해야할까?
4. k8s 파드의 서비스 로그 및 리소스 모니터링을 구현하고자 한다. 어떤 기능을 이용해 어떻게 구성해야 할까?
'DevOps > k8s' 카테고리의 다른 글
[쿠버네티스 교과서] k8s 스터디 6주차 - 11장, 12장 (2) | 2024.09.30 |
---|---|
[쿠버네티스 교과서] k8s 스터디 5주차 - 9장, 10장 (1) | 2024.09.29 |
[쿠버네티스 교과서] k8s 스터디 4주차 - 7장, 8장 (0) | 2024.09.10 |
[쿠버네티스 교과서] k8s 스터디 2주차 - 3장, 4장 (0) | 2024.08.27 |
[쿠버네티스 교과서] k8s 스터디 1주차 - 1장, 2장 (0) | 2024.08.26 |
댓글