您现在的位置是:首页 > cms教程 > discuz教程discuz教程

kubernetes部署LNMP环境运行Discuz的方法实例

静曼2025-06-28 19:04:45discuz教程已有3人查阅

导读集群基础上模拟真实的一个线上环境,在k8s集群中部署LNMP环境运行Discuz论坛一、下载公共镜像【deploy上操作】1:下载mysql5.7镜像

集群基础上模拟真实的一个线上环境,在k8s集群中部署LNMP环境运行Discuz论坛
一、下载公共镜像【deploy上操作】
1:下载mysql5.7镜像
1 [root@master ~]# docker pull mysql:5.7
2 5.7: Pulling from library/mysql
3 d599a449871e: Pull complete
4 f287049d3170: Pull complete
5 08947732a1b0: Pull complete
6 96f3056887f2: Pull complete
7 871f7f65f017: Pull complete
8 1dd50c4b99cb: Pull complete
9 5bcbdf508448: Pull complete
10 02a97db830bd: Pull complete
11 c09912a99bce: Pull complete
12 08a981fc6a89: Pull complete
13 818a84239152: Pull complete
14 Digest: sha256:5779c71a4730da36f013a23a437b5831198e68e634575f487d37a0639470e3a8
15 Status: Downloaded newer image for mysql:5.7
2:下载nginx-php-fpm镜像
1 [root@master ~]# docker pull richarvey/nginx-php-fpm
2 Using default tag: latest
3 latest: Pulling from richarvey/nginx-php-fpm
4 9d48c3bd43c5: Pull complete
5 4bf02c0a37c8: Pull complete
6 9ce49f939c6f: Pull complete
7 2fa33c09831c: Pull complete
8 64d703475f7c: Pull complete
9 687e14517432: Pull complete
10 5d8ec717fece: Pull complete
11 9fe12d3f6add: Pull complete
12 e860070fe546: Pull complete
13 36baa049bdfe: Pull complete
14 4073f665d7d8: Pull complete
15 42a3d0ae6c56: Pull complete
16 682e06ece949: Pull complete
17 3c3d9faab7c5: Pull complete
18 258d52d772e4: Pull complete
19 41336c37b6cd: Pull complete
20 9ef84aa1b775: Pull complete
21 94c642e23a42: Pull complete
22 f601338f6a53: Pull complete
23 0c5f20947667: Pull complete
24 50f6eb03fd0b: Pull complete
25 75174a25ab08: Pull complete
26 8e16258eb3ba: Pull complete
27 447fabc9be1b: Pull complete
28 a485db129518: Pull complete
29 de30cb0b9f89: Pull complete
30 5724050c9b48: Pull complete
31 c20deb9ffa63: Pull complete
32 52031a5fa502: Pull complete
33 6aea67ff4e17: Pull complete
34 Digest: sha256:f8109029deb401ee83c4fcd1e737cc496f42aca6a6e8f445f8501ea977be6784
35 Status: Downloaded newer image for richarvey/nginx-php-fpm:latest
二、上传镜像到harbor【deploy上操作】
说明:harbor安装方法参考次篇文章https:// .cnblogs.com/douyi/p/12057218.html
1:mysql镜像push到harbor上
1 [root@master ~]# docker tag mysql:5.7 harbor.ghs.com/lnmp/mysql:5.7
2 [root@master ~]# docker push harbor.ghs.com/lnmp/mysql:5.7
3 The push refers to repository [harbor.ghs.com/lnmp/mysql]
4 94a471180601: Pushed
5 934de0c0816e: Pushed
6 fc12e028de3b: Pushed
7 398ef8a407f7: Pushed
8 7055b7f82e4c: Pushed
9 2a9aab74013a: Pushed
10 414373ffccb4: Pushed
11 6599033b2ab2: Pushed
12 51734435c93c: Pushed
13 5a8a245abd1c: Pushed
14 99b5261d397c: Pushed
15 5.7: digest: sha256:9e02c7c9a87d363588e85c87b8c6f637254c5c67b915b1666482f54121bb0926 size: 2622
2:nginx-php-fpm镜像push到harbor上
1 [root@master ~]# docker tag richarvey/nginx-php-fpm harbor.ghs.com/lnmp/nginx-php-fpm:latest
2 [root@master ~]# docker push harbor.ghs.com/lnmp/nginx-php-fpm:latest
3 The push refers to repository [harbor.ghs.com/lnmp/nginx-php-fpm]
4 2624e7202e4b: Pushed
5 eb30cdb90ca1: Pushed
6 ae93c067c849: Pushed
7 9801a5392a22: Pushed
8 7b2d66211161: Pushed
9 9d4627716f06: Pushed
10 d3cf99377a74: Pushed
11 f647f7714c77: Pushed
12 8ed73ab2d11b: Pushed
13 525bffddcce1: Pushed
14 d93022710c58: Pushed
15 28e868b9a611: Pushed
16 ebbffb8bead8: Pushed
17 c4ffba011c55: Pushed
18 9ac09047b17d: Pushed
19 3fefc401e422: Pushed
20 3b73d52fb480: Pushed
21 73f0a2737684: Pushed
22 bb46af78e4a5: Pushed
23 5d02268e182d: Pushed
24 84bd64e5da78: Pushed
25 14d91eeebaab: Pushed
26 67ee9b354071: Pushed
27 d822f3d53ee3: Pushed
28 a0c85631af8f: Pushed
29 7c1ad7fa7002: Pushed
30 03ecc22184eb: Pushed
31 1581c77670a3: Pushed
32 14ee8729351c: Pushed
33 03901b4a2ea8: Pushed
34 latest: digest: sha256:f8109029deb401ee83c4fcd1e737cc496f42aca6a6e8f445f8501ea977be6784 size: 6576
三、安装NFS【master2上操作】
1:创建web和DB目录
##/data/k8s下的两个目录用于集群中运行LNMP环境存放的数据,web目录为nginx网站的根目录,DB为数据库存放的数据目录
[root@master2 ~]# mkdir -p /data/k8s/{web,db}
2:yum安装nfs
[root@master2 ~]# yum -y install nfs-utils
3:设置共享目录
[root@master2 ~]# vim /etc/exportfs
/data/k8s 192.168.1.0/24(sync,rw,no_root_squash)
4:启动服务
[root@master2 ~]# systemctl start nfs
[root@master2 ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
四、安装Mysql服务【deploy上操作】
1:创建存放mysql服务的yaml文件目录
[root@master2 ~]# mkdir -p /home/k8s/lnmp/mysql
2:创建secret,将mysql数据库的密码存放到secret中
[root@master mysql]# kubectl create secret generic mysql-pass --from-literal=password=abc123
3:创建mysql-pv
1 [root@master mysql]# vim mysql-pv.yaml
2 apiVersion: v1
3 kind: PersistentVolume
4 metadata:
5 name: mysql-pv
6 spec:
7 capacity:
8 storage: 10Gi
9 accessModes:
10 - ReadWriteMany
11 nfs:
12 path: /data/k8s/db ##该参数指定你的NFS端的共享目录
13 server: 192.168.1.201 ##指定nfs端的IP
14 [root@master mysql]# kubectl create -f mysql-pv.yaml
15 persistentvolume/mysql-pv created
4:创建mysql-pvc
1 [root@master mysql]# vim mysql-pvc.yaml
2 apiVersion: v1
3 kind: PersistentVolumeClaim
4 metadata:
5 name: mysql-claim
6 labels:
7 app: discuz
8 spec:
9 accessModes:
10 - ReadWriteMany
11 resources:
12 requests:
13 storage: 10Gi
14 [root@master mysql]# kubectl create -f mysql-pvc.yaml
15 persistentvolumeclaim/mysql-claim created
5:查看pv,pvc信息
##下面可以看出状态Bound(绑定)正常,pv中的CLAIM列绑定的信息为pvc定义的name,pvc中VOLUME列的信息显示绑定了mysql-pv的name
1 [root@master mysql]# kubectl get pv,pvc
2 NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
3 persistentvolume/mysql-pv 10Gi RWX Retain Bound default/mysql-claim 71s
4
5 NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
6 persistentvolumeclaim/mysql-claim Bound mysql-pv 10Gi RWX 15s
6:创建mysql-deploy
1 [root@master mysql]# vim mysql-dp.yaml
2 apiVersion: apps/v1
3 kind: Deployment
4 metadata:
5 name: dz-mysql
6 labels:
7 app: discuz
8 spec:
9 selector:
10 matchLabels:
11 app: discuz
12 tier: mysql
13 strategy:
14 type: Recreate
15 template:
16 metadata:
17 labels:
18 app: discuz
19 tier: mysql
20 spec:
21 imagePullSecrets:
22 - name: my-secret
23 containers:
24 - image: harbor.ghs.com/lnmp/mysql:5.7 ##此处指定你的harbor需要拉取的镜像
25 name: mysql
26 env:
27 - name: MYSQL_ROOT_PASSWORD
28 valueFrom:
29 secretKeyRef:
30 name: mysql-pass ##此模块是调用secret中存放的mysql密码
31 key: password
32 ports:
33 - containerPort: 3306
34 name: dz-mysql
35 volumeMounts:
36 - name: mysql-persistent-storage
37 mountPath: /var/lib/mysql
38 volumes:
39 - name: mysql-persistent-storage
40 persistentVolumeClaim: ##此模块参数调用定义创建的pvc名称
41 claimName: mysql-claim
42 [root@master mysql]# kubectl create -f mysql-dp.yaml
43 deployment.apps/dz-mysql created
7:创建mysql-service
1 [root@master mysql]# vim mysql-svc.yaml
2 apiVersion: v1
3 kind: Service
4 metadata:
5 name: dz-mysql
6 labels:
7 app: discuz
8 spec:
9 ports:
10 - port: 3306
11 selector:
12 app: discuz
13 tier: mysql
14 [root@master mysql]# kubectl create -f mysql-svc.yaml
15 service/dz-mysql created
8:查看mysql服务的pod和svc信息
##下面信息可以看出,dz-mysql状态Running(运行)正常,分配的cluster-ip=10.68.235.35,该IP在集群中可以访问,外部无法访问该IP
1 [root@master mysql]# kubectl get pod,svc
2 NAME READY STATUS RESTARTS AGE
3 pod/dz-mysql-787586b8d6-9kl5b 1/1 Running 0 5m35s
4 pod/nginx-7c45b84548-4998z 1/1 Running 2 20d
5
6 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
7 service/dz-mysql ClusterIP 10.68.235.35 <none> 3306/TCP 5m13s
8 service/kubernetes ClusterIP 10.68.0.1 <none> 443/TCP 20d
9 service/nginx ClusterIP 10.68.241.175 <none> 80/TCP 20d
五、安装Nginx服务【deploy上操作】
1:创建nginx-pv
1 [root@master nginx]# vim web-pv.yaml
2 apiVersion: v1
3 kind: PersistentVolume
4 metadata:
5 name: web-pv
6 spec:
7 capacity:
8 storage: 10Gi
9 accessModes:
10 - ReadWriteMany
11 nfs:
12 path: /data/k8s/web
13 server: 192.168.1.201
14 [root@master nginx]# kubectl create -f web-pv.yaml
15 persistentvolume/web-pv created
2:创建nginx-pvc
1 [root@master nginx]# vim web-pvc.yaml
2 apiVersion: v1
3 kind: PersistentVolumeClaim
4 metadata:
5 name: web-claim
6 labels:
7 app: discuz
8 spec:
9 accessModes:
10 - ReadWriteMany
11 resources:
12 requests:
13 storage: 10Gi
14 [root@master nginx]# kubectl create -f web-pvc.yaml
15 persistentvolumeclaim/web-claim created
3:查看nginx的pv,pvc信息
1 [root@master nginx]# kubectl get pv,pvc
2 NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
3 persistentvolume/mysql-pv 10Gi RWX Retain Bound default/mysql-claim 34m
4 persistentvolume/web-pv 10Gi RWX Retain Bound default/web-claim 114s
5
6 NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
7 persistentvolumeclaim/mysql-claim Bound mysql-pv 10Gi RWX 33m
8 persistentvolumeclaim/web-claim Bound web-pv 10Gi RWX 108s
4:创建nginx-deploy
1 [root@master nginx]# vim web-dp.yaml
2 apiVersion: apps/v1
3 kind: Deployment
4 metadata:
5 name: dz-web
6 labels:
7 app: discuz
8 spec:
9 replicas: 1
10 selector:
11 matchLabels:
12 app: discuz
13 tier: nginx-php
14 template:
15 metadata:
16 labels:
17 app: discuz
18 tier: nginx-php
19 spec:
20 imagePullSecrets:
21 - name: my-secret
22 containers:
23 - image: harbor.ghs.com/lnmp/nginx-php-fpm:latest
24 name: dz-web
25 ports:
26 - containerPort: 9000
27 - containerPort: 80
28 name: dz-web
29 volumeMounts:
30 - name: mysql-persistent-storage
31 mountPath: /var/ /html/
32 volumes:
33 - name: mysql-persistent-storage
34 persistentVolumeClaim:
35 claimName: web-claim
36 [root@master nginx]# kubectl create -f web-dp.yaml
37 deployment.apps/dz-web created
5:创建nginx-service
##映射端口30001提供集群外部的机器访问web网站
1 [root@master nginx]# vim web-svc.yaml
2 apiVersion: v1
3 kind: Service
4 metadata:
5 name: dz-web
6 labels:
7 app: discuz
8 spec:
9 type: NodePort
10 ports:
11 - port: 80
12 nodePort: 30001
13 selector:
14 app: discuz
15 tier: nginx-php
16 [root@master nginx]# kubectl create -f web-svc.yaml
17 service/dz-web created
6:查看nginx的pod,svc信息
1 [root@master nginx]# kubectl get pod,svc
2 NAME READY STATUS RESTARTS AGE
3 pod/dz-mysql-787586b8d6-9kl5b 1/1 Running 1 38m
4 pod/dz-web-d4968cf8d-clppp 1/1 Running 0 3m37s
5 pod/nginx-7c45b84548-4998z 1/1 Running 2 20d
6
7 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
8 service/dz-mysql ClusterIP 10.68.235.35 <none> 3306/TCP 38m
9 service/dz-web NodePort 10.68.53.228 <none> 80:30001/TCP 11m
10 service/kubernetes ClusterIP 10.68.0.1 <none> 443/TCP 20d
11 service/nginx ClusterIP 10.68.241.175 <none> 80/TCP 20d
六、安装Discuz【NFS上操作】
1:下载Discuz
1 [root@master2 ~]# cd /data/
2 [root@master2 data]# git clone https://gitee.com/ComsenzDiscuz/DiscuzX.git
3 正克隆到 'DiscuzX'...
4 remote: Counting objects: 9085, done.
5 remote: Compressing objects: 100% (5400/5400), done.
6 remote: Total 9085 (delta 3895), reused 8535 (delta 3632)
7 接收对象中: 100% (9085/9085), 12.96 MiB | 166.00 KiB/s, done.
8 处理 delta 中: 100% (3895/3895), done.
2:将Discuz项目中upload目录下所有文件,放到web中
1 [root@master2 data]# mv DiscuzX/upload/* k8s/web/
2 [root@master2 data]# cd k8s/web/
3 [root@master2 web]# chmod 100 data uc_server/data uc_client/data config
3:进入mysql,创建dz库和授权用户
1 [root@master ~]# kubectl exec -it dz-mysql-787586b8d6-9kl5b -- mysql -u root -p
2 Welcome to the MySQL monitor. Commands end with ; or \g.
3 Your MySQL connection id is 4
4 Server version: 5.7.28 MySQL Community Server (GPL)
5
6 Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
7
8 Oracle is a registered trademark of Oracle Corporation and/or its
9 affiliates. Other names may be trademarks of their respective
10 owners.
11
12 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
13
14 mysql> create database dz;
15 Query OK, 1 row affected (0.19 sec)
16
17 mysql> grant all on dz.* to 'dz'@'%' identified by 'abc123';
18 Query OK, 0 rows affected, 1 warning (0.11 sec
4:浏览器访问web安装页面
实验成功
5:通过设置Nginx代理供外部访问
##目前nginx服务是运行在kubernetes集群里,node节点以及master节点上是可以通过cluster-ip访问到,但是外部的客户端就不能访问了。所以,可以在任意一台node或者master上建一个nginx反向代理即可访问到集群内的nginx。 kubectl get svc dz-web //查看cluster-ip,我的ip是10.68.235.35
nginx代理配置文件内容如下:
1 server {
2 listen 80;
3 server_name dz.yuankeedu.com;
4
5 location / {
6 proxy_pass http://10.68.235.35;
7 proxy_set_header Host $host;
8 proxy_set_header X-Real-IP $remote_addr;
9 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
10 }
11 }

本文标签:

很赞哦! (0)

暂无内容
暂无内容
暂无内容
暂无内容
留言与评论 (共有 0 条评论)
昵称:
匿名发表 登录账号
         
验证码: