Stateful Set 필요성
- 포드가 정해진 순서대로 생성되어야 하는 경우
- 포드에 고정적인 이름이나 주소가 필요한 경우
생성 방법
yaml 형식의 정의 파일을 작성한 뒤, create 명령으로 생성한다.
Deployment와 비슷하게 작성한 후 kind 값만 StatefulSet으로 변경하면 된다.
서비스 이름을 지정해야 하며, Stateful Sets 생성 시 배포 순서대로 포드가 생성된다.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
labels:
app: mysql
spec:
templete:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql
replicas: 3
selector:
matchLabels:
app: mysql
serviceName: mysql-h
podManagementPolicy: Parallel # 순서 없이 병렬 배포
podManagementPolicy 값을 Parallel로 설정하면 Stateful Set가 순서 없이 포드를 병렬로 배포한다. 기본값은 OrderedReady이다.
Scale Up/Down
kubectl scale statefulset mysql --replicas=5
kubectl scale statefulset mysql --replicas=3
스케일 업이 되는 경우, 모든 포드가 준비 상태가 된 후에 다음 포드가 생성된다.
스케일 다운이 되는 경우에는 스케일 업과 반대 순서로, 가장 마지막 포드부터 삭제된다.
Delete
Stateful set 삭제도 스케일 다운과 마찬가지로, 가장 마지막 포드부터 삭제된다.
kubectl delete statefulset mysql
참고문서
https://livebook.manning.com/book/kubernetes-in-action/chapter-10/76