본문 바로가기
Data Engineering/docker, kubernetes(k8s)

Kubernetes 스테이트풀셋(StatefulSet)의 정의 및 사용방법

by EverReal 2024. 12. 22.

 

Kubernetes 스테이트풀셋(StatefulSet)의 정의 및 사용방법

 

※ 본 내용은 「컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 - 길벗」를 참고하여 작성하였습니다.

 

쿠버네티스를 사용하다보면 파드가 만들어지는 이름과 순서를 예측해야 할 때가 있습니다.

주로 마스터-슬레이브 구조 시스템(Redis, Zookeeper, Cassandra, MongoDB 등)에서 필요합니다.

 

스테이트풀셋(StatefulSet)은  volumeClaimTemplates기능을 사용해 PVC를 자동으로 생성할 수 있고,

각 파드가 순서대로 생성되기 때문에 고정된 이름, 볼륨, 설정 등을 가질 수 있습니다.

 

아래 오브젝트 스펙을 실행하면 순서대로 파드가 생성됩니다.

kubectl apply -f ./nfs-pvc-sts.yaml
# nfs-pvc-sts.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nfs-pvc-sts
spec:
  replicas: 4
  serviceName: sts-svc-domain #statefulset need it
  selector:
    matchLabels:
      app: nfs-pvc-sts
  template:
    metadata:
      labels:
        app: nfs-pvc-sts
    spec:
      containers:
      - name: audit-trail
        image: sysnet4admin/audit-trail
        volumeMounts:
        - name: nfs-vol # same name of volumes's name
          mountPath: /audit
      volumes:
      - name: nfs-vol
        persistentVolumeClaim:
          claimName: nfs-pvc

 

생성한 스테이트풀셋에 expose를 바로 실행하면 에러가 발생(expose는 스테이트풀셋 미지원)하므로,

별도 파일로 로드밸런서 서비스를 작성, 실행해아 합니다.

 

kubectl apply -f ./nfs-pvc-sts-svc.yaml
# nfs-pvc-sts-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: nfs-pvc-sts-svc
spec:
  selector:
    app: nfs-pvc-sts
  ports:
    - port: 80
  type: LoadBalancer

 

위 코드를 통해 스테이트풀셋을 노출시킬 수 있습니다.

 

아래와 같이 접속을 확인할 수 있습니다.

 

아래 코드를 통해 파드에 접속하고, /audit -l로 새로 접속한 파드의 정보가 추가되었는지 확인합니다.

kubectl exec -it nfs-pvc-sts-0 -- /bin/bash

 

스테이트풀셋 삭제는 kubectl delete statefulset <스테이트풀셋명> 으로 할 수 있습니다.

kubectl delete statefulset <스테이트풀셋명>

kubectl delete statefulset nfs-pvc-sts

 

반응형

댓글