目的

本文以创建一个部署 (Deployment) 为例,部署一个无状态的 Wordpress 应用,基于 示例二 的 MySQL 应用最终部署一个外网可访问的 Wordpress 网站。Wordpress 连接 MySQL 数据库的密码将以 配置 (ConfigMap) 的方式进行创建和保存。

前提条件

预估时间

约 15 分钟。

操作示例

部署 Wordpress

第一步:创建配置

Wordpress 的环境变量 WORDPRESS_DB_PASSWORD 即 Wordpress 连接数据库的密码,为演示方便,以创建配置 (ConfigMap) 的方式来代替该环境变量。创建的配置将在创建 Wordpress 的容器组设置时作为环境变量写入。

1.1. 以项目普通用户 project-regular 登录 KubeSphere,在当前项目下左侧菜单栏的 配置中心 选择 配置,点击 创建配置

示例四 - 部署 Wordpress - 图1

1.2. 填写配置的基本信息,完成后点击 下一步

  • 名称:作为 Wordpress 容器中环境变量的名称,填写 wordpress-configmap
  • 别名:支持中文,帮助您更好的区分资源,比如 连接 MySQL 密码
  • 描述信息:简单介绍该 ConfigMap,如 MySQL password

基本信息

1.3. ConfigMap 是以键值对的形式存在,此处键值对设置为 WORDPRESS_DB_PASSWORD123456,完成后点击 创建

ConfigMap 设置

第二步:创建存储卷

2.1. 在当前项目下左侧菜单栏的 存储卷,点击创建,基本信息如下。

  • 名称:wordpress-pvc
  • 别名:Wordpress 持久化存储卷
  • 描述信息:Wordpress PVC

创建存储卷

2.2. 完成后点击 下一步,存储卷设置中,参考如下填写:

  • 存储类型:选择集群中已创建的存储类型,例如 Local
  • 访问模式:选择单节点读写 (RWO)
  • 存储卷容量:默认 10 Gi

存储卷设置

2.3. 标签默认为 app: wordpress-pvc,点击 「创建」。

设置标签

2.4. 点击左侧菜单中的 存储卷,查看存储卷列表,可以看到存储卷 wordpress-pvc 已经创建成功,状态是 “准备就绪”,可挂载至工作负载。

若存储类型为 Local,那么该存储卷在被挂载至工作负载之前都将显示创建中,这种情况是正常的,因为 Local 目前还不支持存储卷动态配置 (Dynamic Volume Provisioning) ,挂载后状态将显示 “准备就绪”。

创建存储卷

第三步:创建部署

在左侧菜单栏选择 工作负载 → 部署,进入列表页,点击 创建部署

创建部署

第四步:填写基本信息

基本信息中,参考如下填写,完成后点击 下一步

  • 名称:必填,起一个简洁明了的名称,便于用户浏览和搜索,比如 wordpress
  • 别名:可选,支持中文帮助更好的区分资源,如 Wordpress 网站
  • 描述信息:简单介绍该工作负载,方便用户进一步了解

填写基本信息

第五步:容器组模板

5.1. 点击 添加容器。容器组模板中,名称可自定义,镜像填写 wordpress:4.8-apache,CPU 和内存此处暂不作限定,将使用在创建项目时指定的默认值。

示例四 - 部署 Wordpress - 图10

5.2. 下滑至服务设置,对 端口环境变量 进行设置,其它项暂不作设置。参考如下填写。

  • 端口:名称可自定义如 port,选择 TCP 协议,填写 Wordpress 在容器内的端口 80
  • 环境变量:这里需要添加两个环境变量
    • 点击 引用配置中心,名称填写 WORDPRESS_DB_PASSWORD,选择在第一步创建的配置 (ConfigMap) wordpress-configmapWORDPRESS_DB_PASSWORD
    • 点击 添加环境变量,名称填写 WORDPRESS_DB_HOST,值填写 mysql-service,对应的是 示例一 - 部署 MySQL 创建 MySQL 服务的名称,否则无法连接 MySQL 数据库,可在服务列表中查看其服务名。

容器组模板

5.3. 完成后点击 保存,点击 下一步

第六步:存储卷设置

6.1. 此处选择 添加已有存储卷,选择第二步创建的存储卷 wordpress-pvc

存储卷设置

6.2. 设置存储卷的挂载路径,其中挂载选项选择 读写,挂载路径为 /var/www/html,保存后点击 下一步

存储卷设置

第七步:查看部署

7.1. 标签保留默认值,节点选择器此处暂不作设置,点击 创建,部署创建完成。

7.2. 创建完成后,部署的状态为 “更新中” 是由于创建后需要拉取 wordpress 镜像并创建容器 (大概一分钟左右),可以看到容器组的状态是 “ContainerCreating”,待部署创建完成后,状态会显示 “运行中”。

部署详情

7.3. 查看创建的部署 Wordpress,可以看到其状态显示运行中,下一步则需要为 Wordpress 创建服务,最终暴露给外网访问。

创建成功

第八步:创建服务

8.1. 在当前项目中,左侧菜单栏选择 网路与服务 → 服务,点击 创建

创建服务

8.2. 基本信息中,信息填写如下,完成后点击 下一步

  • 名称:必填,起一个简洁明了的名称,便于用户浏览和搜索,比如 wordpress-service
  • 别名和描述信息:如 Wordpress 服务

创建服务

8.3. 服务设置参考如下填写,完成后点击 下一步

  • 服务类型:选择第一项 通过集群内部IP来访问服务 Virtual IP
  • 选择器:点击 指定工作负载 可以指定上一步创建的部署 Wordpress,指定后点击 保存
  • 端口:端口名称可自定义如 port,服务的端口和目标端口都填写 TCP 协议的 80 端口
  • 会话亲和性:None,完成参数设置,选择下一步

说明: 若有实现基于客户端 IP 的会话亲和性的需求,可以在会话亲和性下拉框选择 “ClientIP” 或在代码模式将 service.spec.sessionAffinity 的值设置为 “ClientIP”(默认值为 “None”),该设置可将来自同一个 IP 地址的访问请求都转发到同一个后端 Pod。

服务类型 服务设置

8.4. 本示例标签保留默认值,选择 下一步

8.5. 服务暴露给外网访问支持 NodePort 和 LoadBalancer,这里服务的访问方式选择 NodePort

设置 NodePort

8.6. 点击 创建,wordpress-service 服务可创建成功。注意,wordpress-service 服务生成了一个节点端口 32689

查看服务

注意:若需要在外网访问,可能需要绑定公网 EIP 并配置端口转发和防火墙规则。在端口转发规则中将内网端口 32689 转发到源端口 32689,然后在防火墙开放这个源端口,保证外网流量可以通过该端口,外部才能够访问。例如在 QingCloud 云平台进行上述操作,则可以参考 云平台配置端口转发和防火墙

访问 Wordpress

设置完成后,WordPress 就以服务的方式通过 NodePort 暴露到集群外部,可以通过 http://{$公网 IP}:{$节点端口 NodePort} 访问 WordPress 博客网站。

示例四 - 部署 Wordpress - 图22

至此,您已经熟悉了部署 (Deployments) 和有状态副本集 (Statefulsets) 、密钥 (Secret)、配置 (ConfigMap) 的基本功能使用,关于部署和有状态副本集的各项参数释义,详见 部署有状态副本集