欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 基于Kubernetes部署Owncloud个人网盘

基于Kubernetes部署Owncloud个人网盘

2025/2/21 3:21:12 来源:https://blog.csdn.net/weixin_58410911/article/details/145732839  浏览:    关键词:基于Kubernetes部署Owncloud个人网盘

基于Kubernetes部署Owncloud个人网盘

案例分析

1. 规划节点

节点规划,见表1。

表1 节点规划

IP主机名节点
192.168.100.3masterk8s-master-node1
192.168.100.4nodek8s-worker-node1
2. 基础准备
(1)导入软件包
[root@master ~]# nerdctl -n k8s.io load -i owncloud.tar.gz

查看集群状态:

[root@k8s-master-node1 ~]# kubectl cluster-info
Kubernetes control plane is running at https://apiserver.cluster.local:6443
CoreDNS is running at https://apiserver.cluster.local:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxyTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
3. 部署owncloud

Kubernete环境已安装完成,ownCloud 是一个开源免费专业的私有云存储项目,它能帮你快速在个人电脑或服务器上架设一套专属的私有云文件同步网盘,可以像百度云那样实现文件跨平台同步、共享、版本控制、团队协作等。

(1)创建 PV 和 PVC

编写 yaml 文件(文件名自定义)创建 PV 和 PVC 来提供持久化存储,以便保存 ownCloud 服务中的文件和数据。

要求:PV(访问模式为读写,只能被单个节点挂载;存储为 5Gi;存储类型为 hostPath,存储路径自定义) PVC(访问模式为读写,只能被单个节点挂载;申请存储空间大小为 5Gi)

创建 PV (owncloud-pv.yaml)

[root@master ~]# vim owncloud-pv.yaml 
apiVersion: v1
kind: PersistentVolume
metadata:name: owncloud-pv
spec:accessModes:- ReadWriteOncecapacity:storage: 5GihostPath:path: /opt/owncloudpersistentVolumeReclaimPolicy: Retain

创建 PVC (owncloud-pvc.yaml)

[root@master ~]# vim owncloud-pvc.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: owncloud-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 5Gi

应用 PV 和 PVC

[root@master ~]# kubectl apply -f owncloud-pv.yaml
[root@master ~]# kubectl apply -f owncloud-pvc.yaml

验证 PV 和 PVC

[root@master ~]# kubectl get pv,pvc
NAME                           CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                  STORAGECLASS   REASON   AGE
persistentvolume/owncloud-pv   5Gi        RWO            Retain           Bound    default/owncloud-pvc                           22mNAME                                 STATUS   VOLUME        CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/owncloud-pvc   Bound    owncloud-pv   5Gi        RWO                           22m
(2)配置 ConfigMap

编写 yaml 文件(文件名自定义)创建一个 configMap 对象,指定 OwnCloud 的环境变量。登录账号对应的环境变量为OWNCLOUD_ADMIN_USERNAME,密码对应的环境变量为OWNCLOUD_ADMIN_PASSWORD

创建 ConfigMap (owncloud-configmap.yaml)

[root@master ~]# vim owncloud-configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:name: owncloud-configmap
data:OWNCLOUD_ADMIN_USERNAME: rootOWNCLOUD_ADMIN_PASSWORD: root

应用 ConfigMap

[root@master ~]# kubectl apply -f owncloud-configmap.yaml

验证 ConfigMap

[root@master ~]# kubectl get configmap
NAME                 DATA   AGE
kube-root-ca.crt     1      3h45m
owncloud-configmap   2      22m
(3)创建 Secret

编写 yaml 文件(文件名自定义)创建一个 Secret 对象,以保存 OwnCloud 数据库的密码。对原始密码采用 base64 编码格式进行加密。

创建 Secret (owncloud-secret.yaml)

首先,将数据库密码进行 base64 编码:

[root@master ~]# echo -n 'owncloud-db' | base64

将编码后的密码替换到下面的 OWNCLOUD_DB_PASSWORD 中:

[root@master ~]# vim owncloud-secret.yaml 
apiVersion: v1
kind: Secret
metadata:name: owncloud-secret
type: Opaque
data:OWNCLOUD_DB_PASSWORD: b3duY2xvdWQtZGI=

应用 Secret

