在 K8s( Kubernetes)中部署 WordPress,通常需要结合Deployment(部署 WordPress 应用)+ Service(暴露访问)+ PersistentVolumeClaim(存储数据)+ 数据库(比如 MySQL) 来实现。以下是简化的核心步骤:
1. 准备数据库(以 MySQL 为例)
先部署 MySQL(也可以用已有数据库),需要配置存储和账号:
# mysql-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: "root密码"
- name: MYSQL_DATABASE
value: "wordpress" # WordPress要用的数据库名
- name: MYSQL_USER
value: "wordpress用户"
- name: MYSQL_PASSWORD
value: "用户密码"
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
volumes:
- name: mysql-data
persistentVolumeClaim:
claimName: mysql-pvc
---
# mysql-service.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
clusterIP: None # 无头服务,让WordPress通过服务名访问
2. 部署 WordPress
配置 WordPress 的 Deployment 和 Service,关联 MySQL:
# wordpress-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
spec:
replicas: 1
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: wordpress:latest
env:
- name: WORDPRESS_DB_HOST
value: "mysql:3306" # 对应MySQL的Service名
- name: WORDPRESS_DB_NAME
value: "wordpress"
- name: WORDPRESS_DB_USER
value: "wordpress用户"
- name: WORDPRESS_DB_PASSWORD
value: "用户密码"
volumeMounts:
- name: wordpress-data
mountPath: /var/www/html
volumes:
- name: wordpress-data
persistentVolumeClaim:
claimName: wordpress-pvc
---
# wordpress-service.yaml
apiVersion: v1
kind: Service
metadata:
name: wordpress
spec:
type: NodePort # 暴露到节点端口,方便外部访问
ports:
- port: 80
nodePort: 30080 # 外部访问端口(30000-32767之间)
selector:
app: wordpress
3. 配置存储(PVC)
需要提前创建 PersistentVolume(或用集群默认存储类),再创建 PVC:
# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wordpress-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
4. 执行部署
依次执行以下命令:
# 创建PVC
kubectl apply -f pvc.yaml
# 部署MySQL
kubectl apply -f mysql-deployment.yaml
kubectl apply -f mysql-service.yaml
# 部署WordPress
kubectl apply -f wordpress-deployment.yaml
kubectl apply -f wordpress-service.yaml

