创建WordPress发布到K8s
# WordPress 简介
WordPress 是使用 PHP 开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的环境中架设属于自己的网站。本文以创建一个 Wordpress 应用 (opens new window) 为例,以创建 KubeSphere 应用的形式将 Wordpress 的组件(MySQL 和 Wordpress)创建后发布至 Kubernetes 中,并在集群外访问 Wordpress 服务。
一个完整的 Wordpress 应用会包括以下 Kubernetes 对象,其中 MySQL 作为后端数据库,Wordpress 本身作为前端提供浏览器访问。
每个程序有自己的pvc。
# 前提条件
已创建了企业空间、项目和普通用户 project-regular
账号(该已账号已被邀请至示例项目),并开启了外网访问,请参考 多租户管理快速入门 (opens new window)。
# 预估时间
约 10 分钟。
# 创建密钥
MySQL 的环境变量 MYSQL_ROOT_PASSWORD
即 root 用户的密码属于敏感信息,不适合以明文的方式表现在步骤中,因此以创建密钥的方式来代替该环境变量。创建的密钥将在创建 MySQL 的容器组设置时作为环境变量写入。
# 创建 MySQL 密钥
- 以项目普通用户
project-regular
登录 KubeSphere,在当前项目下左侧菜单栏的 配置中心 选择 密钥,点击 创建。
- 填写密钥的基本信息,完成后点击 下一步。
- 名称:作为 MySQL 容器中环境变量的名称,可自定义,例如
mysql-secret
- 别名:别名可以由任意字符组成,帮助您更好的区分资源,例如
MySQL 密钥
- 描述信息:简单介绍该密钥,如
MySQL 初始密码
- 密钥设置页,填写如下信息,完成后点击 创建。
- 类型:选择
默认
(Opaque) - Data:Data 键值对填写
MYSQL_ROOT_PASSWORD
和123456
- 去docker hub中找到它的环境变量,所以才要填上MYSQL_ROOT_PASSWORD
# 创建 WordPress 密钥
同上,创建一个 WordPress 密钥,Data 键值对填写 WORDPRESS_DB_PASSWORD
和 123456
。此时两个密钥都创建完成。
# 创建存储卷
- 在当前项目下左侧菜单栏的
存储卷
,点击创建
,基本信息如下。
- 名称:wordpress-pvc
- 别名:Wordpress 持久化存储卷
- 描述信息:Wordpress PVC
- 完成后点击
下一步
,存储类型默认 local,访问模式和存储卷容量也可以使用默认值,点击下一步
,直接创建即可。
同理,也创建mysql-pvc
创建完,2个pvc都是等待中,等有人使用才会挂载它。
# 创建应用
# 1、在左侧菜单栏选择 应用负载 → 应用→ 自制应用,然后点击 部署新应用。
- 应用名称:必填,起一个简洁明了的名称,便于用户浏览和搜索,例如填写
wordpress-application
- 描述信息:简单介绍该工作负载,方便用户进一步了解
# 2、添加mysql组件。
- 名称: mysql
- 组件版本:v1
- 别名:MySQL 数据库
- 负载类型:选择
有状态服务
- 有状态服务:需要持久化存储的
- 无状态服务:不需要持久化存储的
# 2.1、添加容器镜像
点击 添加容器镜像,镜像填写 mysql:5.6
(应指定镜像版本号),然后按回车键或点击 DockerHub,点击 使用默认端口
。
相当于dokcer中的3306暴露到服务的3306端口
# 2.2、设置资源
提示: 注意,在高级设置
中确保内存限制 ≥ 1000 Mi,否则可能 MySQL 会因内存 Limit 不够而无法启动。
# 2.3、配置环境变量
下滑至环境变量,在此勾选 环境变量
,然后选择 引用配置文件或密钥
,名称填写为 MYSQL_ROOT_PASSWORD
(这个名称必须是docker hub中指定的),下拉框中选择密钥为 mysql-secret
和 MYSQL_ROOT_PASSWORD
。
完成后点击右下角 √
。
# 2.4、添加存储卷
官方文档是从头到尾新增一个,这里我们选择刚才创建的PV,
- 挂载路径:存储卷在容器内的挂载路径,选择
读写
,路径填写/var/lib/mysql
- 这个路径也是要看docker hub中的设置,其实就是类似自己运行docker的时候指定挂载目录
完成后点击 √
。
# 3、添加wordpress组件
刚才添加了mysql组件,接下来添加wordpress组件。
- 名称: wordpress
- 组件版本:v1
- 别名:Wordpress前端
- 负载类型:默认
无状态服务
# 3.1、指定容器地址
点击 添加容器镜像,镜像填写 wordpress:4.8-apache
(应指定镜像版本号),然后按回车键或点击 DockerHub,点击 使用默认端口
。
# 3.2、设置资源
资源使用默认即可
# 3.3、配置环境变量
这里需要添加两个环境变量:
- 点击 引用配置文件或密钥,名称填写
WORDPRESS_DB_PASSWORD
,选择在第一步创建的配置 (Secret)wordpress-secret
和WORDPRESS_DB_PASSWORD
。 - 点击 添加环境变量,名称填写
WORDPRESS_DB_HOST
,值填写mysql
,对应的是上一步创建 MySQL 服务的名称,否则无法连接 MySQL 数据库。
完成后点击 √
。
# 3.4 、添加存储卷
点击 添加存储卷
,选择已有存储卷 wordpress-pvc
,访问模式改为 读写
,容器挂载路径 /var/www/html
。完成后点击 √
。
# 4、创建应用
检查 WordPress 组件信息无误后,再次点击 √
,此时 MySQL 和 WordPress 组件信息都已添加完成,点击 创建
。
# 监控应用
点击应用就可以看到更新中
点击容器组,就可以看到容器在创建中
随意点击一个容器,然后点击事件,就可以看得到它的初始化过程:
当容器组都准备好,可以去存储卷看到都是准备就绪
# 查看应用资源
工作负载
下查看 部署 和 有状态副本集 的状态,当它们都显示为 运行中
,说明 WordPress 应用创建成功。
# 外网访问
访问 Wordpress 服务前,查看 wordpress 服务,将外网访问设置为 NodePort
。
点击 更多操作
→ 编辑外网访问
,选择 NodePort
,然后该服务将在每个节点打开一个节点端口,通过 点击访问
即可在浏览器访问 WordPress。
提示:此时也可以通过工具箱的 web kubctl 查看当前项目中 Wordpress 应用正在运行的所有资源。
# 访问 Wordpress
以上访问将通过 http://{$节点 IP}:{$节点端口 NodePort}
访问 WordPress 博客网站。
至此,您已经熟悉了如何通过创建一个 KubeSphere 应用的方式,通过快速添加多个组件来完成一个应用的构建,最终发布至 Kubernetes。这种创建应用的形式非常适合微服务的构建,只需要将各个组件容器化以后,即可通过这种方式快速创建一个完整的微服务应用并发布 Kubernetes。
同时,这种方式还支持用户以 无代码侵入的形式开启应用治理,针对 微服务、流量治理、灰度发布与 Tracing 等应用场景,开启应用治理后会在每个组件中以 SideCar 的方式注入 Istio-proxy 容器来接管流量,后续将以一个 Bookinfo 的示例来说明如何在创建应用中使用应用治理。