본문 바로가기

쿠버네티스

라즈베리파이 쿠버네티스 Nextcloud 의 PV, PVC 만들고 본격 운영하기

이번시간에는 지난번에 쿠버네티스에 Nextcloud 를 올리는 과정에 이어 초기 설정 및 볼륨 마운트를 하여 실제로 클라우드 저장소로 쓸 수 있는 과정을 설명 드리겠습니다.

 

쿠버네티스에 Nextcloud 를 올리는 과정부터 보고 싶으신 분들은 아래 링크를 참고 해 주세요.

 

lance.tistory.com/2

 

라즈베리파이에 쿠버네티스(k8s) 올리고 Nextcloud 배포하여 나만의 클라우드 구축하기

점점 본인만의 NAS를 사용하시는 분들도 많고, 자체적인 클라우드 운영으로 월 비용을 안내고 사용하시겠다는 분들이 많아지는 것 같아서(사실 저도 그 중 한명입니다) 이 글을 올리게 되었습니

lance.tistory.com

 

그럼 시작하겠습니다.

 

 

지난 글에서 아래 화면 까지 나오게 성공 하였습니다.

사실 여기서 원하는 계정명, 비번을 치고 완료 버튼을 누르면 바로 Nextcloud 가 시작 됩니다.

 

하지만 이렇게 시작을 하면 영구적인 저장소가 아무것도 마운트가 안 되어 있는 상태이기 때문에 Pod 가 죽었다 살아나면 모든 데이터는 다시 날라가고 처음부터 시작하게 되겠죠.

 

그래서 위 화면 상태에서 따로 뭔가 해주지 마시고 일단 다시 명령어를 칠 수 있는 ssh로 접속을 해 봅시다.

 

오늘 할 것은 아래와 같습니다.

 

1. pv 생성

2. pvc 생성

3. deployment 에 만든 pvc 마운트

 

그럼 시작 하겠습니다.

 

 

1. pv 생성

 

쿠버네티스에서 영구 저장소를 만들어 사용하기 위해선 PV(Persistent Volume) 를 먼저 만들어 줘야 합니다.

 

pv는 system이 저장될 system pv, 그리고 실제 사용자가 파일을 집어넣으면 파일이 저장될 data pv 이렇게 2개를 만들 겁니다.

(system pv 를 만드는 이유는, Nextcloud 에서 나중에 각종 설정 및 추가 app 설치를 하게되면 여기로 저장이 됩니다. 만약 system pv 를 만들지 않으면 Nextcloud에서 app 설치나 설정사항들을 해줘도 Pod 가 재기동되면.. 다 날아가기 때문에 만들어 주는 것이 정신 건강에 좋습니다)

 

creating_system_pv.yml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nextcloud-system
spec:
  capacity:
    storage: 100Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
    - ReadWriteMany
  storageClassName: sc-nextcloud-system
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /mnt/nextcloud_system_pv

용량 : 100GB (용량은 편하신대로 조정하시면 됩니다. 최소 50GB 이상은 권장)

accessModes : 여러번 write 가능하도록 설정

storageClassName : sc-nextcloud-system (나중에 pvc 와 binding 할때 요 이름으로 하게 됨)

persistentVolumeReclaimPolicy : Retain (Retain 은 만약 pvc, pv 를 모두 지우더라도 실제 파일은 폴더에 남아있게 하는 설정)

path : /mnt/nextcloud_system_pv (실제 사용할 폴더로 지정해 주시면 됩니다)

 

 

creating_data_pv.yml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nextcloud-data
spec:
  capacity:
    storage: 900Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
    - ReadWriteMany
  storageClassName: sc-nextcloud-data
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /mnt/nextcloud_data_pv

용량 : 900GB (데이터 영역이 될 공간이므로 가능한 범위 내에서 넉넉히 잡아주시면 됩니다)

accessModes : 여러번 write 가능하도록 설정

storageClassName : sc-nextcloud-data (나중에 pvc 와 binding 할때 요 이름으로 하게 됨)

persistentVolumeReclaimPolicy : Retain (Retain 은 만약 pvc, pv 를 모두 지우더라도 실제 파일은 폴더에 남아있게 하는 설정)

path : /mnt/nextcloud_data_pv (실제 사용할 폴더로 지정해 주시면 됩니다)

 

 

자 이제 빠르게 위 yml 2개 파일을 긁어서 각각 만들어 줍니다.

 

kubectl apply -f creating_system_pv.yml

한번 더,

kubectl apply -f creating_data_pv.yml

이제 system, data pv 를 만들었습니다. (pv 는 namespace 별로 만들어지지 않기 때문에 굳이 -n 옵션 안줘도 됨)

 

kubectl get pv

위 명령어로 pv 를 확인해보면 방금 만든 pv 가 Available 인걸 볼 수 있습니다.

 

 

2. pvc 생성

 

