Kubernetes(k8s)部署WordPress全攻略

来自:素雅营销研究院

头像 方知笔记
2025年04月30日 18:54

一、前言

在云原生时代,Kubernetes(简称k8s)已成为容器编排的事实标准。本文将详细介绍如何使用Kubernetes部署流行的内容管理系统WordPress,实现高可用、可扩展的网站架构。

二、准备工作

  1. Kubernetes集群:可以是本地Minikube、云服务商提供的k8s服务或自建集群
  2. kubectl工具:配置好与集群的连接
  3. 存储类(StorageClass):确保集群支持动态卷供应
  4. Helm(可选):用于简化部署过程

三、部署MySQL数据库

WordPress需要MySQL/MariaDB作为后端数据库,我们先部署数据库服务:

# mysql-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- image: mysql:5.7
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: root-password
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: mysql-secret
key: username
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim

创建对应的Secret和PersistentVolumeClaim后应用此配置。

四、部署WordPress应用

# wordpress-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: frontend
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: frontend
spec:
containers:
- image: wordpress:latest
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: wordpress-mysql
- name: WORDPRESS_DB_USER
valueFrom:
secretKeyRef:
name: mysql-secret
key: username
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
- name: WORDPRESS_DB_NAME
value: wordpress
ports:
- containerPort: 80
name: wordpress
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wp-pv-claim

五、暴露WordPress服务

创建Service对外暴露WordPress:

# wordpress-service.yaml
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
ports:
- port: 80
selector:
app: wordpress
tier: frontend
type: LoadBalancer

六、使用Helm简化部署(可选)

对于更简单的部署方式,可以使用Helm chart:

  1. 添加Bitnami仓库:
helm repo add bitnami https://charts.bitnami.com/bitnami
  1. 安装WordPress:
helm install my-wordpress bitnami/wordpress \
--set mariadb.enabled=true \
--set persistence.enabled=true

七、高级配置建议

  1. HTTPS支持:配置Ingress和证书管理器实现HTTPS
  2. 自动扩展:配置HPA(Horizontal Pod Autoscaler)根据负载自动扩展
  3. 备份策略:设置定期备份数据库和上传内容
  4. 监控:集成Prometheus和Grafana监控WordPress性能

八、常见问题解决

  1. 持久化存储问题:确保StorageClass配置正确
  2. 连接数据库失败:检查服务发现和网络策略
  3. 性能问题:考虑添加Redis缓存层
  4. 镜像拉取失败:检查镜像仓库访问权限

九、总结

通过Kubernetes部署WordPress,您可以获得以下优势:

  • 高可用性:自动故障转移和恢复
  • 弹性扩展:根据流量自动调整资源
  • 简化运维:统一的部署和管理界面
  • 资源隔离:避免”邻居干扰”问题

随着业务增长,您可以轻松扩展WordPress部署,添加更多功能组件,构建完整的云原生CMS解决方案。