Statefulset
Pod의 상태를 유지해주는 컨트롤러
- Pod 이름
- Pod 의 볼륨(스토리지)
Pod이름 : Hash값으로 Random으로 만들어진다.
serviceName이라는 Field를 가지고 동작한다.
# DaemonSet처럼 노드당 하나씩 보장해주는 것은 아님.
# 파드의 이름을 보장해줄 뿐이다.
[master ~]$ cat > rc-nginx.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: rc-nginx
spec:
replicas: 3
selector:
app: webui
template:
metadata:
name: nginx-pod
labels:
app: webui
spec:
containers:
- name: nginx-container
image: nginx:1.14
[master ~]$ cat > statefulset-exam.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: sf-nginx # 여기에 순차적으로 번호가 붙을 것
spec:
replicas: 3
serviceName: sf-service
# podManagementPolicy: OrderedReady # Default 값 (순차적으로 만들어진다.)
podManagementPolicy: Parallel # 이걸로 선택하면 동시에 만들어진다.
selector:
matchLabels:
app: webui
template:
metadata:
name: nginx-pod
labels:
app: webui
spec:
containers:
- name: nginx-container
image: nginx:1.14
[master ~]$ kubectl create -f statefulset-exam.yaml
statefulset.apps/sf-nginx created
[master ~]$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sf-nginx-0 1/1 Running 0 12s 10.5.1.2 node2 <none> <none>
sf-nginx-1 1/1 Running 0 12s 10.5.3.2 node4 <none> <none>
sf-nginx-2 1/1 Running 0 12s 10.5.2.2 node3 <none> <none>
# 이름을 보장해주기 때문에 1번을 삭제해도 1번이 다시 생성된다.
[master ~]$ kubectl delete pod sf-nginx-1
pod "sf-nginx-1" deleted
[master ~]$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sf-nginx-0 1/1 Running 0 41s 10.5.1.2 node2 <none> <none>
sf-nginx-1 1/1 Running 0 3s 10.5.3.3 node4 <none> <none>
sf-nginx-2 1/1 Running 0 41s 10.5.2.2 node3 <none> <none>
# Scale out / down
# kubectl scale [object] [pod] --replicas
# object의 replicas 수를 scale하는 명령어
[master ~]$ kubectl scale statefulset sf-nginx --replicas=4
statefulset.apps/sf-nginx scaled
[master ~]$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sf-nginx-0 1/1 Running 0 2m26s 10.5.1.2 node2 <none> <none>
sf-nginx-1 1/1 Running 0 108s 10.5.3.3 node4 <none> <none>
sf-nginx-2 1/1 Running 0 2m26s 10.5.2.2 node3 <none> <none>
sf-nginx-3 1/1 Running 0 2s 10.5.1.3 node2 <none> <none>
[master ~]$ kubectl scale statefulset sf-nginx --replicas=2
statefulset.apps/sf-nginx scaled
[master ~]$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sf-nginx-0 1/1 Running 0 2m49s 10.5.1.2 node2 <none> <none>
sf-nginx-1 1/1 Running 0 2m11s 10.5.3.3 node4 <none> <none>
# Rolling-update
[master ~]$ kubectl edit statefulsets.apps sf-nginx
..
spec:
containers:
- image: nginx:1.15
imagePullPolicy: IfNotPresent
name: nginx-container
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
...
statefulset.apps/sf-nginx edited
# 순차적으로 바뀌는 것 확인
[master ~]$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sf-nginx-0 1/1 Running 0 4m44s 10.5.1.2 node2 <none> <none>
sf-nginx-1 0/1 ContainerCreating 0 1s <none> node3 <none> <none>
[master ~]$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sf-nginx-0 0/1 ContainerCreating 0 4s <none> node4 <none> <none>
sf-nginx-1 1/1 Running 0 12s 10.5.2.3 node3 <none> <none>
[master ~]$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sf-nginx-0 1/1 Running 0 9s 10.5.3.4 node4 <none> <none>
sf-nginx-1 1/1 Running 0 17s 10.5.2.3 node3 <none> <none>
[master ~]$ kubectl describe pod sf-nginx-1
Name: sf-nginx-1
Namespace: default
Priority: 0
Service Account: default
...
Containers:
nginx-container:
Container ID: containerd://f865a487a19b101b91f1a9fa6e26ab92139cc8f36ec5802748af3dd3b38b53f7
Image: nginx:1.15
Image ID: docker.io/library/nginx@sha256:23b4dcdf0d34d4a129755fc6f52e1c6e23bb34ea011b315d87e193033bcd1b68
Port: <none>
Host Port: <none>
...
# Roll back
[master ~]$ kubectl rollout undo statefulset sf-nginx
statefulset.apps/sf-nginx rolled back
[master ~]$ kubectl delete statefulsets.apps sf-nginx
statefulset.apps "sf-nginx" deleted
반응형
'Container > Kubernetes' 카테고리의 다른 글
[K8S] Cronjob Controller (0) | 2024.02.28 |
---|---|
[K8S] Job Controller (0) | 2024.02.27 |
[K8S] DaemonSet (0) | 2024.02.26 |
[K8S] Deployment - RollingUpdate (0) | 2024.02.21 |
[K8S] ReplicaSet (0) | 2024.02.21 |