# 설치
kubectl krew update
kubectl krew install pv-migrate
# 마이그레이션
## 동일 네임스페이스 간 마이그레이션
kubectl pv-migrate migrate old-pvc new-pvc
rsync --delete 플래그 추가
kubectl pv-migrate migrate --dest-delete-extraneous-files old-pvc new-pvc
파드에 마운트 중이어도 무시하고 sync 진행
kubectl pv-migrate migrate --ignore-mounted old-pvc new-pvc
## 네임스페이스 간 마이그레이션
kubectl pv-migrate migrate \
--source-namespace source-ns \
--dest-namespace dest-ns \
old-pvc new-pvc
## 클러스터 간 마이그레이션
kubectl pv-migrate migrate \
--source-kubeconfig /path/to/source/kubeconfig \
--source-context some-context \
--source-namespace source-ns \
--dest-kubeconfig /path/to/dest/kubeconfig \
--dest-context some-other-context \
--dest-namespace dest-ns \
--dest-delete-extraneous-files \
old-pvc new-pvc
## 커스텀 컨테이너 이미지 사용하여 마이그레이션
kubectl pv-migrate migrate \
--helm-set rsync.image.repository=mycustomrepo/rsync \
--helm-set rsync.image.tag=v1.2.3 \
--helm-set sshd.image.repository=mycustomrepo/sshd \
--helm-set sshd.image.tag=v1.2.3 \
old-pvc new-pvc
## k8s network policy 를 사용하는 경우 마이그레이션
kubectl pv-migrate migrate \
--helm-set sshd.networkPolicy.enabled=true \
--helm-set rsync.networkPolicy.enabled=true \
--source-namespace source-ns \
--dest-namespace dest-ns \
old-pvc new-pvc
# PV 재사용하기
RECLAIM POLICY 을 기본값 Delete 에서 Retain 으로 변경하면 PVC 가 삭제되어도 PV 는 자동으로 삭제되지 않음
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-5d2bdbbc-1c95-4828-9810-0c30af3556b0 1Gi RWO Retain Released wordpress/mysql-pv-claim gp2 16h
이 경우 PV 를 확인해보면 STATUS 가 Released 인 것을 확인할 수 있다.
하지만 새로운 PVC 를 만들어도 PVC 는 Pending 상태로 PV 와 바인딩되지 못하는 것을 확인할 수 있다.
이런 경우 PV 의 정보 중 기존 연결했던 PVC 의 정보를 제거해줘야 새로운 PVC 에 바인딩이 가능하다.
kubectl edit pv pvc-5d2bdbbc-1c95-4828-9810-0c30af3556b0
제거해야하는 블럭
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: mysql-pv-claim
namespace: wordpress
resourceVersion: "691553"
uid: 7eed4305-052f-47f9-9d6e-269152e9b325
동일한 PVC 네임과 연결하려면 resourceVersion, uid 만 삭제하면 되고,
아예 새로운 PVC 와 연결하려면 claimRef 블럭 전체를 삭제하면 된다.
정상적으로 edit 한 경우 PV 의 STATUS 가 Available 로 변경된 것을 확인할 수 있다.
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-5d2bdbbc-1c95-4828-9810-0c30af3556b0 1Gi RWO Retain Available wordpress/mysql-pv-claim gp2 16h
PVC 의 상태를 확인하여 바인딩이 정상적으로 되었는지 확인한 뒤, 포드를 생성한다.
kubectl get pvc -n wordpress
기존 데이터가 남아있는 것을 확인할 수 있다.
# 기존 pv 를 재사용하도록 pvc 생성
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nginx-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 3Gi
storageClassName: nfs-client
-> 아래와 같이 특정 sc 의 pv 를 사용하도록 매니페스트를 수정해준다.
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nginx-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 3Gi
storageClassName: nfs-ent
volumeMode: Filesystem
volumeName: pvc-22f035ca-f1da-4f92-9e1f-87b08f3e866b
'kubernetes' 카테고리의 다른 글
k8s 마스터노드 HA 구성 (0) | 2023.03.07 |
---|---|
Kubernetes Secrets Store CSI Driver (1) | 2023.03.07 |
pod에서 kube api 액세스 (0) | 2023.03.07 |
pod으로 클러스터 제어 (0) | 2023.03.07 |
container multicast (0) | 2023.03.07 |