-
Kubernetes (K8S): Object - 6-3. Storage: Persistent Volume공부합시다!/Kubernetes 2022. 12. 26. 00:11728x90
K8S에서 제공하는 Storage 유형은 volume, Persistent Volume, Projected Volume, Storage Class, 임시 볼륨 등으로 다양하며 스냅샷 및 복제가 가능하며 스토리지 용량을 제한하는 등의 기능을 수행한다.
오늘은 가장 많이 사용하는 volume과 persistent volume에 대해서 학습합니다.
1. Volume의 필요성
1.1. Container간의 Data 공유
1.2. Contraier의 문제가 발생 시 Container는 재시작 또는 다시 생성하면 되지만 Data 보존은?
이런 문제를 해결할 수 있는 것이 K8S의 Volume 추상화
2. Storage 유형
2.1. volume
2.2. PV(Persistent Volume)와 PVC(Persistent Volume Claim)를 가지고 사용할 수 있는 볼륨을 지정하고 연결
2.2.1. PV :
2.2.1.1. Volume Resource 그 자체
2.2.1.2. POD의 생명주기와는별도로 PV를 지정하고 사용할 수 있음.
2.2.1.3. POD와 상관없이 Volume 사용 가능하며, 운영 방식에 따라 자유롭게 사용.
2.2.2. PVC
2.2.2.1. 사용자가 Volume에 요청하는 방식을 정의
2.2.2.2. POD와 PV의 의존성을 줄일 수 있음.
3. Storage LifeCycle
3.1. Provisioning
3.1.1. Persistent Volume(이하 PV) 생성 단계
3.1.2. Static and Dynamic 방식
3.1.2.1. Static (고정) : 미리 PV 생성 후 PVC(Persistent Volume Claim)를 통해 사용하는 POD 연결
3.1.2.2. Dynamic (비고정) : PVC을 통해 PV를 사용하려고 할때 권한이나 용량을 정해서 유동적을 사용하는 방법
3.2. Binding
3.2.1. 생성된 PV를 PVC에 Binding 하는 단계
3.3. Using
3.3.1. PVC가 POD에 설정되어 PV가 실질적으로 사용되는 단계
3.3.2. POD가 사용하는 PV는 임의 삭제 불가 : Data 유실 문제 발생 방지
3.4. Reclaiming
3.4.1. PVC가 삭제된 후 PV가 초기화 되는 과정
3.4.1.1. Retain
3.4.1.2. Delete
3.4.1.3. Recycle
4. Persistent Volume 실습
4.1. Cluster의 admin: 물리적 Storage와 연결되는 Persistent Volume 생성
4.2. Developer/Cluster User: Persistent Volume이 자동으로 Binding되는 Persistent Volume Claim생성
4.3. Storage에 대해서 4.1의 Persistent Volume Claim을 사용하는 POD 생성
이라는 단계를 거치게 됩니다.
즉 관리자가 PV를 생성하면 사용자들이 이를 이용하는 PVC와 POD를 생성하는 과정을 거치게 됩니다.
주의: NFS등을 이용해서 모든 Node의 공유파일 시스템을 사용할 것을 권장합니다.
아니라면 모든 node에 동일한 디렉토리와 파일 /web/index.html 을 생성해야 합니다.
4.1. Cluster의 admin: 물리적 Storage와 연결되는 Persistent Volume 생성
4.1.1. 모든 node 에서 /web/index.html 파일 생성
4.1.2. 추후 node 스케쥴링이 가능해 지시면 필요한 Node에만 반드시면 됩니다.
# mkdir /web/ # cat > /web/index.html << EOF # <html> # <body> # <h1>K8S-WEBSERVER-PV</h1> # </body> # </html> # EOF
4.1.2. pv 생성
apiVersion: v1 kind: PersistentVolume metadata: name: pv-volume # labels: # type: local spec: storageClassName: manual capacity: storage: 10Gi accessModes: - ReadWriteOnce hostPath: path: "/web/"
# kubectl get pv
4.2. Developer/Cluster User: Persistent Volume이 자동으로 Binding되는 Persistent Volume Claim생성
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pv-claim spec: storageClassName: web accessModes: - ReadWriteOnce resources: requests: storage: 3Gi
# kubectl get pvc
4.3. Storage에 대해서 4.1의 Persistent Volume Claim을 사용하는 POD 생성
apiVersion: v1 kind: Pod metadata: name: pv-pod spec: volumes: - name: pv-storage persistentVolumeClaim: claimName: pv-claim containers: - name: pv-container image: nginx ports: - containerPort: 80 name: "http-server" volumeMounts: - mountPath: "/usr/share/nginx/html" name: pv-storage
# kubectl get pod # kubectl exec pvpod -it -- bash
4.4. Service NodePort 생성 후 확인
# kubectl expose pod pvpod --type=NodePort
4.5. 초기화
# kubectl delete svc pvpod # kubectl delete pod pvpod # kubectl delete pvc pv-claim # kubectl delete pv pv-volume
이것으로 persistent volume에 대한 포스팅을 마칩니다.
앞으로 더 고생하셔야 합니다. 화이팅!
Have a nice day!
728x90'공부합시다! > Kubernetes' 카테고리의 다른 글
Kubernetes (K8S): App이 실행되지 않는 image(Centos, Ubuntu등) 실행 (0) 2022.12.28 Kubernetes (K8S): Network - 1. Container Networking (0) 2022.12.27 Kubernetes (K8S):실습2: 각기 다른 POD의 wordpress + mysql (0) 2022.12.23 Kubernetes (K8S):실습1: 동일POD내의 wordpress + mysql (0) 2022.12.23 Kubernetes (K8S): 설치 영상: 2022년 12월 21일 Test (0) 2022.12.21