도커의 기본 아키텍처 : Cluster Layer이전까지는 ReadOnly로 수정이 불가하고 Delete시 통으로 날아간다.
따라서 Volume설정을 잘해야 영구적으로 데이터 관리가 가능하다.
볼륨을 설정하는 방법은 크게 다음과 같다.
1. POD에 다이렉트로 할당하기
2. Persistent Volume 설정하고 Persistent Volume Claim 으로 바인딩하기(자동화)
아래는 1번 방법이다.
- POD에서 Volume설정을 통해 HostPath등을 직접 할당할 수 있다.
hostPath configuration example
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: k8s.gcr.io/test-webserver
name: test-container
volumeMounts:
- mountPath: /test-pd
name: test-volume
volumes:
- name: test-volume
hostPath:
# directory location on host
path: /data
# this field is optional
type: Directory
2번 방법이다.
PVC는 사용자가 PV에 하는 요청이다. 사용하고 싶은 용량은 얼마인지, 읽기/쓰기는 어떤 모드를 사용하고 싶은지 등을 정하여 요청한다. 즉, 쿠버네티스는 이처럼 파드에 볼륨을 직접 할당하는 형태가 아니라, 중간에 PVC를 두어 파드와 파드가 사용할 스토리지를 분리하는 전략인 것이다. 이렇게 분리됨으로써 이점은 다양한 스토리지를 PV로 사용할 수 있는데, 파드는 어떠한 스토리지의 볼륨인지 신경쓸 필요없이 PVC으로 요청만 하면 되기 때문에 의존성이 줄어들게 되고, manifest도 분리됨으로써 설정파일 자체의 복잡함이 사라진다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: local-pvc
spec:
storageClassName: local-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Mi
※ 할당된 PV는 기본적으로 Retain정책에 따르며 PVC가 삭제가된다해도 같이 삭제되지는 않음.
하지만 가용상태는 아니다.
※ Persistent Volume Claim 보다 Persistent Volume이 크면 자동 바인딩됨. 그리고 Persistent Volume의 용량 전체가 가용하다.
- PVC를 사용할때는 POD에 다음과 같이 정의해야한다.
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: myfrontend
image: nginx:alpine
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim:
claimName: local-pvc
스토리지클래스 리소스 : 제공자의 다양한 제품형식에 맞추어 저장공간을 정의 할 수 있다.
각 스토리지클래스에는 해당 스토리지클래스에 속하는 퍼시스턴트볼륨을 동적으로 프로비저닝 할 때 사용되는 provisioner, parameters 와 reclaimPolicy 필드가 포함된다.
스토리지클래스 오브젝트의 이름은 중요하며, 사용자가 특정 클래스를 요청할 수 있는 방법이다. 관리자는 스토리지클래스 오브젝트를 처음 생성할 때 클래스의 이름과 기타 파라미터를 설정하며, 일단 생성된 오브젝트는 업데이트할 수 없다.
'PaaS > Kubernetes' 카테고리의 다른 글
(Kubernetes) Service (0) | 2021.04.06 |
---|---|
(Kubernetes) Networking (0) | 2021.04.05 |
(Kubernetes) Network Policy (0) | 2021.04.03 |
(Kubernetes) Security Context (0) | 2021.04.03 |
(Kubernetes) kubeconfig (0) | 2021.04.01 |