[root@master ~]# kubectl apply -f owncloud-secret.yaml

验证 Secret

[root@master ~]# kubectl get secret
NAME              TYPE     DATA   AGE
owncloud-secret   Opaque   1      20m
(4)部署 Deployment

编写 yaml 文件(文件名自定义) 创建 Deployment 对象, 指定 OwnCloud 的容器和相关的环境变量。(Deployment 资源命名为 owncloud-deployment,镜像为 Harbor 仓库中的 owncloud:latest,存储的挂载路径为/var/www/html,其它根据具体情况进行配置) 。

创建 Deployment (owncloud-deployment.yaml)

[root@master ~]# vim owncloud-deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: owncloud-deploylabels:app: owncloud-deploy
spec:replicas: 1selector:matchLabels:app: owncloud-deploytemplate:metadata:labels:app: owncloud-deployspec:volumes:- name: owncloud-datapersistentVolumeClaim:claimName: owncloud-pvccontainers:- image: owncloud:latestimagePullPolicy: IfNotPresentname: owncloudports:- name: owncloudcontainerPort: 80volumeMounts:- name: owncloud-datamountPath: /var/www/htmlenv:- name: OWNCLOUD_ADMIN_USERNAME # 自定义环境变量名称valueFrom:configMapKeyRef:name: owncloud-configmapkey: OWNCLOUD_ADMIN_USERNAME- name: OWNCLOUD_ADMIN_PASSWORD # 自定义环境变量名称valueFrom:configMapKeyRef:name: owncloud-configmap  key: OWNCLOUD_ADMIN_PASSWORD- name: owncloud-mysqlimage: mysql:5.7.44imagePullPolicy: IfNotPresentports:- name: owncloud-mysqlcontainerPort: 3306env:- name: MYSQL_ROOT_PASSWORD     # 必须这样写根据Docker安装的方法valueFrom:secretKeyRef:name: owncloud-secretkey: OWNCLOUD_DB_PASSWORD

应用 Deployment

[root@master ~]# kubectl apply -f owncloud-deployment.yaml

验证 Pod

[root@master ~]# kubectl get deployments.apps 
NAME       READY   UP-TO-DATE   AVAILABLE   AGE
owncloud   1/1     1            1           16m
(5)创建 Service

编写 yaml 文件(文件名自定义)创建一个 Service 对象将 OwnCloud 公开到集群外部。通过 http://IP:端口号可查看 owncloud。

创建 Service (owncloud-service.yaml)

[root@master ~]# vim owncloud-service.yaml
apiVersion: v1
kind: Service
metadata:name: owncloud-service
spec:type: NodePortselector:app: owncloud-deployports:- protocol: TCPport: 80targetPort: 80nodePort: 30080  # 可以自定义端口范围: 30000-32767

应用 Service

[root@master ~]# kubectl apply -f owncloud-service.yaml

验证 Service

[root@master ~]# kubectl get svc
AME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes         ClusterIP   10.96.0.1       <none>        443/TCP        14h
owncloud-service   NodePort    10.96.148.104   <none>        80:30088/TCP   45m
(6)浏览器访问测试

主机名填写 Pod 的 IP地址

image-20250219151427851

MySQL使用Pod的IP地址

[root@master ~]# kubectl exec -it owncloud-deploy-6688885568-srbq5 -c owncloud -- /bin/bash
root@owncloud-deploy-6688885568-srbq5:/var/www/html# cat config/config.php
<?php
$CONFIG = array ('instanceid' => 'ock6bkczdqqg','passwordsalt' => '7GqUHkyIKEvXVD4SGUlHCs/ikdR3X5','secret' => 'AsMJbVLmk1wDorsaf3wLmWIE0JTja9VcrdWo5osydtb2Cwpw','trusted_domains' => array (0 => '192.168.100.3:30088',),'datadirectory' => '/var/www/html/data','overwrite.cli.url' => 'http://192.168.100.3:30088','dbtype' => 'mysql','version' => '10.0.10.4','dbname' => 'owncloud','dbhost' => '10.244.0.42','dbtableprefix' => 'oc_','mysql.utf8mb4' => true,'dbuser' => 'oc_root','dbpassword' => 'h1i8vZPDk3GODC/NEyU25VKlb2cAtD','logtimezone' => 'UTC','installed' => true,
);

