使用Kubernetes(k8s)搭建WordPress网站的完整指南

来自:素雅营销研究院

头像 方知笔记
2025年06月06日 12:55

前言

在当今云原生时代,Kubernetes(简称k8s)已成为容器编排的事实标准。本文将详细介绍如何使用Kubernetes搭建一个高可用、可扩展的WordPress网站,帮助您将传统应用现代化。

准备工作

在开始之前,您需要准备以下环境:

  1. 一个运行中的Kubernetes集群(可以是Minikube本地集群或云服务商提供的托管集群)
  2. 安装并配置好kubectl命令行工具
  3. 确保集群有足够的资源(至少2GB内存和2个CPU核心)
  4. 可选:准备一个域名和SSL证书

步骤一:创建MySQL数据库

WordPress需要MySQL或MariaDB作为后端数据库。我们将使用StatefulSet来部署MySQL,确保数据持久化。

# mysql-deployment.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: wordpress-mysql
spec:
selector:
matchLabels:
app: wordpress
tier: mysql
serviceName: wordpress-mysql
replicas: 1
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: "your-root-password"
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_USER
value: wordpress
- name: MYSQL_PASSWORD
value: "wordpress-password"
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi

应用这个配置:

kubectl apply -f mysql-deployment.yaml

步骤二:部署WordPress应用

我们将部署WordPress前端,并使用ClusterIP服务将其与MySQL连接。

# 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:
- name: wordpress
image: wordpress:latest
env:
- name: WORDPRESS_DB_HOST
value: wordpress-mysql
- name: WORDPRESS_DB_USER
value: wordpress
- name: WORDPRESS_DB_PASSWORD
value: wordpress-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创建持久化存储。

# wordpress-volume.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wp-pv-claim
labels:
app: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi

步骤四:暴露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

应用所有配置:

kubectl apply -f wordpress-volume.yaml
kubectl apply -f wordpress-deployment.yaml
kubectl apply -f wordpress-service.yaml

验证部署

检查所有Pod是否正常运行:

kubectl get pods

获取WordPress服务的外部IP:

kubectl get service wordpress

在浏览器中访问该IP地址,您应该能看到WordPress的安装界面。

高级配置选项

  1. HTTPS支持:可以使用Ingress控制器和Cert-manager自动管理SSL证书
  2. 自动扩展:配置HPA(Horizontal Pod Autoscaler)根据CPU使用率自动扩展WordPress实例
  3. 备份策略:设置定期备份MySQL数据库和WordPress上传目录
  4. CDN集成:配置WordPress使用云存储和CDN加速静态资源

常见问题解决

  1. 数据库连接问题:检查MySQL Pod是否正常运行,确认环境变量配置正确
  2. 持久化存储问题:确认PVC已绑定PV,检查存储类配置
  3. 性能问题:考虑添加Redis作为对象缓存,优化PHP-FPM配置

结论

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

  • 高可用性:Pod故障时自动恢复
  • 弹性扩展:根据流量自动增减资源
  • 简化运维:统一的部署和管理方式
  • 环境一致性:开发、测试和生产环境保持一致

随着业务增长,您可以轻松扩展此架构,添加更多服务或迁移到多云环境。Kubernetes为您的WordPress网站提供了企业级的可靠性和灵活性。