Kim-Baek 개발자 이야기

Kubernetes StatefulSets 본문

개발/k8s

Kubernetes StatefulSets

킴백 개발자 2020. 9. 20. 11:00

Kubernetes StatefulSets

QwiklabsRunning 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 Service, Deployment  (0) 2020.09.02
Kubernetes Pod  (0) 2020.09.01
Comments