k8s搭建lnmp(Discuz)

下载公共镜像

1
2
3
4
5
# 下载nginx-php-fpm镜像
docker pull richarvey/nginx-php-fpm
# 下载mysql 5.7镜像
docker pull mysql:5.7
# 如果有自己镜像仓库,如harbor可将镜像上传上去

安装NFS(测试使用的NFS,生产中建议使用ceph等存储)

  • 创建web和DB目录

    1
    2
    # 有单独的服务器或者安装在master上
    mkdir -p /data/k8s/{web,db}
  • 安装nfs

    1
    yum -y install nfs-utils
  • 设置共享目录

    1
    2
    vim /etc/exports
    /data/k8s 192.168.100.0/24(sync,rw,no_root_squash)
  • 客户端挂载

    1
    2
    3
    4
    5
    # node节点上
    yum install nfs-utils -y
    mount -t nfs 192.168.100.11:/data/k8s /mnt
    # 建议加入开机自启
    echo "192.168.100.11:/data/k8s /mnt nfs defaults 0 0" >>/etc/fstab
  • 启动服务

    1
    2
    3
    # nfs服务端
    systemctl start nfs
    systemctl enable nfs

安装mysql

  • 创建yaml文件目录

    1
    mkdir -p /data/k8s-yaml/lnmp
  • 创建secret,存储mysql密码

    1
    2
    3
    4
    kubectl create secret generic mysql-pass --from-literal=password=xxzx@789
    # 使用base64加解密
    echo -n xxzx@789 |base64
    echo eHh6eEA3ODk= | base64 -d
  • 创建mysql pv,pvc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# mysql-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
nfs:
path: /data/k8s/db #该参数指定你的NFS端的共享目录
server: 192.168.100.11

# mysql-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-claim
labels:
app: discuz
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
  • 查看pv,pvc信息
    1
    kubectl get pv,pvc

mark

  • 创建mysql-deploy

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    # mysql-deploy.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: mysql:5.7 ##此处指定你的harbor需要拉取的镜像
    name: mysql
    env:
    - name: MYSQL_ROOT_PASSWORD
    valueFrom:
    secretKeyRef:
    name: mysql-pass ##此模块是调用secret中存放的mysql密码
    key: password
    ports:
    - containerPort: 3306
    name: dz-mysql
    volumeMounts:
    - name: mysql-persistent-storage
    mountPath: /var/lib/mysql
    volumes:
    - name: mysql-persistent-storage
    persistentVolumeClaim: ##此模块参数调用定义创建的pvc名称
    claimName: mysql-claim
  • 创建mysql-service

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # mysql-service.yaml
    apiVersion: v1
    kind: Service
    metadata:
    name: dz-mysql
    labels:
    app: discuz
    spec:
    ports:
    - port: 3306
    selector:
    app: discuz
    tier: mysql

安装nginx

  • 创建nginx-pv,nginx-pvc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# nginx-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: web-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
nfs:
path: /data/k8s/web
server: 192.168.100.11

# nginx-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: web-claim
labels:
app: discuz
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
  • 创建nginx-deploy

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    # nginx-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: richarvey/nginx-php-fpm:latest
    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
  • 创建nginx-service

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # nginx-svc.yaml
    apiVersion: v1
    kind: Service
    metadata:
    name: dz-web
    labels:
    app: discuz
    spec:
    type: NodePort
    ports:
    - port: 80
    nodePort: 30001
    selector:
    app: discuz
    tier: nginx-php

安装Discuz

  • 下载discuz

    1
    2
    3
    4
    5
    6
    # NFS服务器上操作
    cd /data/k8s
    git clone https://gitee.com/ComsenzDiscuz/DiscuzX.git
    cp -a DiscuzX/upload/* web/
    cd web/
    chmod 774 data uc_server/data uc_client/data config
  • mysql上创建dz库并授权用户

    1
    2
    3
    kubectl exec -it dz-mysql-xxx -- mysql -uroot -p
    create database dz default character set utf8;
    grant all on dz.* to 'dz'@'%' identified by 'abc123';
  • 浏览器访问安装

    1
    x.x.x.x:30001

mark

-------------本文结束感谢您的阅读-------------
原创技术分享,感谢您的支持。