WordPress 是用于在互联网上部署博客和网站的最受欢迎的内容管理系统之一。它也可以作为一个 Docker 镜像,存在于 DockerHub 注册表上。您可以使用此 Docker 镜像在 Kubernetes 集群上构建一个可靠且可扩展的网站平台。在 Kubernetes 上部署 WordPress 将帮助您实现 CI/CD 流水线,并缩短发布新更新所需的时间。您还可以启用 WordPress 网站的水平扩展,以应对网站流量的激增。
本指南将向您展示如何部署 WordPress 和 MySQL,并结合 Persistent Volume 在 Kubernetes 集群上。
前提条件
- 对 Kubernetes (k8s) 及其对象有基本的了解。请参考本指南以获取 Kubernetes 生态系统的详细概述.
- 一个正在运行的 Kubernetes 集群。按照本教程来 在 Ubuntu 20.04 上安装 Kubernetes 集群.
验证 Kubernetes 集群
在开始之前,建议验证 Kubernetes 集群的状态。您可以使用 kubectl 命令来验证 Kubernetes。
|
1 |
kubectl get nodes |
如果一切正常,您应该会得到以下输出。

为 MySQL 创建 Secret
一个 Secret 是一个允许您存储敏感数据(如密码或密钥)的对象。在本文中,我们将使用 Secret 来存储 MySQL 密码。
首先,使用以下命令创建一个 base64 编码的密码。
|
1 |
echo -n 'your_secure_password' | base64 |
您将在以下输出中获得您的加密密码。
|
1 |
eW91cl9zZWN1cmVfcGFzc3dvcmQ= |
接下来,创建一个 secret.yaml 文件,用于 MySQL 和 WordPress。
|
1 |
nano secret.yaml |
添加以下配置。
|
1 2 3 4 5 6 7 |
apiVersion: v1 kind: Secret metadata: name: mysql-pass type: Opaque data: password: eW91cl9zZWN1cmVfcGFzc3dvcmQ= |
保存并关闭文件。然后,使用以下命令将上述配置应用到 Kubernetes 集群。
|
1 |
kubectl apply -f secret.yaml |
您将得到以下输出。
|
1 |
secret/mysql-pass created |
为 MySQL 和 WordPress 创建 PersistentVolume
您还需要创建一个 PersistentVolume 来存储 MySQL 和 WordPress 的数据。
让我们创建一个 pvc-mysql-wp.yaml 文件。
|
1 |
nano pvc-mysql-wp.yaml |
添加以下配置。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim labels: app: wordpress spec: accessModes: - ReadWriteOnce resources: requests: storage: 40Gi --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: wp-pv-claim labels: app: wordpress spec: accessModes: - ReadWriteOnce resources: requests: storage: 40Gi |
完成后保存并关闭文件。
接下来,使用以下命令在 Kubernetes 集群上为 MySQL 和 WordPress 创建 PersistentVolume。
|
1 |
kubectl apply -f pvc-mysql-wp.yaml |
您应该在以下输出中看到这两个 PersistentVolume。
|
1 2 |
persistentvolumeclaim/mysql-pv-claim created persistentvolumeclaim/wp-pv-claim created |
现在您可以使用以下命令验证这两个 PersistentVolume。
|
1 |
kubectl get pv |
您应该会看到以下输出。
|
1 2 3 |
名称 容量 访问 模式 回收 策略 状态 声明 存储类 原因 时长 pvc-873a458352594103 40Gi RWO Delete Bound default/wp-pv-claim your-block-storage 3s pvc-de7d7de5e53a40e8 40Gi RWO Delete Bound default/mysql-pv-claim your-block-storage 3s |
创建 MySQL 部署
接下来,创建一个 MySQL 部署配置文件以下载 MySQL Docker 镜像、创建容器并将 PersistentVolume 挂载到 /var/lib/mysql.
|
1 |
nano mysql-deployment.yaml |
添加以下配置。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
apiVersion: v1 kind: Service metadata: name: wordpress-mysql labels: app: wordpress spec: ports: - port: 3306 selector: app: wordpress tier: mysql clusterIP: None --- 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.6 name: mysql env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-pass 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 |
完成后保存并关闭文件。然后,将上述配置部署到 Kubernetes 集群。
|
1 |
kubectl apply -f mysql-deployment.yaml |
您应该会看到以下输出。

