Kubernetes(K8s)部署WordPress集群完整指南

来自:素雅营销研究院

头像 方知笔记
2025年05月05日 06:39

前言

随着容器化技术的普及,Kubernetes(K8s)已成为部署和管理容器化应用的事实标准。本文将详细介绍如何使用Kubernetes部署一个高可用的WordPress集群,包括数据库、持久化存储和负载均衡等关键组件。

环境准备

在开始之前,请确保您已具备以下条件:

  1. 可用的Kubernetes集群(可以是Minikube、kubeadm搭建的集群或云服务商提供的托管集群)
  2. kubectl命令行工具已安装并配置好
  3. Helm包管理器(可选,用于简化部署)

部署MySQL数据库

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

# mysql-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
serviceName: mysql
replicas: 1
template:
metadata:
labels:
app: 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

创建对应的Service:

# mysql-service.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
clusterIP: None

应用这些配置:

kubectl apply -f mysql-statefulset.yaml
kubectl apply -f mysql-service.yaml

部署WordPress

现在我们来部署WordPress应用,使用Deployment来管理Pod。

# wordpress-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
replicas: 3
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: wordpress:latest
ports:
- containerPort: 80
env:
- name: WORDPRESS_DB_HOST
value: mysql
- name: WORDPRESS_DB_USER
value: wordpress
- name: WORDPRESS_DB_PASSWORD
value: wordpress-password
- name: WORDPRESS_DB_NAME
value: wordpress
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wordpress-pv-claim

创建持久化卷声明(PVC):

# wordpress-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wordpress-pv-claim
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi

创建Service暴露WordPress:

# wordpress-service.yaml
apiVersion: v1
kind: Service
metadata:
name: wordpress
spec:
ports:
- port: 80
selector:
app: wordpress

应用这些配置:

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

配置Ingress实现外部访问

为了从外部访问WordPress,我们需要配置Ingress控制器。

# wordpress-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wordpress-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: wordpress.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: wordpress
port:
number: 80

应用Ingress配置:

kubectl apply -f wordpress-ingress.yaml

使用Helm简化部署(可选)

如果您安装了Helm,可以使用Bitnami提供的WordPress chart更简单地部署:

helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-wordpress bitnami/wordpress \
--set mariadb.enabled=true \
--set persistence.enabled=true \
--set service.type=LoadBalancer

验证部署

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

kubectl get pods

检查Service和Ingress:

kubectl get svc,ingress

扩展与优化

  1. 水平扩展:通过调整replicas数量可以轻松扩展WordPress实例
  2. 数据库集群:考虑使用MySQL集群或云数据库服务提高数据库可用性
  3. 缓存:添加Redis或Memcached缓存层提高性能
  4. CDN:集成CDN加速静态资源访问
  5. 监控:添加Prometheus和Grafana监控集群状态

总结

通过Kubernetes部署WordPress集群不仅提供了高可用性和可扩展性,还能充分利用K8s的自动化管理能力。本文介绍了从基础部署到外部访问的完整流程,您可以根据实际需求进一步优化配置,构建更强大的WordPress集群。