Kubernetes部署WordPress个人博客步骤

落宇姑娘_5196

落宇姑娘_5196

2026-09-23

121人浏览

原创

必须用statefulset部署mysql:①确保有序启停(mysql-0→mysql-1→mysql-2);②每个pod绑定独立pvc,重建不丢数据;③通过headless service提供稳定dns标识,保障主从连接可靠。

kubernetes部署wordpress个人博客步骤

直接上手部署 WordPress 个人博客到 Kubernetes,关键不是“能不能跑”,而是“数据会不会丢、扩缩容会不会炸、升级会不会断”。结论很明确:必须拆开 MySQL 和 WordPress,MySQL 用 StatefulSet + PVC,WordPress 用 Deployment + Service + 可选 Ingress,否则一扩容就多套数据库,一重启就丢配置。

MySQL 必须用 StatefulSet,别用 Deployment

Deployment 部署 MySQL 看似简单,但会埋下三个硬伤:

  • 滚动更新时可能多个 Pod 同时写同一份 NFS 或本地 hostPath,导致 InnoDB 崩溃;
  • 副本数 >1 时,多个 MySQL 实例争抢同一个数据目录,启动直接失败(报错类似 mysqld: Can't start server: Bind on TCP/IP port. Got error: 98: Address already in use);
  • 没有稳定的网络标识(如 mysql-0.mysql),WordPress 无法可靠连接主实例。

正确做法是用 StatefulSet,并绑定独立 PVC

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  serviceName: "mysql"
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:8.4
        envFrom:
        - secretRef:
            name: mysql-secret
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
  volumeClaimTemplates:
  - metadata:
      name: mysql-data
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 10Gi

注意:volumeClaimTemplates 会为每个 Pod 自动生成带序号的 PVC(如 mysql-data-mysql-0),这是 Deployment 做不到的。

WordPress 的环境变量不能硬编码,优先用 Secret + ConfigMap

把数据库密码写死在 YAML 里等于裸奔。Kubernetes 提供了更安全的注入方式:

  • Secret 存敏感字段:如 WORDPRESS_DB_PASSWORDMYSQL_ROOT_PASSWORD
  • ConfigMap 存非敏感字段:如 WORDPRESS_DB_HOST(值应为 mysql,即 Service 名)、WORDPRESS_DB_NAME
  • WordPress 官方镜像支持前缀式环境变量注入,例如用 envFrom + prefix: WORDPRESS_DB_,就能自动映射 WORDPRESS_DB_USER$DB_USER

错误示例(明文密码):

env:
- name: WORDPRESS_DB_PASSWORD
  value: "my-secret-pass"

正确做法:

MiniMax Word
MiniMax Word

MiniMax Word专业文档生成 - 基于.NET OpenXML SDK,完整保留页眉页脚目录、修订痕迹、复杂表格样式,输出可直接交付的.docx文档。

下载
kubectl create secret generic wordpress-db-secret \
  --from-literal=password=your-real-password \
  --from-literal=user=wordpress \
  --from-literal=host=mysql

然后在 WordPress Deployment 中引用:

envFrom:
- secretRef:
    name: wordpress-db-secret
  prefix: WORDPRESS_DB_

Service 类型选 ClusterIP 还是 NodePort?看访问场景

个人博客通常不需要公网直连 MySQL,但 WordPress 前端得能被访问。这里分两层看:

  • MySQL Service 必须设为 clusterIP: None(无头服务),否则 DNS 解析会返回集群 IP,而 StatefulSet 要求直接解析到 Pod IP(如 mysql-0.mysql.namespace.svc.cluster.local);
  • WordPress Service
    • 本地测试:用 NodePort,比如 nodePort: 30080,然后浏览器访问 http://<node-ip>:30080</node-ip>
    • 生产或长期使用:用 ClusterIP + Ingress,配合域名(如 blog.example.com)和 TLS 证书,更可控也更安全;

别用 LoadBalancer——除非你在云厂商环境且愿意付费。它在本地集群(如 minikube、k3s)里基本不生效,还容易卡在 Pending 状态。

PV/PVC 绑定失败?先查 StorageClass 和节点挂载能力

常见现象:PVC 一直 Pendingkubectl describe pvc 显示 no persistent volumes available for this claim

根本原因往往不是 YAML 写错,而是底层存储没就绪:

  • 确认 StorageClass 是否存在且默认启用:kubectl get sc
  • 如果用 NFS,确保所有节点(包括 master)都装了 nfs-utils,否则 kubelet 挂载失败;
  • 如果用 hostPath,注意它只适用于单节点测试,且路径必须提前在对应节点上创建好(如 /mnt/data),权限设为 755,属主设为 mysql(UID 999)或 www-data(UID 33);
  • 检查 PVaccessModes 是否匹配 PVC(如 ReadWriteOnce 不能绑定到要求 ReadWriteMany 的 PVC)。

最容易被忽略的一点:MySQL 容器启动时需要往挂载点写文件,如果 NFS 服务端配了 root_squash(默认行为),而容器以非 root 用户运行(MySQL 8.4 默认 UID 999),就会因权限不足卡在初始化阶段,日志里反复出现 chown: changing ownership of '/var/lib/mysql/': Operation not permitted。解决方法是 NFS 服务端改用 no_root_squash,或改用 mountOptionsuid=999,gid=999

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务
Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务

Golang云原生微服务Kubernetes (K8s) 是指 使用 Go 语言(Golang)编写的云原生微服务,并利用 Kubernetes 平台进行容器化部署、自动化管理、弹性伸缩和高效编排的一整套现代应用架构方案。

2025.12.22

96

5

Go云原生应用与Kubernetes服务部署实战
Go云原生应用与Kubernetes服务部署实战

本专题围绕 Go 语言在云原生环境中的应用展开,讲解容器化部署、Kubernetes 编排、服务发现、健康检查与弹性扩缩容机制。通过真实云端案例,帮助开发者构建可扩展的云原生微服务架构。

2026.06.29

148

19

word背景色怎么改成白色
word背景色怎么改成白色

Word是微软公司的一个文字处理器软件。word为用户提供了专业而优雅的文档工具,帮助用户节省时间并得到优雅美观的结果。word提供了许多易于使用的文档创建工具,同时也提供了丰富的功能供创建复杂的文档使用。怎么word背景色怎么该呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.21

4291

3

word最后一页空白页怎么删除
word最后一页空白页怎么删除

word最后一页空白页删除方法有:通过删除回车符、调整页边距、删除分节符或调整分页符位置,您可以轻松去除最后一页的空白页。根据您实际的文档情况,选择适合您的方法进行操作,使您的文档更加美观和整洁。本专题为大家提供word最后一页空白页怎么删除不了相关的各种文章、以及下载和课程。

2023.07.24

840

5

word最后一页空白页怎么删除不了
word最后一页空白页怎么删除不了

word删除最后一页空白页,可以尝试使用Backspace键删除空白页,如果无效,查找和删除分页符,或者调整页面边距和行距。还可以尝试将文档保存为其他格式并重新打开和保存。本专题为大家提供word最后一页空白页为啥删除不了的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.25

2282

5

word单页改变纸张方向
word单页改变纸张方向

word单页改变纸张方向:1、在界面上选择文档纸张方向;2、自定义页面设置;3、分节功能。本专题为大家提供word单页改变纸张方向的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.27

1100

4

word转ppt
word转ppt

Word是一款常用的文字处理软件,而PowerPoint则是一款专门用于制作演示文稿的软件。在某些情况下,我们可能需要将Word文档转换为PowerPoint演示文稿,以便更好地展示我们的内容。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.03

997

4

word页码从第三页开始为1教程
word页码从第三页开始为1教程

如何将word页码从第三页开始为1,本专题为大家提供相关的文章,希望可以帮助大家解决问题。

2023.08.04

6472

6

多个word合并成一个word教程
多个word合并成一个word教程

在工作中将多个word合并成一个word是一个很常见的操作,本专题为大家提供相关问题的解决文章,大家可以免费阅读。

2023.08.04

2366

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何在 Windows 11 上安装 XAMPP
如何在 Windows 11 上安装 XAMPP

共1课时 | 193人学习

第二十三期_前端开发
第二十三期_前端开发

共98课时 | 11.4万人学习