您可以使用以下命令验证 MySQL 部署。
|
1 |
kubectl get deployments |
您应该在以下输出中看到 MySQL 部署的状态。

创建 WordPress 部署
现在,创建一个 WordPress 部署配置文件以下载 WordPress 镜像、创建容器,并将 PersistentVolume 挂载到 /var/www/html 以存放网站数据文件。该文件还将创建 WORDPRESS_DB_HOST 和 WORDPRESS_DB_PASSWORD 环境变量以访问数据库。
|
1 |
nano wordpress-deployment.yaml |
添加以下配置。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
apiVersion: v1 kind: Service metadata: name: wordpress labels: app: wordpress spec: ports: - port: 80 selector: app: wordpress tier: frontend type: LoadBalancer --- apiVersion: apps/v1 # 对于 1.9.0 之前的版本,请使用 apps/v1beta2 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:4.8-apache name: wordpress env: - name: WORDPRESS_DB_HOST value: wordpress-mysql - name: WORDPRESS_DB_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 80 name: wordpress volumeMounts: - name: wordpress-persistent-storage mountPath: /var/www/html volumes: - name: wordpress-persistent-storage persistentVolumeClaim: claimName: wp-pv-claim |
完成后保存文件。然后,使用以下命令将上述配置应用到 Kubernetes 集群。
|
1 |
kubectl apply -f wordpress-deployment.yaml |
您应该在以下输出中看到部署成功的消息。
|
1 2 |
service/wordpress created deployment.apps/wordpress created |
要验证 WordPress 部署,请运行以下命令。
|
1 |
kubectl get deployments |
您应该在以下输出中看到 WordPress 部署的状态。

访问 WordPress Web UI
要访问 WordPress 仪表板,您需要 LoadBalancer 的外部 IP 和端口号。您可以使用以下命令检索此信息。
|
1 |
kubectl get svc |
您将在以下输出中获得 LoadBalancer 的 IP 和端口。
|
1 2 3 4 |
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 29m wordpress LoadBalancer 10.100.80.70 78.141.194.181 80:31624/TCP 3m6s wordpress-mysql ClusterIP None <none> 3306/TCP 4m14s |
要获取有关 WordPress Pod 的详细信息,请运行以下命令。
|
1 |
kubectl describe svc wordpress |
您应该在以下输出中获得 WordPress 的详细信息。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Name: wordpress Namespace: default Labels: app=wordpress Annotations: <none> Selector: app=wordpress,tier=frontend Type: LoadBalancer IP Family Policy: SingleStack IP Families: IPv4 IP: 10.100.80.70 IPs: 10.100.80.70 LoadBalancer Ingress: 78.141.194.181 Port: <unset> 80/TCP TargetPort: 80/TCP NodePort: <unset> 31624/TCP Endpoints: 10.244.23.66:80 Session Affinity: None External Traffic Policy: Cluster |
现在,打开您的网页浏览器,并使用以下 URL 访问 WordPress 安装页面: http://78.141.194.181:3162。您应该在接下来的屏幕中看到 WordPress 安装页面。

选择您的语言并完成所需步骤以完成安装过程。
总结
在这篇文章中,我们解释了如何在 Kubernetes 集群上使用持久卷部署 MySQL 和 WordPress。您还可以根据网站流量扩展 WordPress 部署。现在,您可以根据开发需求使用上述部署。
此外,请查看我们博客上关于 Docker 和 Kubernetes 的其他教程:
评论
暂无评论。发表第一条评论吧。