警告
本文最后更新于 2022-07-14,文中内容可能已过时。
架构图
一图胜千言,先看看用 K3s 部署的 Wordpress 的整体结构
可以看到整个系统分为
为什么要用 K3s 部署 Wordpress?
现在网络上部署 Wordpress 教程大部分都在讨论用 Docker 部署。诚然,如果只有一台服务器,用 Docker 部署起来飞快,甚至腾讯云等平台还提供自动部署……
如果博主没有计算机相关技术背景,那么这种云服务真的很方便。
不过这种方式有它的不足:就像 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 命令看看是否安装成功:
如果你有多个服务器,想要部署集群,那么还需要拿到 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 “语言选择界面”了。(我这里已经安装完毕,所以展示了登陆界面)
后续工作
恭喜你成功部署 Wordpress,Wordpress 就像一个潘多拉魔盒,部署它仅仅是第一步,后面还有无穷的好玩的事等待我们去探索,比如:
- 为网站添加 SSL 证书
- 网站主题&文章样式优化
- 网站性能优化
- 网站SEO优化
这些内容我后续都会出详细的攻略,大家可以关注我的账户,以便下次继续看~