PVC(Persistent Volume Claim) 는 PV(Persistent Volume) 와 binding 되는 구조이며 1:1로 매칭 됩니다.

 

어서 pvc를 만들고 pv와 붙여 보도록 하겠습니다.

 

 

creating_system_pvc.yml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-nextcloud-system
spec:
  accessModes:
    - ReadWriteOnce
    - ReadWriteMany
  volumeMode: Filesystem
  resources:
    requests:
      storage: 100Gi
  storageClassName: sc-nextcloud-system

용량 : 100GB (pv 만들때의 용량과 반드시 동일하게 적어주셔야 합니다. 안그러면 binding 이 되지 않습니다)

accessModes : 여러번 write 가능하도록 설정 (이것도 pv 때와 동일하게 맞춰 주세요)

storageClassName : sc-nextcloud-system (pv 생성 시 준 storageClassName 과 동일하게 맞춤. 이걸로 서로 매칭을 함)

 

 

creating_data_pvc.yml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-nextcloud-data
spec:
  accessModes:
    - ReadWriteOnce
    - ReadWriteMany
  volumeMode: Filesystem
  resources:
    requests:
      storage: 900Gi
  storageClassName: sc-nextcloud-data

용량 : 900GB (pv 만들때의 용량과 반드시 동일하게 적어주셔야 합니다. 안그러면 binding 이 되지 않습니다)

accessModes : 여러번 write 가능하도록 설정 (이것도 pv 때와 동일하게 맞춰 주세요)

storageClassName : sc-nextcloud-data (pv 생성 시 준 storageClassName 과 동일하게 맞춤. 이걸로 서로 매칭을 함)

 

 

kubectl apply -f creating_system_pvc.yml -n test

위 명령어로 system pvc 를 만들어 주고,

kubectl apply -f creating_data_pvc.yml -n test

위 명령어로 data pvc 를 만들어 줍니다. (pvc는 namespace 별로 따로 관리되기 때문에 test 네임스페이스 지정을 해줘야 함)

이제 system, data pvc 도 다 만들었습니다.

 

kubectl get pvc -n test

위 명령어로 만든 pvc 확인을 해 보세요.

 

NAME                        STATUS   VOLUME                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
pvc-nextcloud-system        Bound    pv-nextcloud-system        100Gi      RWO,RWX        sc-nextcloud-system        1d
pvc-nextcloud-data          Bound    pv-nextcloud-data          900Gi      RWO,RWX        sc-nextcloud-data          1d

위와 같이 2개 다 Bound 라고 나오면 pv 와 pvc 간에 각각 binding 이 잘 되고 사용할 준비가 완료 된 것입니다.

 

 

3. deployment 에 만든 pvc 마운트

 

이제 pvc 준비가 완료 되었으니 deployment 에 정의만 해 주면 됩니다.

 

지난번에 deployment 를 만들어 두었으니,

(상단의 지난 게시글 링크타고 가보시면 deployment 만드는 과정 있습니다)

 

kubectl edit deployment nextcloud -n test

위 명령어로 edit 모드로 들어갑니다.

 

빨간 표시를 한 부분을 똑같이 작성해 주세요.

위치가 헷갈리시는 분들은 dnsPolicy 라고 써있는 부분 위쪽으로 volumeMounts 항목을 정의하시고 아래 쭉 나열해 주시면 됩니다. volumes 부분 역시 terminationGracePeriodSeconds 항목 밑으로 만들어서 나열을 해 주세요.

(그냥 그림과 똑같은 위치에 똑같이 적으시면 맘 편합니다)

 

다 하셨으면 :wq! 로 저장하고 나오시면 즉각 반영이 되면서 pod 가 다시 생성 되게 됩니다.

 

 

이제 그러면 system 과 data 영역이 모두 마운트 되었습니다.

 

다시한번 http://[IP또는dns명]:31014 url 로 접속을 해 보시면 다시 아래의 화면이 나올 겁니다.

 

이제 여기서 원하시는 관리자용 계정 및 비번을 윗쪽에 입력해 주시고,

 

저장소 및 데이터베이스를 누르시면 

 

위와 같이 나올텐데 그냥 저대로 두시면 됩니다.

(좀전에 deployment 에 pvc 마운트를 할 때 보시면 data 영역은 /var/www/html/data 경로로 붙여두었기 때문에 바꾸시려면 deployment 상에도 같이 변경해 주셔야 합니다)

 

그리고 우린 간단하게 SQLite 를 사용할 것이므로 DB설정도 그대로 둡니다.

 

이제 맨 하단의 완료 버튼을 누르면,

 

짜잔.

 

클라우드 저장소가 시작되었습니다. (참고로 위 그림은 Nextcloud20 버전이라 UI가 새로워 졌습니다)

 

 

이제 마음껏 데이터를 집어넣으시면 됩니다.

 

끝.