Nextcloud 구성 | Deploy Nextcloud on kubernetes

Model


1. namespace

Create

vim namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: nextcloud

Apply

kubectl apply -f namespace.yaml

Check

# kubectl get ns

NAME              STATUS   AGE
kube-system       Active   4d
default           Active   4d
nextcloud         Active   1m

2. pv

Create

vim pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-nextcloud
  labels:
    name: nfs-nextcloud
spec:
  capacity:
    storage: 500G
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  nfs:
    server: 192.168.100.255   <---- input your nfs ip
    path: "/mnt/HDD/nextcloud"

Apply

kubectl apply -f pv.yaml

Check

# kubectl get pv

NAME            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                     STORAGECLASS   REASON   AGE
nfs-nextcloud   500G       RWX            Retain           Bound    nextcloud/nfs-nextcloud                           1m

3. pvc

Create

vim pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: nfs-nextcloud
  namespace: nextcloud
spec:
  volumeName: nfs-nextcloud
  accessModes:
  - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 500G
  selector:
    matchLabels:
      name: nfs-nextcloud

Apply

kubectl apply -f pvc.yaml

4. Service

Create

vim service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nextcloud
  namespace: nextcloud
spec:
  selector:
    app: nextcloud
  ports:
    - protocol: TCP 
      port: 80
      targetPort: 80
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 192.168.100.3		<---- input your kubernetes ip

Apply

kubectl apply -f service.yaml

Check

# kubectl get service -n nextcloud

NAME        TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
nextcloud   LoadBalancer   10.43.246.253   192.168.100.3   80:30155/TCP   1m

5. deployment

Create

vim deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nextcloud-deployment
  namespace: nextcloud
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nextcloud
  template:
    metadata:
      labels:
        app: nextcloud
    spec:
      securityContext:
        runAsUser: 1000			<---- input nfs user uid
        fsGroup: 545			<---- input nfs user gid
      containers:
        - name: nextcloud
          image: nextcloud
          ports:
            - containerPort: 80
          volumeMounts:
            - name: nextcloud-storage-volume
              mountPath: /var/www/html
      volumes:
        - name: nextcloud-storage-volume
          persistentVolumeClaim:
            claimName: nfs-nextcloud

Apply

kubectl apply -f deployment.yaml

Check

# kubectl get po -n nextcloud

NAME                                    READY   STATUS    RESTARTS   AGE
nextcloud-deployment-56c7d676b7-pp584   1/1     Running   0          1m
# kubectl get deploy -n nextcloud

NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
nextcloud-deployment   1/1     1            1           1m
  • web site