관리자는 PV로 볼륨을 생성한 뒤, 사용자는 PVC로 포드 내에서 볼륨을 사용할 수 있다.
또는 스토리지 클래스를 정의하여 provisioner를 이용해 볼륨을 자동으로 프로비저닝할 수 있다.
Stateful Set
yaml 형식의 정의 파일에서 같은 PVC를 설정하면, Stateful Set에서 생성한 모든 포드가 같은 볼륨을 사용한다.
여러 포드 또는 애플리케이션의 여러 인스턴스가 같은 스토리지를 공유하고 접근하는 경우에 해당한다.
하지만 각 포드에 별도의 볼륨이 필요한 경우, 즉 데이터 공유를 하지 않는 경우에는 각 포드에 로컬 스토리지가 필요하다.
volumeClaimTemplete
배열이기 때문에 여러 템플릿을 지정할 수 있다.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
labels:
app: mysql
spec:
replicas: 3
selector:
matchLabels:
app: mysql
templete:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql
volumeMounts:
- mountPath: /var/lib/mysql
name: data-volume
volumeClaimTempletes:
- matadata:
name: data-volume
spec:
accessModes:
- ReadWriteOnce
storageClassName: google-storage
resources:
requests:
storage: 500Mi
Stateful set이 생성되면 첫번째 포드가 생성되고, 포드가 생성되는 동안 PVC가 스토리지 클래스에 연결된다. 스토리지 클래스는 볼륨을 프로비저닝한 다음 PV를 생성하고, PV를 볼륨과 연결한 뒤 PVC를 PV에 바인딩한다.
그리고 다음 포드가 생성된다.
포드가 삭제되는 경우,
노드에 재생성이 스케쥴링된다. PVC 또는 연결된 볼륨은 자동 삭제하지 않으며 새 포드에 연결된다.