본문 바로가기

쿠버네티스

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

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

 

물론 사실 집에서 쿠버네티스까지 쓰시는 분들은 많이 없겠지만.. Docker 를 사용하여 Nextcloud 를 띄우는 글들은 쉽게 찾아볼 수 있는 반면 쿠버네티스를 이용하여 Nextcloud 를 띄우는 사례는 생각보다는 많지 않아 직접 쓰게 되었습니다.

 

자체적인 NAS또는 서버에 Docker만 이용하여 쉽게 올릴 수 있긴 하나, Kubernetes 를 사용함으로써 더더욱 관리도 용이하게 할 수 있고, 가용성도 높일 수 있으며, 커리어(?)에도 많은 도움을 줄 수 있기 때문에..ㅋㅋ

 

 

저는 Kubernetes 에 Nextcloud 를 올려보도록 하겠습니다.

 

 

라즈베리파이에 쿠버네티스 구축을 원하시면 제가 이전에 쓴 글을 참고해 주세요.

lance.tistory.com/5

 

라즈베리파이4 에 싱글노드(1대) 쿠버네티스 설치 하기

라즈베리파이4(Raspberrypi 4) 에 쿠버네티스(Kubernetes) 를 설치하는 방법 입니다. 의외로 라즈베리파이(Raspberrypi)+쿠버네티스(Kubernetes) 조합이 한글로는 검색도 잘 안되고 정보가 아직 많이 없는 듯

lance.tistory.com

 

전 라즈베리파이4에 Kubernetes 를 올려두었으며 이를 기반으로 Nextcloud 를 올리려 합니다. (꼭 라즈베리파이가 아닌 일반 Kubernetes 여도 Nextcloud 올리는건 똑같습니다)

 

 

일단 Kubernetes(k8s) 는 설치가 되 있다는 가정 하에 진행 하겠습니다.

(여기서는 Docker 위에 올라가있는 Kubernetes 기반으로 설명을 진행하겠습니다)

 

 

1. Docker image 다운로드

쿠버네티스 자체적으로는 image를 다운받고 관리하는 기능은 없기 때문에 image는 docker image 그대로를 사용 합니다.

 

따라서,

docker pull nextcloud

 

위와 같이 명령어를 수행하면 nextcloud의 최신 버전 이미지를 받아 옵니다.

 

잘 받아졌는지 확인해보고 싶으면,

docker images

조금전에 받은 nextcloud 가 있는 것을 볼 수 있습니다.

 

 

2. Namespace 생성

이제 네임스페이스를 생성해 보겠습니다.

네임스페이스 지정 안하고 설치를 하면 default 네임스페이스에 생성이 되기 때문에 기왕이면 하나 만들어 주시는 것이 나중에 잘못되거나 했을 때 간편하게 지워버릴수도 있고 편리 합니다.

(나중에 꼬였을 경우 해당 네임스페이스만 지우면 이 안에서 작업한 관련 모든 내용을 지울 수 있어 편합니다)

kubectl create namespace test

네임스페이스 이름 : test

 

 

3. Deployment 생성

이제 받은 image 로 deployment 를 생성해 보겠습니다.

kubectl create deployment nextcloud-test --image=nextcloud -n test

deployment 이름 : nextcloud-test

사용할 image : nextcloud

네임스페이스 : test

Label : nextcloud-test (라벨은 default 값으로 deployment 이름과 동일하게 갑니다)

 

이제 deployment 가 생성되었고, 기본적으로 replicas : 1 로 설정이 되어있기 때문에 1개의 pod 도 생성이 되고 있을 겁니다.

 

생성되고 있는 pod 를 확인해보고 싶으시면,

kubectl get pod -n test

아직 끝은 아닙니다.

 

명령어로 간단하게 생성 하였기 때문에 디테일한 설정은 하나도 안 들어가 있습니다.