解决方法:
如果还没创建 mysql-service.yaml,直接在 master 节点用 vim 新建并写入内容,步骤如下:
-
执行命令新建文件:
vim mysql-service.yaml -
按下
i键进入编辑模式,粘贴以下完整内容(替换注释里的密码 / 用户名):apiVersion: v1 kind: Service metadata: name: mysql spec: ports: - port: 3306 selector: app: mysql clusterIP: None # 无头服务,让WordPress通过服务名访问 -
按下
Esc键,输入:wq回车保存并退出。
第三步:按顺序执行所有部署文件(完整流程)
为了避免文件缺失 / 顺序错误,建议把所有需要的 yaml 文件都放在同一个目录,然后按以下顺序执行:
1. 先创建存储 PVC 文件(wordpress-pvc.yaml)
vim wordpress-pvc.yaml
粘贴内容:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wordpress-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
保存退出(Esc + :wq),执行创建:
kubectl apply -f wordpress-pvc.yaml
2. 创建 MySQL 部署文件(mysql-deployment.yaml)
vim mysql-deployment.yaml
粘贴内容(替换<你的root密码>/<wp用户名>/<wp密码>为实际值):
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: "<你的root密码>" # 替换成自己的密码
- name: MYSQL_DATABASE
value: "wordpress"
- name: MYSQL_USER
value: "<wp用户名>" # 自定义WordPress数据库用户
- name: MYSQL_PASSWORD
value: "<wp密码>" # 自定义用户密码
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
volumes:
- name: mysql-data
persistentVolumeClaim:
claimName: mysql-pvc
保存退出,执行创建:
kubectl apply -f mysql-deployment.yaml
3. 创建 MySQL Service(解决你最初的报错)
kubectl apply -f mysql-service.yaml
4. 创建 WordPress 部署文件(wordpress-deployment.yaml)
vim wordpress-deployment.yaml
粘贴内容(替换<wp用户名>/<wp密码>为和 MySQL 一致的值):
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
spec:
replicas: 1
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: wordpress:latest
env:
- name: WORDPRESS_DB_HOST
value: "mysql:3306"
- name: WORDPRESS_DB_NAME
value: "wordpress"
- name: WORDPRESS_DB_USER
value: "<wp用户名>" # 和MySQL里的MYSQL_USER一致
- name: WORDPRESS_DB_PASSWORD
value: "<wp密码>" # 和MySQL里的MYSQL_PASSWORD一致
volumeMounts:
- name: wordpress-data
mountPath: /var/www/html
volumes:
- name: wordpress-data
persistentVolumeClaim:
claimName: wordpress-pvc
保存退出,执行创建:
kubectl apply -f wordpress-deployment.yaml
5. 创建 WordPress Service(暴露访问端口)
vim wordpress-service.yaml
粘贴内容:
apiVersion: v1
kind: Service
metadata:
name: wordpress
spec:
type: NodePort
ports:
- port: 80
nodePort: 30080 # 外部访问端口(30000-32767之间)
selector:
app: wordpress
保存退出,执行创建:
kubectl apply -f wordpress-service.yaml
第四步:验证部署是否成功
-
查看 Pod 状态(确保所有 Pod 都是
Running):kubectl get pods -
查看 Service 状态(确认 wordpress 的 NodePort 是 30080):
kubectl get svc -
访问 WordPress:打开浏览器,输入
K8s节点IP:30080(比如 master 节点 IP 是 192.168.1.100,就输入192.168.1.100:30080),即可进入 WordPress 安装界面。
root@master:~kubectl logs mysql-65d6f595cc-w6g8b # 替换成你的MySQL Pod名称称 2025-12-06 06:43:39+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.36-1.el8 started. 2025-12-06 06:43:39+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' 2025-12-06 06:43:39+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.36-1.el8 started. 2025-12-06 06:43:40+00:00 [ERROR] [Entrypoint]: MYSQL_USER="root", MYSQL_USER and MYSQL_PASSWORD are for configuring a regular user and cannot be used for the root user Remove MYSQL_USER="root" and use one of the following to control the root user password: - MYSQL_ROOT_PASSWORD - MYSQL_ALLOW_EMPTY_PASSWORD - MYSQL_RANDOM_ROOT_PASSWORD
日志里的报错已经把问题说的非常明确了:MYSQL_USER="root", MYSQL_USER and MYSQL_PASSWORD are for configuring a regular user and cannot be used for the root user👉 翻译:你把 MYSQL_USER 设为了 root,但这个环境变量是用来创建普通用户的,不能给 root 用户用!
下面是最快修复方案(不用重新写 yaml,直接编辑现有 Deployment),1 分钟就能解决:
第一步:编辑 MySQL 的 Deployment,修正环境变量
kubectl edit deployment mysql
找到 env 部分,修改这 2 处:
- 删掉
MYSQL_USER: root(或把值改成非 root,比如wpuser); - 删掉
MYSQL_PASSWORD: root123(如果是给 root 设密码,只保留MYSQL_ROOT_PASSWORD即可)。
✅ 修改后的env部分参考:
env:
- name: MYSQL_ROOT_PASSWORD
value: "root123" # 只保留root密码
- name: MYSQL_DATABASE
value: "wordpress" # 保留数据库名
# 删掉 MYSQL_USER 和 MYSQL_PASSWORD 这两行(或改成普通用户)
# 可选:新增普通用户(推荐)
- name: MYSQL_USER
value: "wpuser"
- name: MYSQL_PASSWORD
value: "wp123456"
修改完成后,按 Esc + :wq 保存退出。
第二步:重启 MySQL Pod(触发配置生效)
# 删除旧的崩溃Pod,Deployment会重建新Pod
kubectl delete pod mysql-65d6f595cc-w6g8b
第三步:同步修正 WordPress 的 Deployment(关键!)
如果刚才给 MySQL 加了普通用户wpuser,必须同步改 WordPress 的数据库连接配置:
kubectl edit deployment wordpress
找到 env 部分,修改数据库用户和密码:
env:
- name: WORDPRESS_DB_HOST
value: "mysql:3306"
- name: WORDPRESS_DB_NAME
value: "wordpress"
- name: WORDPRESS_DB_USER
value: "wpuser" # 匹配MySQL的普通用户
- name: WORDPRESS_DB_PASSWORD
value: "wp123456" # 匹配MySQL的普通用户密码
保存退出后,重启 WordPress Pod:
kubectl rollout restart deployment wordpress
第四步:验证 MySQL Pod 是否正常运行
kubectl get pods | grep mysql
✅ 正常输出(STATUS 为 Running,RESTARTS 为 0):
mysql-xxxx-xxxx 1/1 Running 0 30s
核心逻辑说明:
- MySQL 镜像的
MYSQL_USER环境变量仅用于创建普通用户 ,root 用户的密码只能通过MYSQL_ROOT_PASSWORD配置; - 如果想让 WordPress 用 root 用户连接数据库:只需保留
MYSQL_ROOT_PASSWORD,删掉MYSQL_USER/MYSQL_PASSWORD,同时把 WordPress 的WORDPRESS_DB_USER改成root,WORDPRESS_DB_PASSWORD改成root123即可; - 生产环境推荐用普通用户(如
wpuser),更安全。
执行完后再查 Pod 状态,MySQL 就不会崩溃重启了,WordPress 也能正常连接数据库~
root@master:~# kubectl get pods | grep mysql mysql-6f6bbd4bb7-22trs 1/1 Running 0 91s 这就能访问wprdpress了
是的!现在 MySQL Pod 已经稳定运行(1/1 Running、重启次数 0),说明数据库侧的核心问题已经解决,接下来只要确认 WordPress Pod 也正常运行,就能访问 WordPress 了~
最后两步验证 + 访问:
1. 先检查 WordPress Pod 状态
kubectl get pods | grep wordpress
✅ 正常输出(STATUS 为 Running):
wordpress-xxxx-xxxx 1/1 Running 0 1m
2. 访问 WordPress(关键!)
打开浏览器,输入:你的K8s节点IP:30080(比如 master 节点 IP 是192.168.1.100,就输入 192.168.1.100:30080)
👉 就能进入 WordPress 的可视化安装界面,按提示设置站点名称、管理员账号密码即可完成部署。
小提醒:
-
如果 WordPress Pod 还在启动中(ContainerCreating),耐心等 10-20 秒(镜像拉取需要时间);
-
如果访问失败,检查节点防火墙 / 安全组是否放行 30080 端口;
-
后续想修改 WordPress 访问端口,可编辑 WordPress 的 Service:
kubectl edit svc wordpress修改
nodePort字段(范围 30000-32767)即可。
至此整个 K8s 部署 WordPress 的流程就完成了,你可以正常配置和使用 WordPress 啦 ✨!



