如何使用 K3s 部署 Wordpress

警告
本文最后更新于 2022-07-14,文中内容可能已过时。

架构图

一图胜千言,先看看用 K3s 部署的 Wordpress 的整体结构 image.jpg 可以看到整个系统分为

为什么要用 K3s 部署 Wordpress?

现在网络上部署 Wordpress 教程大部分都在讨论用 Docker 部署。诚然,如果只有一台服务器,用 Docker 部署起来飞快,甚至腾讯云等平台还提供自动部署…… image.png 如果博主没有计算机相关技术背景,那么这种云服务真的很方便。 不过这种方式有它的不足:就像 Docker 在跟 K8s/K3s 这种容器编排引擎 PK 时的劣势,完全不是一个量级的东西。

配置收缩能力

假设某天突然网站火了,服务器性能扛不住了,也可以再购买几个服务器作为 K3s 的 Worker 节点,构建服务器集群。相比之下用 Docker 来横向扩展就很麻烦。

灾备能力

假设某天服务器突然挂掉了,K3s 可以自动切换工作节点。

运维能力

K3s 提供了热部署能力,比如我们想更新 Wordpress 配置,只需要写好相应的 Yaml 文件,然后 kubectl apply -f xxx.yaml即可实现新版本的部署。 下面我们看看如何用 K3s 部署 Wordpress,朋友们可以无脑复制 Yaml 文件,部署流程简单的一批。

部署流程

在服务器上安装 K3s

这里给出 K3s 的 Github 链接,大家在服务器上直接官方提供的脚本安装即可;

1
curl -sfL https://get.k3s.io | sh -

安装后可以输入 Kubectl 命令看看是否安装成功:

1
sudo kubectl get nodes

如果你有多个服务器,想要部署集群,那么还需要拿到 K3s 的 Token,由于我的网站刚刚起步只有一个工作节点,这里就不展开讲集群部署了。同理,下面部署流程仅针对单台服务器,集群部署我本身还没有实践过。

编写 Yaml 文件

根据文章开头的架构图,我们只需要写 5 个相应的 Yaml 文件然后在服务器执行即可。 强烈建议在本地编写 Yaml 文件,并备份,写好后上传到服务器。Windows 主机可以用 xshell 工具,Mac 主机可以使用 SCP 命令。如果不会使用这个命令,可以看我这篇文章:

Ingress

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-wp
spec:
  rules:
    - host: #你的域名 xxx.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: app-wp
                port:
                  number: 80

Mysql

Service

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
apiVersion: v1
kind: Service
metadata:
  labels:
    app: mysql
  name: mysql-svc
  namespace: default
spec:
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
  selector:
    app: mysql

Deployment

Volume挂载:将 Mysql 数据挂载到本地目录

 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
apiVersion: v1
kind: Pod
metadata:
  name: mysql
  namespace: default
  labels:
    app: mysql
spec:
  containers:
  - name: mysql
    image: mysql:5.7
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 3306
      name: dbport
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: xxxxx
    - name: MYSQL_DATABASE
      value: xxxxx
    - name: MYSQL_USER
      value: xxxxx
    - name: MYSQL_PASSWORD
      value: xxxxx
    volumeMounts:
    - name: db
      mountPath: /var/lib/mysql
  volumes:
  - name: db
    hostPath:
      path: /data/mysql

Wordpress

Service

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
apiVersion: v1
kind: Service
metadata:
  name: app-wp
spec:
  ports:
    - port: 80
      protocol: TCP
      targetPort: 80
  selector:
    app: app-wp

Deployment

Volume挂载:我们将 Wordpress 文件目录挂载到本地磁盘。 Env环境变量:将数据库的信息填写进去。 Resources资源配置:根据你服务器的性能配置即可。

 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
42
43
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-wp
spec:
  selector:
    matchLabels:
      app: app-wp
  template:
    metadata:
      labels:
        app: app-wp
    spec:
      containers:
        - image: wordpress:latest
          imagePullPolicy: Always
          name: app
          env:
            - name: WORDPRESS_DB_HOST
              value: mysql-svc #这里对应Mysql Service metadata.name
            - name: WORDPRESS_DB_USER
              value: xxxxx
            - name: WORDPRESS_DB_PASSWORD
              value: xxxxx
            - name: WORDPRESS_DB_NAME
              value: xxxxx
          volumeMounts:
            - mountPath: "/var/www/html/"
              name: wp-volume
          ports:
            - containerPort: 80
              protocol: TCP
          resources:
            limits:
              cpu: "2"
              memory: 3Gi
            requests:
              cpu: 100m
              memory: 100Mi
      volumes:
        - name: wp-volume
          hostPath:
            path: /data/wp

验证

使用 Kubectl get ingress、service、pods 查看状态,比如:

1
2
3
4
root@VM-12-14-ubuntu:~/wp# kubectl get pods
NAME                      READY   STATUS    RESTARTS   AGE
mysql                     1/1     Running   0          10d
app-wp-7c67f8fcd9-gj52w   1/1     Running   0          2d

之后浏览器访问:http://你的域名,应该可以看到 Wordpress “语言选择界面”了。(我这里已经安装完毕,所以展示了登陆界面) image.png

后续工作

恭喜你成功部署 Wordpress,Wordpress 就像一个潘多拉魔盒,部署它仅仅是第一步,后面还有无穷的好玩的事等待我们去探索,比如:

  • 为网站添加 SSL 证书
  • 网站主题&文章样式优化
  • 网站性能优化
  • 网站SEO优化

这些内容我后续都会出详细的攻略,大家可以关注我的账户,以便下次继续看~

Buy me a coffee~
室长 支付宝支付宝
室长 微信微信
0%