그 중, 꼭 해줘야할 것은 현재 container port 가 할당이 안되어 있는데 이는 다음단계에서 service 와 맵핑하기 위해 필수로 지정을 해줘야 합니다.

 

따라서,

kubectl edit deployment nextcloud-test -n test

위 명령어를 수행하면 vi 편집기로 들어가 집니다.

 

여기서 아래의 빨간 박스 부분을 추가해 줍니다. (위치 잘 확인하시고 라인 및 - 표시 정확히 맞추셔야 합니다)

위와 같이 추가를 다 하셨으면 :wq! 로 저장을 하고 빠져 나옵니다.

그러면 자동 edit 이 되면서 pod 를 재 생성 하게 됩니다.

 

여기서 containerPort 를 80 으로 해 준 이유는, Nextcloud image 자체는 80 또는 443(SSL인증서 구현시에) 으로 통신하기 때문입니다. 현재는 SSL 인증서까진 구현 안했으므로 80 통신을 합니다.

(8080 과 같은 포트로 바꾸시면 안됩니다. Nextcloud 자체는 기본적으로 80 또는 443으로 통신을 하도록 이미지상 apache config에 적혀 있기 때문입니다)

 

 

4. Service 생성

deployment 및 pod까지는 떴는데 아직 접근할 수 있는 방법이 없습니다.

따라서 Service 를 이용하여 외부에서 해당 pod 에 접근할 수 있도록 구멍을 뚫어줘야 합니다.

 

nextcloud-service.yml

apiVersion: v1
kind: Service
metadata:
  name: nextcloud-service
spec:
  type: NodePort
  selector:
    app: nextcloud-test
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 80
    nodePort: 31014

위와 같이 yml 파일을 작성해 주시고 아래 명령어로 생성을 합니다.

kubectl apply -f nextcloud-service.yml -n test

그리고 이제 아래 명령어로 service 가 잘 생성되었나 확인해 봅니다.

kubectl get svc -n test

잘 만들어 졌네요.

 

여기서 초보자분들은 포트의 흐름이 헷갈리실텐데 설명을 간단히 드리자면,

 

위와 같이 바깥 인터넷에서 이제 접속 시도를 하면 Service 에 정의해 둔 NodePort 31014 를 통해 들어오면서 8080으로 다시 변경 합니다. 그리고 이를 다시 안으로 들여보내기 위해 80 포트로 바꾸어 보내면 컨테이너가 80 으로 Listening 을 하고 있기 때문에 pod 안으로 도달 할 수 있게 되는 구조 입니다.

 

그럼 만약에 다른 pod 도 80 을 통신하고 있다면 쫑이 나지 않는가? 라는 질문을 할 수 있는데요.

 

이 경우는 위에서 보셨던 label 때문에 그럴 일은 없습니다.

 

제가 deployment 생성 시 label 이름 : nextcloud-test 라고 명시를 해 두었고, Service 생성 시 yml 파일 안에 selector 부분의 app : nextcloud-test 라고 명명을 해 둔 부분이 있는데, 이와같이 deployment 상의 label 과 Service 의 selector 가 일치 해야만 통신을 할 수 있도록 되어 있습니다.

따라서, label 및 selector 이름이 서로 같지 않다면 통신이 불가능 하게 되는 것이죠.

 

즉, 모든 pod 들이 80 포트로 열려있을지라도 label 에 따라 통신을 하기 때문에 쫑 날 일은 없습니다.

(게다가 네임스페이스별로도 통신이 차단되기 때문에 타 네임스페이스에 있는 pod들은 더더욱 통신이 안되겠죠?)

 

 

이제 본인 http://본인서버 IP 또는 dns 이름 뒤에 :31014 를 붙여 접근을 시도하면,

잘 나오네요.

 

성공!

 

 

이어서 pv, pvc (영구 저장소) 를 생성하고 Nextcloud 를 본격적으로 시작하는 글을 보시려면 아래 링크로 가주세요.

 

lance.tistory.com/6

 

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

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

lance.tistory.com