Introduction
개념은 자세히 안적고 대충 persistent volume이랑 persistent volume claim, 이 둘을 사용하는 pod의 관계를 알아야 한다.
간단한 테스트 코드를 직접 쳐보며 그림으로 설명하겠다.
Summary
- pv, pvc, pod관계를 알아봐야함.
- pvc가 만들어지는순간 pv랑 pvc가 둘다 bound가 되어야 한다.
- 공식문서에서는 nfs쓰는데 시험은 보통 hostPath타입되므로 volume부분을 따로 복붙해와서 써야한다.
- storage class는 식별자같은거임.
- volumeMode: Block 이건 쓰지마샘. 계속 pending상태됨.
export samp="--dry-run=client -o yaml"
export now="--force --grace-period 0"
$samp, $now붙은건 이 명령어로 약어만든거니까 주의
Kubectl Reference Docs
kubernetes.io
# persistent volume
이렇게 persistent volume을 두개 만들었다.
persistent volume은 가상의 볼륨? 이런 느낌인데, 이 볼륨을 리소스들, pod들이 사용할 수 있다.
코드로 각각 보면
apiVersion: v1
kind: PersistentVolume
metadata:
name: muzzi-pv
spec:
storageClassName: "muzzi"
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /home/user/k8s/html-pv
apiVersion: v1
kind: PersistentVolume
metadata:
name: dori-pv
spec:
storageClassName: "dori"
capacity:
storage: 500Mi
accessModes:
- ReadWriteOnce
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /home/user/k8s/html-pv
그냥 단순하게 hostPath타입으로 볼륨을 만들어준 pv를 사용했음.
reclaim정책은 retain, delete등이 있는데, retain은 pv다써도 안에 자료들이 남겨지는거고, delete는 걍 다 삭제해주는거다.
recycle은 공식문서에서 더이상 쓰지말란다.
각각 pv를 생성해주면,
kubectl get pv
muzzi, dori pv가 잘 만들어진걸 볼 수 있다.
# persistent volume claim
claim은 주장? 뭐 이런건데
일단 pvc를 만들면 조건에 맞는 볼륨이랑 bound를 해준다.
저중에서 맞는건 muzzi-pv랑 bound될거임
코드로 보면
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 800Mi
storageClassName: muzzi
이렇다.
이걸 만들어주면,
pvc가 bound됐다고 나오고, pv도 적절한 muzzi pv가 bound된걸 확인 할 수 있다.
# pod에서 persistent volume 사용하기
이제 pod에서 volume을 pvc를 사용한다고 하면 pod의 볼륨이 pvc가 bound된 pv를 사용하게 된다.
apiVersion: v1
kind: Pod
metadata:
name: web
spec:
containers:
- name: web
image: nginx
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim:
claimName: myclaim
뭐 이런식으로 생겼다.
참고로 난 nginx웹서버를 테스트할거라서 저렇게 mount path를 설정해주었다.
yaml로 pod를 만들어준 후, curl로 확인해보면
이렇게 forbidden이 뜬다.
아까 pv가 hostpath 타입이고 경로가
hostPath:
path: /home/user/k8s/html-pv
이랬으므로.. worker1노드에서 해당경로에 index.html파일을 만들어줘보자.
worker1노드로 가서 해당경로에 index.html파일을 임의로 만들어주고
curl을 다시 쳐보면
mount가 제대로 된걸 확인 할 수 있음.
# 삭제한다면?
먼저 pvc는 삭제하더라도 해당 pvc를 사용하는 pod가 있으면 삭제되지 않는다.
때문에 먼저 pod를 삭제한 후, pvc를 삭제해야 정상적으로 pvc가 삭제된다.
그리고나서 pv를 체크해보면 bound였던 status가 released가 된다.
reclaim정책이 retain이라서 그런가봄.
'k8s > CKA' 카테고리의 다른 글
따배씨 / network policy (0) | 2024.10.24 |
---|---|
따배씨 / dns (0) | 2024.10.22 |
Mock Exam - 2 (0) | 2024.09.24 |
role & rolebinding / clusterRole & clusterRolebinding / service account (0) | 2024.09.20 |
따배씨 / node selector, drain, taint (0) | 2024.09.13 |