在 kubernetes 中搭建 LNMP 环境,并安装 Discuz

lance 2020-04-02 PM 145℃ 0条

环境介绍

依然使用之前部署的 k8s 集群和 harbor 服务


下载 MySQL、PHP 以及 Nginx 镜像

这一步在 ansible 控制端(master1)上做操作
事实上集群上任意一台机器均可

docker pull mysql:5.7
docker pull richarvey/nginx-php-fpm

 
使用 Dockerfile 重构 nginx-php-fpm
https://git.coding.net/aminglinux/k8s_discuz.git
这个项目包含了下面实验需要用到的 Dockerfile 和 nginx/php 的配置文件 和 yaml 配置文件

cd /etc/ansible/ && git clone https://git.coding.net/aminglinux/k8s_discuz.git
cd k8s_discuz/dz_web_dockerfile/ && docker build -t nginx-php .

将下载到的镜像 push 到 harbor

先要登陆之前部署的 harbor 才能 push

docker login 10.18.30.33

docker tag mysql:5.7 10.18.30.33/library/mysql:5.7

docker push 10.18.30.33/library/mysql:5.7

docker tag nginx-php 10.18.30.33/library/nginx-php

docker push 10.18.30.33/library/nginx-php

搭建 NFS 服务

部署 nfs 服务器,我这里就用之前部署的了
之前部署到了 harbor 上

yum -y install nfs-utils rpcbind
vim /etc/exports
/data/k8s/ 10.18.30.0/24(sync,rw,no_root_squash)
mkdir /data/k8s/ && chmod 755 /data/k8s/
systemctl start nfs
systemctl enable nfs

mkdir -p /data/k8s/discuz/{db,web}

搭建 MySQL 服务

1)创建 secret

cd /etc/ansible/
kubectl create secret generic mysql-pass --from-literal=password=DzPasswd1

 
2)创建 pv

vim mysql-pv.yaml //内容如下
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /data/k8s/discuz/db
    server: 10.18.30.33

kubectl create -f mysql-pv.yaml

 
3)创建 pvc

vim mysql-pvc.yaml //内容如下
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-claim
  labels:
    app: discuz
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi

kubectl create -f mysql-pvc.yaml

 
4)创建 deployment

vim mysql-dp.yaml //内容如下
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dz-mysql
  labels:
    app: discuz
spec:
  selector:
    matchLabels:
      app: discuz
      tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: discuz
        tier: mysql
    spec:
      imagePullSecrets:
       - name: my-secret 
      containers:
      - image: 10.18.30.33/library/mysql:5.7
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 3306
          name: dz-mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-claim

kubectl create -f mysql-dp.yaml

 
5)创建 service

vim mysql-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: dz-mysql
  labels:
    app: discuz
spec:
  ports:
    - port: 3306
  selector:
    app: discuz
    tier: mysql

kubectl create -f mysql-svc.yaml

验证一下 mysql 是否能用

yum -y install mariadb

mysql -h10.68.51.27 -uroot -pDzPasswd1
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.29 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> quit
Bye

搭建 nginx+php-fpm 服务

1)创建 pv

vim web-pv.yaml //内容如下
apiVersion: v1
kind: PersistentVolume
metadata:
  name: web-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /data/k8s/discuz/web
    server: 10.18.30.33

kubectl create -f web-pv.yaml

 
2)创建 pvc

vim web-pvc.yaml //内容如下
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: web-claim
  labels:
    app: discuz
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi

kubectl create -f web-pvc.yaml

 
3)创建 deployment

vim web-dp.yaml //内容如下
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dz-web
  labels:
    app: discuz
spec:
  replicas: 1
  selector:
    matchLabels:
      app: discuz
      tier: nginx-php
  template:
    metadata:
      labels:
        app: discuz
        tier: nginx-php
    spec:
      imagePullSecrets:
      - name: my-secret
      containers:
      - image: 10.18.30.33/library/nginx-php
        name: dz-web
        ports:
        - containerPort: 9000
        - containerPort: 80
          name: dz-web
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/www/html/
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: web-claim

kubectl create -f web-dp.yaml

 
4)创建 service

vim web-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: dz-web
  labels:
    app: discuz
spec:
  ports:
    - port: 80
  selector:
    app: discuz
    tier: nginx-php

kubectl create -f web-svc.yaml

验证 nginx+php 环境是否成功

1)在 harbor 上的共享目录做修改

cd /data/k8s/discuz/web/ && vim 1.php
<?php
phpinfo();
?>

 
2)在 master1 上测试

curl 10.68.244.146/1.php

部署 Discuz

1)查看 nginx 用户的 id(master1 上)

kubectl exec dz-web-5f4c5c46d5-tcfzz id nginx
uid=100(nginx) gid=101(nginx) groups=101(nginx),101(nginx)

 
2)下载 dz 代码 (NFS 上)

cd /tmp/
yum -y install git
git clone https://gitee.com/ComsenzDiscuz/DiscuzX.git
cd /data/k8s/discuz/web/
mv /tmp/DiscuzX/upload/* .
chown -R 100 data uc_server/data/ uc_client/data/ config/

 
3)设置 MySQL 普通用户(master1 上)

kubectl get svc dz-mysql //查看 service 的 cluster-ip,我的是 10.68.51.27
mysql -uroot -h10.68.51.27 -pDzPasswd1  //这里的密码是在上面步骤中设置的那个密码
> create database dz;
> grant all on dz.* to 'dz'@'%' identified by 'dz-passwd-123';

 
4)外部机器访问 Discuz
利用 nginx 反向代理

设置 Nginx 代理(master1 上)
注意:目前 nginx 服务是运行在 kubernetes 集群里,node 节点以及 master 节点上是可以通过 cluster-ip 访问到,但是外部的客户端就不能访问了。
所以,可以在任意一台 node 或者 master 上建一个 nginx 反向代理即可访问到集群内的 nginx。

yum -y install nginx

kubectl get svc dz-web //查看 cluster-ip,我的 ip 是10.68.190.99

vim /etc/nginx/nginx.conf

nginx 代理配置文件内容如下:
server {
          listen 80;
          server_name 10.18.30.28;
          # 这里在实际环境中可以改为域名

          location / {
              proxy_pass      http://10.68.244.146:80;
              proxy_set_header Host   $host;
              proxy_set_header X-Real-IP      $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }
}

systemctl start nginx

 
5)访问 Discuz
访问 discuz
00324-14uqluf3tj5.png
 
36798-c516hxbu2hj.png
 
86391-5wblxgx67r.png
 
00725-uwkouhccg9p.png
 
11586-u97cpc4f12k.png
 
01123-0fjj45nozdso.png
 
完成~~!


标签: linux, kubernetes, k8s

非特殊说明,本博所有文章均为博主原创。

觉得文章不错,打赏一点吧,1分也是爱😀

WeChat Pay

微信打赏

Alipay

支付宝打赏

评论啦~