• 目的
  • 前提条件
  • 预估时间
  • 操作示例
    • 部署 Wordpress
      • 第一步:创建配置
      • 第二步:创建存储卷
      • 第三步:创建部署
      • 第四步:填写基本信息
      • 第五步:容器组模板
      • 第六步:存储卷设置
      • 第七步:查看部署
      • 第八步:创建服务
    • 访问 Wordpress

    目的

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

    前提条件

    • 已创建了有状态副本集 MySQL,若还未创建请参考上一篇 部署 MySQL;
    • 使用项目管理员 project-admin 邀请项目普通用户 project-regular 加入项目并授予 operator 角色,参考 多租户管理快速入门 - 邀请成员 。

    预估时间

    约 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) 的基本功能使用,关于部署和有状态副本集的各项参数释义,详见 部署 和 有状态副本集。