


stateless App
분산목적으로 app 실패 후 재생성 과정에서
app3 -> app4 변경 가능
하나의 볼륨 공유 가능
stateful App
각각 app마다 고유 지정 역할이 있기 때문에
각 volume 존재 , app1 -> app1 재생성 규칙


1-1) ReplicaSet
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replica-web
spec:
replicas: 1
selector:
matchLabels:
type: web
template:
metadata:
labels:
type: web
spec:
containers:
- name: container
image: kubetm/app
terminationGracePeriodSeconds: 10
1-2) StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: stateful-db
spec:
replicas: 1
selector:
matchLabels:
type: db
template:
metadata:
labels:
type: db
spec:
containers:
- name: container
image: kubetm/app
terminationGracePeriodSeconds: 10

2-1) PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: replica-pvc1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1G
storageClassName: "fast"
2-2) ReplicaSet
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replica-pvc
spec:
replicas: 1
selector:
matchLabels:
type: web2
template:
metadata:
labels:
type: web2
spec:
nodeSelector:
kubernetes.io/hostname: k8s-node1
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: storageos
mountPath: /applog
volumes:
- name: storageos
persistentVolumeClaim:
claimName: replica-pvc1
terminationGracePeriodSeconds: 10
touch /applog/server.log
2-3) StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: stateful-pvc
spec:
replicas: 1
selector:
matchLabels:
type: db2
serviceName: "stateful-headless"
template:
metadata:
labels:
type: db2
spec:
containers:
- name: container
image: kubetm/app
volumeMounts:
- name: volume
mountPath: /applog
terminationGracePeriodSeconds: 10
volumeClaimTemplates:
- metadata:
name: volume
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1G
storageClassName: "fast"

3-1) Service (Headless)
apiVersion: v1
kind: Service
metadata:
name: stateful-headless
spec:
selector:
type: db2
ports:
- port: 80
targetPort: 8080
clusterIP: None
3-2) Pod
apiVersion: v1
kind: Pod
metadata:
name: request-pod
spec:
containers:
- name: container
image: kubetm/init
nslookup stateful-headless
curl stateful-pvc-0.stateful-headless:8080/hostname