示例:使用持久卷部署WordPress和MySQL
浏览 0
扫码
分享
2019-10-27 17:16:54
origin_last_modified:2019-03-25 17:06(#13174) 译文原文 英文原文
版权声明:本文为 码农文档 原创译文,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接和本声明。
公告:如果您也想加入翻译队伍,或者您有相关中文文档想要贡献给大家,请联系coderdocument@163.com ,谢谢!
本教程向你展示了如何使用Minikube部署WordPress站点和MySQL数据库。两个应用程序都使用持久卷和持久卷声明来存储数据。
持久卷(PV)是集群中的一段存储,由管理员手动提供,或由Kubernetes使用StorageClass动态提供。持久卷声明(PVC)是用户对存储的请求,可以通过PV来实现。持久卷和持久卷声明独立于Pod的生命周期,它们在重新启动、重新调度甚至删除Pod时也能保存数据。
@alert_danger@警告:该部署不适合生产环境,因为它使用单实例WordPress和MySQL pod。考虑使用WordPress Helm Chart在生产环境中部署WordPress。
@alert_info@注意:本教程中提供的文件使用GA部署API,并且只适用于kubernetes v1.9及更高版本。如果你希望在Kubernetes的早期版本中使用本教程,请适当地更新API版本,或者参考本教程的早期版本。
目标
创建持久卷声明和持久卷
创建一个拥有以下内容的 kustomization.yaml文件:
Secret 生成器
MySQL 资源配置
WordPress 资源配置
通过 kubectl apply -k ./应用kustomization目录
清理
开始之前
你需要有一个Kubernetes集群,并且必须配置kubectl命令行工具来与集群通信。如果你还没有集群,你可以使用Minikube创建一个集群,或者你可以使用一个Kubernetes游乐场:
要检查版本,请输入kubectl version。
本页所示的示例适用于kubectl 1.14及以上版本。
下载以下配置文件:
创建持久卷声明和持久卷
MySQL和Wordpress都需要一个持久卷来存储数据。它们的持久卷声明将在部署步骤中创建。
许多集群环境都安装了默认的StorageClass。如果在持久卷声明中没有指定StorageClass,则使用集群的默认StorageClass。
创建持久卷声明时,会根据StorageClass配置动态供应一个持久卷。
@alert_danger@警告:在本地集群中,默认的StorageClass使用hostPath供应者。hostPath卷只适合于开发和测试。对于hostPath卷,数据驻留在Pod调度的节点上的/tmp中,不会在节点之间移动。如果Pod死亡并被调度到集群中的另一个节点,或者节点被重新启动,数据将丢失。
@alert_info@注意:如果启动一个需要使用hostPath供应者的集群,则必须在控制器管理器组件中设置--enable-hostpath-provisioner 选项。
@alert_info@注意:如果您有一个Kubernetes集群运行在谷歌Kubernetes引擎上,请遵循以下指南。
创建kustomization.yaml
添加Secret生成器
Secret是存储敏感数据(如密码或密钥)的对象。从v1.14开始,kubectl就支持使用kustomization文件管理Kubernetes对象。你可以通过 kustomization.yaml中的生成器创建一个Secret。
在来自以下命令的kustomization.yaml中添加一个Secret生成器。你需要将 YOUR_PASSWORD 替换为你想要使用的密码。
为MySQL和WordPress添加资源配置
下面的清单描述了一个单实例MySQL部署。MySQL容器将持久卷挂载在/var/lib/mysql。 MYSQL_ROOT_PASSWORD环境变量根据Secret设置数据库密码。
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
labels:
app: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
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
下载MySQL部署配置文件。
curl -LO https://k8s.io/examples/application/wordpress/mysql-deployment.yaml
下载WordPress配置文件。
curl -LO https://k8s.io/examples/application/wordpress/wordpress-deployment.yaml
把它们添加至 kustomization.yaml文件:
cat <>./kustomization.yaml
resources:
- mysql-deployment.yaml
- wordpress-deployment.yaml
EOF
应用与验证
kustomization.yaml 包含用于部署WordPress站点和MySQL数据库的所有资源。你可以通过以下方式应用该目录:
kubectl apply -k ./
现在你可以验证所有对象是否存在。
运行以下命令,验证Secret是否存在:
kubectl get secrets
输出应该如下:
NAME TYPE DATA AGE
mysql-pass-c57bb4t7mf Opaque 1 9s
验证是否已动态供应了持久卷。
kubectl get pvc
@alert_info@注意:配置和绑定PV可能需要几分钟的时间。
输出应该如下:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mysql-pv-claim Bound pvc-8cbd7b2e-4044-11e9-b2bb-42010a800002 20Gi RWO standard 77s
wp-pv-claim Bound pvc-8cd0df54-4044-11e9-b2bb-42010a800002 20Gi RWO standard 77s
运行以下命令验证Pod是否正在运行:
kubectl get pods
@alert_info@注意:Pod变为运行状态可能需要几分钟的时间。
输出应该如下:
NAME READY STATUS RESTARTS AGE
wordpress-mysql-1894417608-x5dzt 1/1 Running 0 40s
通过运行以下命令来验证服务是否正在运行:
kubectl get services wordpress
输出应该如下:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
wordpress ClusterIP 10.0.0.89 80:32406/TCP 4m
@alert_info@注意:Minikube只能通过NodePort暴露服务。EXTERNAL-IP总是处于状态。
运行以下命令获取WordPress服务的IP地址:
minikube service wordpress --url
输出应该如下:
http://1.2.3.4:32406
复制IP地址,并在浏览器中加载页面以查看站点。
你应该会看到WordPress设置页面类似于下面的截图。
@alert_info@注意:不要把你的WordPress安装放在这个页面上。如果其他用户发现它,他们可以在你的实例上建立一个网站,并使用它来提供恶意内容。通过创建用户名和密码安装WordPress,或者删除实例。
清理
运行以下命令删除Secret、部署、服务和持久卷声明:
kubectl delete -k ./
接下来
了解有关内省与调试的更多信息
了解有关作业的更多信息
了解有关端口转发的更多信息