이번시간에는 지난번에 쿠버네티스에 Nextcloud 를 올리는 과정에 이어 초기 설정 및 볼륨 마운트를 하여 실제로 클라우드 저장소로 쓸 수 있는 과정을 설명 드리겠습니다.
쿠버네티스에 Nextcloud 를 올리는 과정부터 보고 싶으신 분들은 아래 링크를 참고 해 주세요.
그럼 시작하겠습니다.
지난 글에서 아래 화면 까지 나오게 성공 하였습니다.
사실 여기서 원하는 계정명, 비번을 치고 완료 버튼을 누르면 바로 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가 새로워 졌습니다)
이제 마음껏 데이터를 집어넣으시면 됩니다.
끝.
'쿠버네티스' 카테고리의 다른 글
쿠버네티스(kubernetes) 이미지 업데이트(update) 또는 이미지 자동 업데이트 막는 방법 (0) | 2021.01.17 |
---|---|
라즈베리파이4 에 싱글노드(1대) 쿠버네티스 설치 하기 (2) | 2020.12.27 |
라즈베리파이에 쿠버네티스(k8s) 올리고 Nextcloud 배포하여 나만의 클라우드 구축하기 (0) | 2020.12.26 |