1. Introduction
- Elasticsearch 6.8을 Kubernetes에 설치
- Kubernetes는 Bare-Metal에 직접 설치한 버전
- 이번 글에서는 k8s에 Elasticsearch Cluster를 직접 구동
- Elasticsearch가 사용할 Persistent Volume 설정
- Elasticsearch를 구동할 Statefuleset 설정
2. Environment
- CentOS 7.9
- Kubernetes 1.18
- Elasticsearch 6.8
- MetalLB 0.9.5
- Calico 3.8.9
3. Persistent Volume Background
- Persistent Volume을 사용하기 전에 간략하게 알아본다
- K8s의 파드 안 컨테이너에 있는 파일은 임시적이고 독립적
- 장애가 발생해서 컨테이너가 사라지면, 내부 데이터가 손실
- Pod 내 Container 간에 데이터 공유가 불가능
- Volume을 도입하면, 이 문제를 해결
- 볼륨은 기본적으로 파일시스템
- 간단하게 디렉토리라고 생각하면 됨
- K8s에서는 다양한 볼륨을 제공하고, 공식사이트에서 확인 가능
- 이번 글에서는 Local Volume을 사용
- 로컬 Persistent Volume을 Storage Class를 이용하여 정적 프로비저닝함
4. Storage Class
- Volume을 사용하기 전 Storage Class를 구성(정의)
- 관리자가 제공하는 스토리지의 “Class”(종류)를 설명함
- 클래스를 통해 서비스 품질의 수준 또는 백업 정책 등 스토리지에 관한 프로파일 설정
- 즉, 클래스에 속한 Volume의 프로파일이라고 할 수 있음
- 스토리지클래스에는 provisioner, parameters, reclaimPolicy 필드가 포함되어 Volume의 행동을 묘사할 수 있음
- Storage Class 정의
- Storage Class Apply & Describe
5. Persistent Volume 구성
- spec.capacity.storage는 용량을 의미
- spec.accessModes는 pods와의 관계를 정의
- spec.storageClassName: 위의 Storage Class Name과 동일하게 작성(elastic-local-storage)
- node3 PC에는 /data1에 932기가의 파티션이 mount되어 있다
- Apply & Describe Persistent Volume
6. Persistent Volume Claim 구성
- 이번 Elasticsearch에서는 volumeClaimTemplates을 이용하여 Persistent Volume Claim을 자동으로 생성
- volumeClaimTemplates이 부분이 Persistent Volume Claim과 거의 동일하기 때문에 살펴본다
- 일반적으로 데이터 베이스 Cluster를 구성할 때, PVC를 직접 사용하는 경우는 많지 않음
- Persistent Volume Claim은 Pod이 Persistent Volume을 요청하기 위해 필요
- 이 Claim을 통해 Pod에게 가장 적절한 Persistent Volume을 할당 받는다
- storageClassName은 위 StroageClass 이름 사용
- accessModes는 pv와 동일하게 설정
- resources.requests.storage는 필요한 용량 서술
- StorageClass에서 volumeBindingMode가 WaitForFirstConsumer이기 때문에 Pending 상태
- Pod이 PVC를 사용한다고 하면, Binding이 된다
7. Statefulset
- 아직 Statefulset은 철학이나 설계를 확실하게 파악하지는 못 함..
- Deployment와 같은 레벨로 보임
- Statefulset을 실행하면, Replica의 수에 맞춰 Stateful한 Pod를 구동
- 특히, 안정적이고 지속성을 갖는 애플리케이션에 적합
- 사용하기에 앞서 제한사항을 보는 것은 필수
- 근데 봐도 아직은 잘 모르겠다.(2021/3/2)
- 아래 내용 중 중요한 부분은 env의 discovery.zen.ping.unicast.hosts, volumeClaimTemplate이다
- spec.template.spec.env내 discovery.zen.ping.unicast.hosts에는 Part 1에서 만들었던 서비스를 사용
- volumeClaimTemplates은 위의 PersistentVolumeClaim과 거의 흡사
Reference