Kubernetes部署WordPress教程介绍
Kubernetes如何部署WordPress实例?作为全球最受欢迎的内容管理系统,WordPress 运行着各种规模的网站,无论是内容量还是网络流量。在Kubernetes上部署 WordPress是实现网站水平扩展并成功处理网站流量激增的有效方法。
本教程介绍了在 Kubernetes 上部署 WordPress 的两种方法 - 使用 Helm 图表和从头开始创建部署。
先决条件
- 一个Kubernetes集群kubectl
 - Helm 3
 - 系统管理权限
 
使用 Helm Chart 在 Kubernetes 上部署 WordPress
如何在Kubernetes上部署WordPress实例?Helm charts 带有预配置的应用程序安装,可以使用一些简单的命令进行部署。
- 添加包含要部署的 WordPress Helm 图表的存储库:
 
helm repo add [repo-name] [repo-address]
系统确认存储库添加成功。该示例使用 Bitnami 图表。

2. 更新本地 Helm 仓库:
helm repo update

3. Kubernetes部署WordPress教程:使用helm install 命令安装图表。
helm install [release-name] [repo-address]
等待图表部署。

4. WordPress 服务使用 LoadBalancer 作为公开服务的方式。如果你使用minikube,请打开另一个终端窗口并键入以下命令来模拟 LoadBalancer:
minikube tunnel
5. minikube 显示Running状态时,将窗口最小化,返回上一窗口。

6. 通过键入以下内容检查部署的准备情况:
kubectl get all
该命令列出并显示 pod、服务和部署的状态。

7. Pod 和部署准备就绪后,使用以下命令导出SERVICE_IP环境变量:
export SERVICE_IP=$(kubectl get svc --namespace default wp-test-wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")
8. 现在使用echo 命令显示服务的 IP 地址:
echo "WordPress URL: http://$SERVICE_IP/"

9. 在浏览器的地址栏中输入地址。WordPress 安装开始。
使用持久卷在 Kubernetes 上部署 WordPress
Kubernetes如何部署WordPress实例?使用自定义配置部署 WordPress 时,你需要为 WordPress 和应用程序将使用的数据库创建一系列YAML 文件。下面的示例使用MySQL,但你也可以选择 MariaDB。
1. 使用文本编辑器创建 YAML 文件来为 MySQL 数据库配置存储。
nano mysql-storage.yaml
该文件定义了一个持久存储卷(PV) 并使用 PersistentVolumeClaim (PVC) 声明该存储。该示例使用以下配置:
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: wordpress
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
保存文件并退出。
2. 创建 MySQL 部署配置 YAML。
nano mysql-deployment.yaml
如何在Kubernetes上部署WordPress实例?部署文件包含与容器镜像和存储相关的数据。claimName底部的声明应与你在步骤 1 中创建的 PVC 的名称相对应。
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-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 上部署 MySQL 数据库实例。
3. Kubernetes部署WordPress教程:为数据库创建服务配置 YAML 。
nano mysql-service.yaml
该文件指定 WordPress 用于连接到服务的端口:
apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None
保存文件并退出。
4. 现在为 WordPress 本身创建相同的 YAML 文件。从存储分配开始:
nano wordpress-storage.yaml
该示例使用以下配置:
apiVersion: v1
kind: PersistentVolume
metadata:
  name: wp-pv
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wp-pv-claim
  labels:
    app: wordpress
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
保存文件并退出。
5. 创建部署文件:
nano wordpress-deployment.yaml
Kubernetes如何部署WordPress实例?该文件提供了Docker 镜像并将 WordPress 部署与 PVC 连接起来:
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:5.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
保存文件并退出。
6. 创建服务 YAML:
nano wordpress-service.yaml
该示例使用 LoadBalancer 来公开服务:
apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  ports:
    - port: 80
  selector:
    app: wordpress
    tier: frontend
  type: LoadBalancer
保存文件并退出。
7. 创建kustomization.yaml 文件,该文件将用于轻松应用配置:
nano kustomization.yaml
该文件包含两部分:
secretGenerator生成将登录信息传递给容器的Kubernetes 密钥。resources部分列出了将参与配置的所有文件。列出你在前面的步骤中创建的文件。
secretGenerator:
- name: mysql-pass
  literals:
  - password=test123
resources:
  - mysql-storage.yaml
  - mysql-deployment.yaml
  - mysql-service.yaml
  - wordpress-storage.yaml
  - wordpress-deployment.yaml
  - wordpress-service.yaml
保存文件并退出。
8. 使用以下命令应用kustomization.yaml 中列出的文件:
kubectl apply -k ./
系统确认已成功创建秘密、服务、PV、PVC 和部署:

9. 检查 Pod 和部署是否准备就绪:
kubectl get all

10.如果你使用minikube,打开另一个终端窗口并启动minikube隧道来提供负载均衡模拟:
minikube tunnel
仿真运行后,最小化窗口并返回上一个窗口。
11. 如何在Kubernetes上部署WordPress实例?键入以下命令以公开你将用于访问已部署的 WordPress 实例的服务 URL:
minikube service wordpress-service --url
该 URL 显示为命令输出:

注意:如果你不使用 minikube,请使用步骤 9中表中的外部 IP 地址和 WordPress 服务的端口。
12. 复制 URL 并将其粘贴到你的 Web 浏览器中。WordPress 安装开始。

Kubernetes部署WordPress教程结论
Kubernetes如何部署WordPress实例?阅读本教程后,你将学习两种在 Kubernetes 上部署 WordPress 实例的方法。如果你想了解有关管理 WordPress 的更多信息,请阅读25 条性能和优化技巧来加速你的 WordPress。

