
Stateless Application(Web Server)
Stateful Application(Database)

| ReplicatSet | StatefulSet | |
|---|---|---|
| 생성 | Radom으로 이름 생성 | Index로 이름이 생성 |
| 여러개 생성 시 | 동시 생성 | 순차 생성 |
| 삭제 시 | 새 이름으로 생성 | 기존 이름으로 생성 |
| replicas 0 설정 시 | 동시 삭제 | index가 높은 순으로 순차적 삭제 |

| ReplicatSet | StatefulSet | |
|---|---|---|
| 생성 | PV와 연결하려면 PVC를 직접 생성 | volumnClaimTemplete를 통해 pvc 동적 생성 |
| Pod가 여러개 일 경우 | 모두 하나의 PVC를 바라본다 | 각각의 Pod마다 PVC와 PV를 가지고 있다 |
| 삭제 시 | 새 이름으로 생성되고 기존 PVC 연결 | 기존 이름으로 생성되고 기존 PVC 연결 |
| replicas 0 설정 시 | 모두 삭제 | Pod은 삭제가 되지만 PVC, PV는 유지 된다. |
**주의 할점**
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"
metadata의 name과 volumnMount의 name은 같아야한다, 또한 위와 같이 volumnClaimTemplete을 지정해 놓으면 PVC이름은 metatdata의 이름(volumn)이 앞에 붙는다.
apiVersion: v1
kind: Service
metadata:
name: stateful-headless
spec:
selector:
type: db2
ports:
- port: 80
targetPort: 8080
clusterIP: None
metadata의 name은 statefulSet의 serviceName과 같아야 한다.

각각의 Pod마다 기능별로 배포가 되어있었을 때에 기존에는 Path에 따라 서비스로 연결을 해줘야 했다, 하지만 Ingress를 통해 domain에 따라 각각의 서비스에 연결이 가능하게 되었다.
목적

위의 그림처럼 도메인의 path를 통해 ingress 컨트롤러가 rule에 지정된 서비스로 연결을 시켜준다.

새로운 버전을 테스트 및 배포할 때 사용된다.

파드와 CPU와 메모리 자원 할당을 조절하는 서비스

부하가 생기면 Pod의 개수를 확장(Scale-Out/Scale-In)
부하가 생기면 Pod의 리소스를 확장(Scale-Up/Scale-Down)
클러스터 노드에 자원이 없을 경우 노드를 동적으로 추가 및 삭제 해준다.