使用 Yaml 部署 Wordpress 和 Mysql

本示例描述了如何通过一组 Yaml 声明式配置文件,在 Rainbond 上安装 WordPress 和 MySQL。

这两个组件:

  • 分别使用 Deployment 和 StatefulSet 两种 Workload 资源部署。
  • 使用 PersistentVolumes 和 PersistentVolumeClaims 保存数据。
  • 通过 Service 完成彼此间通信。
  • 通过 Sercet 实现环境变量的加密获取。

使用 Yaml 部署 Wordpress 和 Mysql - 图1caution

警告: 这种部署并不适合生产场景,因为它使用的是单实例 WordPress 和 MySQL Pod。 在生产场景中,请考虑使用 WordPress Helm Chart 部署 WordPress。

教程目标

  • 通过 Yaml 文件将 Workload 类资源部署到 Rainbond 中,包括 WordPress 和 MySQL。
  • 在应用中的 应用 > k8s资源 处管理非 Workload 类资源,包括 Service 和 Sercet。
  • 在组件中的 其他设置 > Kubernetes属性 处管理 Workload 的各种属性,包括 labels、volumes、volumeMounts 和取自其他来源的 env。
  • 在组件中的 环境设置 处管理可以被 Rainbond 直接转化的 Workload 属性,包括自定义环境变量的配置。

准备开始

wordpress-depoyment.yaml,其中定义了:

  • Deployment: wordpress
  • Service: wordpress
  • PersistentVolumeClaim: wp-pv-claim

wordpress-depoyment.yaml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: wordpress
  5. labels:
  6. app: wordpress
  7. spec:
  8. ports:
  9. - port: 80
  10. selector:
  11. app: wordpress
  12. tier: frontend
  13. type: LoadBalancer
  14. ---
  15. apiVersion: v1
  16. kind: PersistentVolumeClaim
  17. metadata:
  18. name: wp-pv-claim
  19. labels:
  20. app: wordpress
  21. spec:
  22. accessModes:
  23. - ReadWriteOnce
  24. resources:
  25. requests:
  26. storage: 20Gi
  27. ---
  28. apiVersion: apps/v1
  29. kind: Deployment
  30. metadata:
  31. name: wordpress
  32. labels:
  33. app: wordpress
  34. spec:
  35. selector:
  36. matchLabels:
  37. app: wordpress
  38. tier: frontend
  39. strategy:
  40. type: Recreate
  41. template:
  42. metadata:
  43. labels:
  44. app: wordpress
  45. tier: frontend
  46. spec:
  47. containers:
  48. - image: wordpress:4.8-apache
  49. name: wordpress
  50. env:
  51. - name: WORDPRESS_DB_HOST
  52. value: wordpress-mysql
  53. - name: WORDPRESS_DB_PASSWORD
  54. valueFrom:
  55. secretKeyRef:
  56. name: mysql-pass
  57. key: password
  58. ports:
  59. - containerPort: 80
  60. name: wordpress
  61. volumeMounts:
  62. - name: wordpress-persistent-storage
  63. mountPath: /var/www/html
  64. volumes:
  65. - name: wordpress-persistent-storage
  66. persistentVolumeClaim:
  67. claimName: wp-pv-claim

mysql-statefulset.yaml,其中定义了:

  • StatefulSet: wordpress-mysql
  • Service: wordpress-mysql
  • Secret: mysql-pass

mysql-statefulset.yaml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: wordpress-mysql
  5. labels:
  6. app: wordpress
  7. spec:
  8. ports:
  9. - port: 3306
  10. selector:
  11. app: wordpress
  12. tier: mysql
  13. clusterIP: None
  14. ---
  15. apiVersion: apps/v1
  16. kind: StatefulSet
  17. metadata:
  18. name: wordpress-mysql
  19. labels:
  20. app: wordpress
  21. spec:
  22. serviceName: wordpress-mysql
  23. selector:
  24. matchLabels:
  25. app: wordpress
  26. tier: mysql
  27. template:
  28. metadata:
  29. labels:
  30. app: wordpress
  31. tier: mysql
  32. spec:
  33. containers:
  34. - image: mysql:5.6
  35. name: mysql
  36. env:
  37. - name: MYSQL_ROOT_PASSWORD
  38. valueFrom:
  39. secretKeyRef:
  40. name: mysql-pass
  41. key: password
  42. ports:
  43. - containerPort: 3306
  44. name: mysql
  45. volumeMounts:
  46. - name: mysql-data
  47. mountPath: /var/lib/mysql
  48. volumeClaimTemplates:
  49. - metadata:
  50. name: mysql-data
  51. spec:
  52. accessModes:
  53. - ReadWriteOnce
  54. resources:
  55. requests:
  56. storage: 20Gi
  57. ---
  58. apiVersion: v1
  59. kind: Secret
  60. metadata:
  61. name: mysql-pass
  62. type: Opaque
  63. data:
  64. password: cGFzc3dvcmQ=

部署操作

  1. 工作空间 进入指定的团队,通过点击 新建 > Kubernetes YAML Helm 即可进入文件上传页面。

  2. 选择所属应用,或新建应用。

  3. 从本地计算机中上传准备好的 Yaml 文件,支持批量上传。

  4. 等待文件列表中出现所上传的 Yaml 文件。

  5. 点击 确认创建

  6. Rainbond 将展示从 Yaml 中解析出的资源列表,对于上述 Wordpress 建站系统的 Yaml 而言,用户应该可以看到列表中包含以下内容,确认无误后,可以点击 下一步

资源列表

  • Deployment: wordpress
  • StatefulSet: wordpress-mysql
  • Service: wordpress-mysql wordpress
  • PVC: wp-pv-claim
  • Secret: mysql-pass
  • ServiceAccount: wordpress-mysql wordpress
  1. 在这个页面中,Rainbond 更加细化的展示对于每一种资源的处理方式,此页面无法编辑,确认无误后点击 部署

高级资源

  • wordpress-mysql: 作为 StatefulSet 类型的 Workload 转化为组件,识别到的规格定义转化为 Rainbond 可配置的图形化选项或特殊属性。
  • wordpress: 作为 Deployment 类型的 Workload 转化为组件,识别到的规格定义转化为 Rainbond 可配置的图形化选项或特殊属性。
  • k8s 资源: 收录管理 Service 、 Sercet 、PersistentVolumeClaim 资源。
  1. wordpress 与 wordpress-mysql 已经被转化成为 Rainbond 中的组件,并且完成了构建过程,目前组件尚未启动,用户在此时可以进行管理操作.

推荐操作

  • 存储转换: 对于 Yaml 中定义的 PV、PVC 等资源,会在组件的 其他设置 > Kubernetes属性 中体现为 volumeMounts volumes,此处建议将一般性的数据持久化配置 volumeMounts volumes 定义为 Rainbond 组件的存储,删除 volumeMounts volumes 中的对应存储记录,并在 存储 > 存储设置 > 添加存储 中加入需要被持久化的路径即可。

  • 开启对外服务: Rainbond 提供了4/7层网关,可以方便的为组件提供对外服务入口,用户只需要在 端口 中为指定端口指定 端口协议 打开 对外服务 即可生成可供访问的 Ip:Port 或域名类型的访问地址。

  1. 启动所有的组件。

验证

访问 wordpress 组件的对外服务地址,即可进入 wordpress 的配置页面,开始你的建站之旅。

管理组件 Kubernetes 属性

参考文档 kubernetes属性 了解目前 Rainbond 所支持的多种规格定义的配置方式。

管理应用中的k8s资源

参考文档 k8s资源操作 了解如何管理非 Workload 类型的资源。