查看数据库和表

[root@master ~]# kubectl exec -it owncloud-deploy-6688885568-srbq5 -c owncloud-mysql -- /bin/bash
bash-4.2# mysql -uroot -powncloud-db
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 25
Server version: 5.7.44 MySQL Community Server (GPL)Copyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| owncloud           |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)mysql> use owncloud;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+-----------------------------+
| Tables_in_owncloud          |
+-----------------------------+
| oc_account_terms            |
| oc_accounts                 |
| oc_addressbookchanges       |
| oc_addressbooks             |
| oc_appconfig                |
| oc_authtoken                |
| oc_calendarchanges          |
| oc_calendarobjects          |
| oc_calendars                |
| oc_calendarsubscriptions    |
| oc_cards                    |
| oc_cards_properties         |
| oc_comments                 |
| oc_comments_read_markers    |
| oc_credentials              |
| oc_dav_job_status           |
| oc_dav_properties           |
| oc_dav_shares               |
| oc_external_applicable      |
| oc_external_config          |
| oc_external_mounts          |
| oc_external_options         |
| oc_federated_reshares       |
| oc_file_locks               |
| oc_filecache                |
| oc_files_trash              |
| oc_group_admin              |
| oc_group_user               |
| oc_groups                   |
| oc_jobs                     |
| oc_migrations               |
| oc_mimetypes                |
| oc_mounts                   |
| oc_notifications            |
| oc_preferences              |
| oc_privatedata              |
| oc_properties               |
| oc_schedulingobjects        |
| oc_share                    |
| oc_share_external           |
| oc_storages                 |
| oc_systemtag                |
| oc_systemtag_group          |
| oc_systemtag_object_mapping |
| oc_trusted_servers          |
| oc_users                    |
| oc_vcategory                |
| oc_vcategory_to_object      |
+-----------------------------+
48 rows in set (0.00 sec)
(7)部署 Ingress 访问
[root@master ~]# vim owncloud-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: owncloud-ingress-http  # Ingress 资源的名称namespace: default  # 所在的命名空间
spec:ingressClassName: nginxrules:- host: gxl.owncloud.com  # 使用 gxl.owncloud.com 作为域名http:paths:- path: / # 匹配路径为 /pathType: Prefix  # 使用 Prefix 匹配策略backend:service:name: owncloud-service  # 后端的服务名称,指向 owncloud 服务port:number: 80  # 后端的服务端口

应用 Ingress

[root@master ~]# kubectl apply -f owncloud-service.yaml

验证 Ingress

[root@master ~]# kubectl get ingress
NAME                    CLASS   HOSTS          ADDRESS   PORTS   AGE
owncloud-ingress-http   nginx   gxl.owncloud.com             80      2s

在Windows下配置hosts解析

C:\Windows\System32\drivers\etc\hosts

# 添加集群IP地址和域名,保存退出
192.168.100.3 gxl.owncloud.com

使用Ingress域名访问

image-20250219161714279

默认情况下,OwnCloud 会限制只允许通过 trusted_domains 配置中的域名来访问。

通过将域名 gxl.owncloud.com 添加到 trusted_domains 中,OwnCloud 允许通过该域名访问实例。

[root@master ~]# cat /opt/owncloud/config/config.php
<?php
$CONFIG = array ('instanceid' => 'ock6bkczdqqg','passwordsalt' => '7GqUHkyIKEvXVD4SGUlHCs/ikdR3X5','secret' => 'AsMJbVLmk1wDorsaf3wLmWIE0JTja9VcrdWo5osydtb2Cwpw','trusted_domains' => array (0 => '192.168.100.3:30088',1 => 'gxl.owncloud.com',  // 添加你的自定义域名),'datadirectory' => '/var/www/html/data','overwrite.cli.url' => 'http://192.168.100.3:30088','dbtype' => 'mysql','version' => '10.0.10.4','dbname' => 'owncloud','dbhost' => '10.244.0.42','dbtableprefix' => 'oc_','mysql.utf8mb4' => true,'dbuser' => 'oc_root','dbpassword' => 'h1i8vZPDk3GODC/NEyU25VKlb2cAtD','logtimezone' => 'UTC','installed' => true,
);

image-20250219162157317

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词