일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 예제로 배우는 스프링 입문
- Effective Java
- kubernetes
- ElasticSearch
- Spring
- 티스토리챌린지
- 스프링
- 오블완
- 이펙티브 자바
- 스프링 핵심원리
- JavaScript
- 이펙티브자바
- 스프링부트
- Effective Java 3
- k8s
- 자바스크립트
- 카카오
- 이차전지관련주
- 카카오 면접
- 알고리즘
- 엘라스틱서치
- effectivejava
- 김영한
- 클린아키텍처
- Sort
- 스프링핵심원리
- 알고리즘정렬
- java
- 자바
- 코딩테스트
- Today
- Total
Kim-Baek 개발자 이야기
Kubernetes StatefulSets 본문
Kubernetes StatefulSets
Qwiklabs의 Running a MongoDB Database in Kubernetes with StatefulSets
을 공부 하면서 정리한 내용이다.
k8s에서 MongoDB를 셋업하는 내용이다. DB의 경우 상태를 계속 유지하고 있어야 하는 Stateful한 성격이 있기 때문에 k8s의 StatefulSet 에 대한 개념과 이해가 필요하다.
Stateful App의 반대 개념은 Stateless App 이다.
Reference
MongoDB를 k8s에서 구축하기 위해서 StorageClass, headless service, StatefulSet 이 필요하다.
Create the StorageClass
StorageClass
는 어떤 종류의 Storage를 k8s에서 사용할 지를 명시한다. GCP에서는 SSD와 Hard disk를 storage로 제공해준다.
아래는 GCP의 fast라는 SSD Volume을 만드는 매니페스트 파일이다.
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
name: fast
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
Headless Service
Headless Service
는 Load balance를 명시하지 않는다. 기본적으로 k8s의 Service는 특정 Pods에 접근하기 위한 룰을 정의한다. 하지만 Headless Service는 특정 Cluster IP를 가지고 있지 않는다.
Headless Service를 정의하기 위해서는 CluserIP 필드를 None로 설정해주면 된다.
주로 StatefulSets
와 결합되어 사용되며, 그때 각각의 DNS 이름을 가지고 Headless Service와 연결 된 Pod를 연결해준다.
여기서는 StatefulSets으로 정의한 각각의 MongoDB 노드에 개별적으로 접근이 가능하다.
apiVersion: v1 <----------- Headless Service configuration
kind: Service
metadata:
name: mongo
labels:
name: mongo
spec:
ports:
- port: 27017
targetPort: 27017
clusterIP: None
selector:
role: mongo
StatefulSet
StatefulSets
은 Stateful한 Application을 위해서 사용된다.
순서나 Uniqueness이 보장되어야 하는 Pods를 관리하거나 Scaling 할 때 사용된다. Deployment
처럼 Pods를 관리하지만, 차이점이 있다면 각각의 Pods의 identity를 유지한다.
아래와 같은 특징의 Application에서 사용할 수 있다.
- Stable, unique network identifiers.
- Stable, persistent storage.
- Ordered, graceful deployment and scaling.
- Ordered, automated rolling updates.
volumeClaimTemplates 설정을 통해 안정적인 저장 공간을 제공할 수 있다. 해당 예제에서는 앞에서 생성한 StorageClass 를 사용한다.
주의해줘야 하는 설정은 terminationGracePeriodSeconds 이다. 해당 설정의 default값은 0 이여서 10정도로 설정해주는 것이 좋다. 해당 설정으로 Pod의 Scaling 할 때 Gracefully한 Shutdown을 지원해준다.
생성 된 StatefulSets 은 아래와 같은 명령어로 확인 할 수 있고, Scaling이 가능하다
$ kubectl get statefulset
$ kubectl scale --replicas=5 statefulset mongo
Reference
'개발 > k8s' 카테고리의 다른 글
Kubernetes 의 내부도메인 (0) | 2024.11.19 |
---|---|
Kubernetes Service, Deployment (0) | 2020.09.02 |
Kubernetes Pod (0) | 2020.09.01 |