
# 在CCE集群中部署WordPress有状态工作负载
有状态工作负载（StatefulSet）是Kubernetes中用于管理有状态应用的一种工作负载类型。与无状态工作负载不同，有状态工作负载需要保持数据的一致性和持久性，且每个应用实例具有独立的标识符，需要按顺序部署和扩展。典型的有状态应用场景包括数据库（如MySQL）、消息队列（如Kafka）等。本文将使用WordPress博客应用及MySQL数据库作为示例，在CCE集群中部署有状态工作负载。
WordPress是使用PHP语言和MySQL数据库开发的博客平台，并逐步演化成一款内容管理系统软件，您可以在CCE集群中使用容器搭建属于自己的博客网站。更多关于WordPress的信息请通过[WordPress官方网站](https://wordpress.org/)进行了解。
WordPress一般配合数据库（本文中使用MySQL）一起使用，WordPress作为内容管理程序运行，而数据库则用于存储网站数据。在容器化部署时，WordPress和MySQL通常会分别运行在两个不同的容器中，并通过集群内的Service进行访问。
![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002053939981.png "点击放大")
#### 介绍视频
<video controls="controls" preload="none" id="object1379241944620" class="idp-external-video" src="https://res-video.hc-cdn.com/cloudbu-site/china/zh-cn/video/cce/wordpress_2024.mp4" title="Wordpress" poster="https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002324269118.jpg" height="340.0000" width="600.0000"></video>
#### 操作流程
| 操作步骤                                                    | 说明                                               |
|:---|:---|
| [准备工作]                | 您需要注册华为账号，并为账户充值。                                |
| [步骤一：首次开通CCE并进行授权]   | 当您的账号在当前区域中首次使用CCE时，您需要为CCE进行授权。                 |
| [步骤二：创建集群]         | 您需要在CCE服务中创建一个集群，以提供Kubernetes服务。                |
| [步骤三：在集群中创建节点池和节点] | 您需在集群中创建节点，即可在节点上运行您的容器化应用。                      |
| [步骤四：部署MySQL]         | 在集群中创建MySQL工作负载，并为其创建一个集群内部访问服务，可供WordPress应用访问。 |
| [步骤五：部署WordPress]     | 在集群中创建WordPress工作负载，并为其创建一个可供公网访问的服务。            |
| [步骤六：访问WordPress]    | 您可以从公网访问刚刚创建的WordPress网站，开始您的博客之旅。               |
| [后续操作：释放资源]         | 如果您在完成实践后不需要继续使用集群，请及时清理资源以免产生额外扣费。              |
   
 #### 准备工作
- 在开始操作前，请您先注册华为账号并完成实名认证，详情请参见[注册华为账号并开通华为云](https://support.huaweicloud.com/usermanual-account/account_id_001.html)和[个人实名认证](https://support.huaweicloud.com/usermanual-account/zh-cn_topic_0077914254.html)。
- 请您保证账户有足够的资金，以免创建集群失败，具体操作请参见[账户充值](https://support.huaweicloud.com/usermanual-billing/bills-topic_30000002.html)。
 
 #### 步骤一：首次开通CCE并进行授权
由于CCE在运行中对计算、存储、网络以及监控等各类云服务资源都存在依赖关系，因此当您首次登录CCE控制台时，CCE将自动请求获取当前区域下的云资源权限，从而更好地为您提供服务。如果您在当前区域已完成授权，可忽略本步骤。
1. 使用华为账号登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)。
2. 单击控制台左上角的![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002052664929.png "点击放大")，选择区域。
3. 在首次登录某个区域的CCE控制台时将跳出"授权说明"，请您在仔细阅读后单击"确定"。 
   当您同意授权后，CCE将在IAM中创建名为"cce_admin_trust"委托，统一对您的其他云服务资源进行操作，并且授予其Tenant Administrator权限。Tenant Administrator拥有除IAM管理外的全部云服务管理员权限，用于对CCE所依赖的其他云服务资源进行调用，且该授权仅在当前区域生效。您可前往"统一身份认证服务 IAM \> 委托"页签，单击"cce_admin_trust"查看各区域的授权记录。关于资源委托详情，您可参考[委托](https://support.huaweicloud.com/usermanual-iam/iam_06_0004.html)进行了解。
   由于CCE对其他云服务有许多依赖，如果没有Tenant Administrator权限，可能会因为某个服务权限不足而影响CCE功能的正常使用。因此在使用CCE服务期间，请不要自行删除或者修改"cce_admin_trust"委托。
   ![](https://support.huaweicloud.com/qs-cce/public_sys-resources/note_3.0-zh-cn.png)
   为了提高委托安全性，CCE根据对其他云服务的依赖对"cce_admin_trust"委托权限进行了重新设计，新的委托权限已不再包含Tenant Administrator权限。当前该功能仅在部分局点支持，若您的账号下没有小于v1.21版本的集群，则控制台会提示权限变化，需要您重新授权。重新授权后会将CCE依赖的各项云服务权限添加到"cce_admin_trust"委托，并删除"cce_admin_trust"中的Tenant Administrator权限。
   创建cce_admin_trust委托时将会自动创建名为"CCE admin policies"的自定义策略，请勿删除该策略。
   
   
 
 #### 步骤二：创建集群
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击"购买集群"。
2. 配置集群基础参数。 
   本示例中仅解释必要参数，其余大多数配置可保留默认值。关于配置参数的详细说明请参见[创建集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0028.html)。
   ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002052566369.png "点击放大")
   
   
   | 参数            | 示例                 | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   |:---|:---|:---|
   | 集群类型          | **CCE Standard集群** | CCE支持多种类型的集群创建，以满足您各种业务需求，可为您提供高可靠、安全的商业级容器集群服务。 根据需求选择"CCE Standard集群"或"CCE Turbo集群"。 - CCE Standard集群：标准版本集群，提供高可靠、安全的商业级容器集群服务。  - CCE Turbo集群：拥有更高性能的云原生网络，提供云原生混部调度能力，可实现更高的资源利用率和更广的全场景覆盖。   关于集群类型差异详情，请参见[集群类型对比](https://support.huaweicloud.com/usermanual-cce/cce_10_0342.html)。       |
   | 计费模式          | **按需计费**           | 选择集群的计费模式。 - 包年/包月：预付费模式，按订单的购买周期计费，适用于可预估资源使用周期的场景，价格比按需计费模式更优惠。 选择该计费模式时，需要设置"购买时长"并选择是否自动续费（按月购买时自动续费周期为1个月，按年购买时自动续费周期则为1年）。   - 按需计费：后付费模式，按资源的实际使用时长计费，可以随时开通/删除资源。   更多计费相关信息请参见[计费模式概述](https://support.huaweicloud.com/price-cce/cce_03_0003.html)。 |
   | 集群名称          | **cce-test**       | 自定义新建集群的名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   | 企业项目          | **default**        | 企业项目是一种云资源管理方式，企业项目管理服务提供统一的云资源按项目管理，以及项目内的资源管理、成员管理。了解更多企业项目相关信息，请查看[企业管理](https://support.huaweicloud.com/usermanual-em/zh-cn_topic_0123692049.html)。 该参数仅对开通企业项目的企业客户账号显示，不显示时请忽略。                                                                                                                                                                                                                                                                                                                                                                         |
   | 集群版本          | **选择推荐版本，如v1.29**  | 集群安装的Kubernetes软件版本，建议选择最新的商用版本，可为您提供更多稳定可靠的新特性。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | 集群规模          | **50节点**           | 集群可以管理的最大节点数量，请根据业务场景选择。创建完成后支持扩容，不支持缩容。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | 集群 master 实例数 | **3实例（高可用）**       | 选择集群控制平面的节点（master实例）数量。控制平面节点由系统自动托管，会部署Kubernetes集群的管控面组件，如 kube-apiserver，kube-controller-manager，kube-scheduler 等组件。 - 3实例（高可用）：创建3个控制平面节点，确保集群高可用。  - 单实例：您的集群只会创建一个控制平面节点。   集群创建完成后不支持修改。                                                                                                                                            |
      
   
   
3. 配置集群网络参数。 
   ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002234350974.png "点击放大")
   
   
   | 参数           | 示例                        | 参数说明                                                                                                                                                                                             |
   |:---|:---|:---|
   | 虚拟私有云        | **vpc-001**               | 为新建集群选择一个虚拟私有云。 若没有可选虚拟私有云，请单击"新建虚拟私有云"进行创建，完成创建后单击刷新按钮。操作步骤详情请参见[创建虚拟私有云和子网](https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0013935842.html)。 |
   | 默认节点子网       | **subnet-001**            | 选择一个子网，集群中的节点将会使用此子网中的IP。                                                                                                                                                                        |
   | 容器网络模型       | **VPC网络**                 | 支持选择"VPC网络"和"容器隧道网络"，默认可选择"VPC网络"。 不同容器网络模型间的差异请参见[容器网络模型对比](https://support.huaweicloud.com/usermanual-cce/cce_10_0281.html)。                            |
   | 容器网段         | **手动设置网段 \> 10.0.0.0/16** | 用于设置容器使用的网段，支持"手动设置网段"和"默认设置网段"，该网段大小决定了集群中容器的数量上限。                                                                                                                                              |
   | 每节点预留的容器IP个数 | **128**                   | 表示每个节点中可分配的容器IP数量（即alpha.cce/fixPoolMask参数），决定每个节点可创建的Pod的最大数量，具体说明请参见[节点可分配容器IP数说明](https://support.huaweicloud.com/usermanual-cce/cce_10_0348.html#section1)。                                  |
   | 服务网段         | **10.247.0.0/16**         | 为集群配置ClusterIP地址的范围，该网段决定了Service资源数量的上限，且创建后不可修改。                                                                                                                                               |
      
   
   
4. 单击"下一步：插件选择"，选择创建集群时需要安装的插件。 
   本示例中，仅选择默认安装的必选插件。
   ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002052693869.png "点击放大")
   
   
   
5. 单击"下一步：插件配置"，默认插件可无需配置。
6. 单击"下一步：规格确认"，显示集群资源清单，确认无误后，单击"提交"。 
   等待集群创建成功，创建集群预计需要5-10分钟左右，请耐心等待。
   创建成功后在集群管理下会显示一个运行中的集群，且集群节点数量为0。
   图1集群创建成功   
   ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002032818934.png "点击放大")
   
   
   
 
 #### 步骤三：在集群中创建节点池和节点
1. 单击新建的集群名称进入集群控制台。
2. 在左侧菜单栏中选择"节点管理"，单击右上角"创建节点池"。
3. 配置节点池参数。 
   本示例中仅解释必要参数，其余大多数配置可保留默认值。关于配置参数的详细说明请参见[创建节点池](https://support.huaweicloud.com/usermanual-cce/cce_10_0012.html)。
   ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002016461952.png "点击放大")
   
   | 参数   | 示例                                                                    | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   |:---|:---|:---|
   | 节点类型 | **弹性云服务器-虚拟机**                                                        | 请根据不同的业务诉求选择节点类型，"节点规格"列表中将自动为您筛选该类型下可部署容器服务的规格，供您进一步选择。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | 节点规格 | 通用计算增强型 **4 vCPUs \| 8 GiB** | 请根据业务需求选择相应的节点规格。 - 本场景对内存、GPU等资源无要求，因此建议选择通用计算增强型或通用计算型节点。 - 通用计算增强型：CPU独享型实例，实例间无CPU资源争抢，性能强劲稳定，搭载全新网络加速引擎，提供更高的网络性能。  - 通用计算型：提供基本水平的vCPU性能、平衡的计算、内存和网络资源，同时可根据工作负载的需要实现性能的突增，具有短期发挥更高性能的能力。    - 为保证集群中的组件可以正常运行，建议的节点规格为：vCPU≥4核，内存≥8 GiB。   关于节点规格的详细介绍，请参见[节点规格](https://support.huaweicloud.com/usermanual-cce/cce_10_0719.html)。 |
   | 容器引擎 | **Containerd**                                                        | 请根据业务需要选择相应的容器引擎。不同的容器引擎差别请参见[容器引擎](https://support.huaweicloud.com/usermanual-cce/cce_10_0462.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | 操作系统 | **Huawei Cloud EulerOS 2.0**                                          | 请选择节点对应的操作系统。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 登录方式 | **选择"密码"方式登录，密码请您自行设置。**                                              | - 选择"密码"：用户名默认为"root"，请输入登录节点的密码，并确认密码。 请妥善管理密码，登录节点时需要使用该密码，系统无法获取您设置的密码内容。   - 选择"密钥对"：在选项框中选择用于登录本节点的密钥对，并单击勾选确认信息。 密钥对用于远程登录节点时的身份认证。若没有密钥对，可单击选项框右侧的"创建密钥对"来新建，创建密钥对操作步骤请参见[创建密钥对](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0014250631.html)。                                                                                                                                                                                                                                                                                                                                             |
      
   
   
4. 配置"存储配置"和"网络配置"，本示例中均可保持默认值，您只需要在"网络配置"中勾选确认节点池关联安全组可用，然后单击"下一步: 规格确认"。 
   ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002052701637.png "点击放大")
   
   
   
5. 查看节点规格无误后，阅读页面上的使用说明，确认后单击"提交"。
6. 等待节点池创建成功后，节点池中默认节点数为0，您需要单击节点池所在行的"扩缩容"，为节点池创建节点。 
   ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000001936813336.png "点击放大")
   
   
   
7. 设置本次扩容的节点数量为2，即在节点池中创建2个节点。 
   ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002018040386.png "点击放大")
   
   
   
8. 等待节点创建成功，创建节点预计需要5-10分钟左右，请耐心等待。 
   ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002052706617.png "点击放大")
   
   
   
 
 #### 步骤四：部署MySQL
您可以使用不同的方式部署MySQL工作负载。
- [使用控制台方式]
  1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)。
  
  2. 单击集群进入集群控制台。
  
  3. 在左侧菜单栏选择"工作负载"，单击右上角"创建工作负载"。
  
  4. 填写工作负载基本信息。 
     本示例中填写以下关键参数，其它参数可保持默认。关于配置参数的详细说明请参见[创建有状态负载（StatefulSet）](https://support.huaweicloud.com/usermanual-cce/cce_10_0048.html)。
     ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002054159013.png "点击放大")
     
     | 参数   | 示例                   | 参数说明                                                                                                                                                            |
     |:---|:---|:---|
     | 负载类型 | **有状态负载StatefulSet** | 工作负载是在 Kubernetes 上运行的应用程序。Kubernetes提供了一些内置的工作负载资源，不同工作负载的功能特性及应用场景不同。关于工作负载类型的介绍请参见[工作负载概述](https://support.huaweicloud.com/usermanual-cce/cce_10_0006.html)。 |
     | 负载名称 | **mysql**            | 请填写工作负载的名称。                                                                                                                                                     |
     | 命名空间 | **default**          | 命名空间是Kubernetes集群中的抽象概念，可以将集群中的资源或对象划分为一个组，且不同命名空间中的数据彼此隔离。 集群创建后将默认生成一个default命名空间，您可以直接使用该命名空间。                                |
     | 实例数量 | **1**                | 工作负载中的Pod数量。                                                                                                                                                    |
        
     
     
  
  5. 填写容器基本信息。 
     ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002054089685.png "点击放大")
     
     
     | 参数    | 示例                                 | 参数说明                                                                                                                                                                                                                                                                                                                                              |
     |:---|:---|:---|
     | 镜像名称  | 使用**mysql** 镜像，镜像版本为**8.0**        | 在基本信息中单击"选择镜像"，在弹出的窗口中选择"镜像中心"，并搜索"mysql"，选择mysql镜像，并设置镜像版本。**建议将镜像版本设置为8.0，** 其他版本尚未经过验证，可能存在与WordPress不兼容的问题，具体请参见[常见问题]。                                                                                                                                                                                     |
     | CPU配额 | 申请值为**0.25** Core，限制值为**0.25**Core | - 申请：容器预分配的CPU值，默认0.25Core。  - 限制：容器允许使用的CPU资源最大上限，默认与申请值相同。如果设置限制值大于申请值，则表示在突发场景可临时突破预分配的资源限制。   详细说明请参见[设置容器规格](https://support.huaweicloud.com/usermanual-cce/cce_10_0163.html)。 |
     | 内存配额  | 申请值为**512** MiB，限制值为**512**MiB     | - 申请：容器预分配的内存值，默认512MiB。  - 限制：容器允许使用的内存资源最大上限，默认与申请值相同。如果设置限制值大于申请值，则表示在突发场景可临时突破预分配的资源限制。   详细说明请参见[设置容器规格](https://support.huaweicloud.com/usermanual-cce/cce_10_0163.html)。                  |
        
     
     
  
  6. 在"环境变量"下添加如下环境变量，此处一共需要设置四个环境变量。关于MySQL支持的环境变量请参见[MySQL](https://github.com/docker-library/docs/tree/master/mysql)。
     
     ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002054069737.png "点击放大")
     
     
     | 环境变量                | 取值示例         | 说明                   |
     |:---|:---|:---|
     | MYSQL_ROOT_PASSWORD | **请您自行设置密码** | MySQL的root用户密码，可自定义。 |
     | MYSQL_DATABASE      | **database** | 镜像启动时要创建的数据库名称，可自定义。 |
     | MYSQL_USER          | **db_user**  | 数据库用户名称，可自定义。        |
     | MYSQL_PASSWORD      | **请您自行设置密码** | 数据库用户密码，可自定义。        |
        
     
     
  
  7. 在"数据存储"下选择"动态挂载 (VolumeClaimTemplate)"，添加云硬盘存储作为MySQL的存储。 
     单击"创建存储卷声明PVC"，并填写以下关键参数，其余参数可保持默认。
     ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002017813840.png "点击放大")
     
     
     | 参数      | 示例           | 参数说明                                         |
     |:---|:---|:---|
     | 存储卷声明类型 | **云硬盘**      | PVC使用的底层存储类型。                                |
     | PVC名称   | **mysql**    | 自定义PVC名称，如mysql。                             |
     | 存储类     | **csi-disk** | 默认为csi-disk。                                 |
     | 可用区     | **可用区1**     | 选择一个可用区，云硬盘只能挂载到同一可用区的节点上，创建后不支持更换可用区，请谨慎选择。 |
     | 云硬盘类型   | **通用SSD**    | 请根据需求自定义选择合适的云硬盘类型。                          |
     | 容量（GiB） | **10GiB**    | 请根据需求填写容量，默认为10GiB。                          |
        
     单击"创建"，然后填写存储挂载到容器的路径， MySQL默认使用的路径为"/var/lib/mysql"。
     ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000001937904068.png "点击放大")
     
     
     
     
  
  8. 在"实例间发现服务配置"设置Headless Service。 
     Headless Service用于有状态负载实例间发现，它会生成每个Pod的集群DNS地址，可以实现对有状态负载某个特定实例的访问。对于多副本具有主副关系的MySQL数据库，可使用Headless Service对MySQL主服务器进行读写，并对其他副本进行数据复制。本示例中MySQL为单实例，关于多实例MySQL的示例请参见[运行一个有状态的应用程序](https://kubernetes.io/zh-cn/docs/tasks/run-application/run-replicated-stateful-application/)。
     ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002018024866.png "点击放大")
     
     
     | 参数        | 示例        | 参数说明                                                 |
     |:---|:---|:---|
     | Service名称 | **mysql** | 自定义Headless Service名称。                               |
     | 端口名称      | **mysql** | 自定义端口名称，用于区分同一个Service中的不同端口，本示例中仅使用一个端口。            |
     | 服务端口      | **3306**  | Service对外提供访问的端口，可自定义设置，本示例中与容器端口保持一致。               |
     | 容器端口      | **3306**  | 容器中的应用程序实际监听的端口，根据应用程序镜像对外开放的端口确定。例如MySQL对外开放3306端口。 |
        
     
     
  
  9. 单击右下角"创建工作负载"。 
     等待工作负载创建成功，创建成功后在有状态负载下会显示一个运行中的工作负载。
     ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002054083813.png "点击放大")
     
     
     
   
- [使用kubectl命令行方式]
  ![](https://support.huaweicloud.com/qs-cce/public_sys-resources/notice_3.0-zh-cn.png)
  您需要在**集群所在VPC下** 准备一台**已绑定弹性公网IP**的ECS虚拟机。
  1. 在ECS虚拟机上安装kubectl命令行工具。 
     您可以尝试执行**kubectl version**命令判断是否已安装kubectl，如果已经安装kubectl，则可跳过此步骤。
     本文以Linux环境为例安装和配置kubectl，更多安装方式请参考[安装kubectl](https://kubernetes.io/zh-cn/docs/tasks/tools/#kubectl)。
     1. 下载kubectl。
        ```
        cd /home
        curl -LO https://dl.k8s.io/release/{v1.29.0}/bin/linux/amd64/kubectl
        ```
        其中*{v1.29.0}*为指定的版本号，请根据集群版本进行替换。
        
     
     2. 安装kubectl。
        ```
        chmod +x kubectl
        mv -f kubectl /usr/local/bin
        ```
        
     
     
     
     
  
  2. 为kubectl命令行工具配置访问Kubernetes集群的凭证。 
     1. 请登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，并单击集群名称进入集群总览页。
     
     2. 在集群总览页中找到"连接信息"版块。单击kubectl后的"配置"按钮，查看kubectl的连接信息。
     
     3. 在弹出页面中选择"内网访问"，然后下载对应的配置文件。
     
     4. 登录已安装kubectl客户端的虚拟机，将上一步中下载的配置文件（以kubeconfig.yaml为例）复制到/home目录下。
     
     5. 将kubectl认证文件保持至$HOME/.kube目录下的config文件中。
        ```
        cd /home
        mkdir -p $HOME/.kube
        mv -f kubeconfig.yaml $HOME/.kube/config
        ```
        
     
     6. 执行kubectl命令验证集群的连通性。 以查看集群信息为例，执行以下命令。
        ```
        kubectl cluster-info
        ```
        回显如下：
        ```
        Kubernetes master is running at https://*.*.*.*:5443
        CoreDNS is running at https://*.*.*.*:5443/api/v1/namespaces/kube-system/services/coredns:dns/proxy
        To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
        ```
        
     
     
     
     
  
  3. 创建一个名为mysql.yaml的描述文件。其中，mysql.yaml为自定义名称，您可以随意命名。
     
     ```
     vi mysql.yaml
     ```
     文件内容如下：
     ```
     apiVersion: apps/v1
     kind: StatefulSet
     metadata:
       name: mysql
       namespace: default
     spec:
       replicas: 1
       selector:
         matchLabels:
           app: mysql
           version: v1
       template:
         metadata:
           labels:
             app: mysql
             version: v1
         spec:
           containers:
             - name: container-1
               image: mysql:8.0
               env:
                 - name: MYSQL_ROOT_PASSWORD  # MySQL的root用户密码，可自定义
                   value: *****
                 - name: MYSQL_DATABASE       # 镜像启动时要创建的数据库名称，可自定义
                   value: database
                 - name: MYSQL_USER           # 数据库用户名称，可自定义
                   value: db_user
                 - name: MYSQL_PASSWORD       # 数据库用户密码，可自定义
                   value: *****
               resources:
                 requests:
                   cpu: 250m
                   memory: 512Mi
                 limits:
                   cpu: 250m
                   memory: 512Mi
               volumeMounts:
                 - name: mysql
                   mountPath: /var/lib/mysql
           imagePullSecrets:
             - name: default-secret
       serviceName: mysql     # Headless Service的名称，需与Headless Service定义中的名称一致
       volumeClaimTemplates:  # 动态挂载云硬盘示例
         - apiVersion: v1
           kind: PersistentVolumeClaim
           metadata:
             name: mysql
             namespace: default
             annotations:
               everest.io/disk-volume-type: SSD  # 云硬盘的类型
             labels:
               failure-domain.beta.kubernetes.io/region: cn-north-4  # 云硬盘所在的区域
               failure-domain.beta.kubernetes.io/zone: cn-north-4b   # 云硬盘所在的可用区，必须和工作负载部署的节点可用区一致
           spec:
             accessModes:
               - ReadWriteOnce  # 云硬盘必须为ReadWriteOnce
             resources:
               requests:
                 storage: 10Gi
             storageClassName: csi-disk  # StorageClass的名称，云硬盘为csi-disk
     ---
     # 定义Headless Service
     apiVersion: v1
     kind: Service
     metadata:
       name: mysql          #  表示Headless Service的名称，需与挂载在工作负载中的serviceName一致
       namespace: default
       labels:
         app: mysql
         version: v1
     spec:
       selector:            # 标签选择器，需与工作负载的labels一致，用于匹配正确的工作负载
         app: mysql 
         version: v1
       clusterIP: None
       ports:
         - name: mysql      # 端口名称，可自定义
           protocol: TCP
           port: 3306       # 服务端口，可自定义
           targetPort: 3306 # 容器端口，mysql固定为3306
       type: ClusterIP
     ```
     
     
  
  4. 创建MySQL。 
     ```
     kubectl apply -f mysql.yaml
     ```
     回显如下表示已开始创建负载。
     ```
     statefulset.apps/mysql created
     service/mysql created
     ```
     
     
  
  5. 查看工作负载状态。 
     ```
     kubectl get statefulset
     ```
     回显如下，表示工作负载已创建成功。
     ```
     NAME           READY      AGE 
     mysql          1/1        4m5s
     ```
     
     
  
  6. 查看服务。 
     ```
     kubectl get svc
     ```
     回显如下，表示工作负载访问方式已设置成功。
     ```
     NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
     kubernetes   ClusterIP      10.247.0.1       <none>        443/TCP          3d
     mysql        ClusterIP      None            <none>        3306/TCP        51s
     ```
     
     
   
 #### 步骤五：部署WordPress
您可以使用不同的方式部署WordPress工作负载。
- [使用控制台方式]
  1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)。
  
  2. 单击集群进入集群控制台。
  
  3. 在左侧菜单栏选择"工作负载"，单击右上角"创建负载"。
  
  4. 填写工作负载基本信息。 
     本示例中填写以下关键参数，其它参数可保持默认。关于配置参数的详细说明请参见[创建有状态负载（StatefulSet）](https://support.huaweicloud.com/usermanual-cce/cce_10_0048.html)。
     ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002054148409.png "点击放大")
     
     | 参数   | 示例                  | 参数说明                                                                                                                                                            |
     |:---|:---|:---|
     | 负载类型 | **无状态负载Deployment** | 工作负载是在 Kubernetes 上运行的应用程序。Kubernetes提供了一些内置的工作负载资源，不同工作负载的功能特性及应用场景不同。关于工作负载类型的介绍请参见[工作负载概述](https://support.huaweicloud.com/usermanual-cce/cce_10_0006.html)。 |
     | 负载名称 | **wordpress**       | 请填写工作负载的名称。                                                                                                                                                     |
     | 命名空间 | **default**         | 命名空间是Kubernetes集群中的抽象概念，可以将集群中的资源或对象划分为一个组，且不同命名空间中的数据彼此隔离。 集群创建后将默认生成一个default命名空间，您可以直接使用该命名空间。                                   |
     | 实例数量 | **1**               | 工作负载中的Pod数量。                                                                                                                                                    |
        
     
     
  
  5. 填写容器基本信息。 
     ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002018030890.png "点击放大")
     
     
     | 参数    | 示例                                 | 参数说明                                                                                                                                                                                                                                                                                                                                        |
     |:---|:---|:---|
     | 镜像名称  | 使用**wordpress** 镜像，镜像版本为**latest** | 在基本信息中单击"选择镜像"，在弹出的窗口中选择"镜像中心"，并搜索"wordpress"，选择wordpress镜像，并设置镜像版本为"latest"。                                                                                                                                                                                                                                                               |
     | CPU配额 | 申请值为**0.25** Core，限制值为**0.25**Core | - 申请：容器预分配的CPU值，默认0.25Core。  - 限制：容器允许使用的CPU资源最大上限，默认与申请值相同。如果设置限制值大于申请值，则表示在突发场景可临时突破预分配的资源限制。   详细说明请参见[设置容器规格](https://support.huaweicloud.com/usermanual-cce/cce_10_0163.html)。 |
     | 内存配额  | 申请值为**512** MiB，限制值为**512**MiB     | - 申请：容器预分配的内存值，默认512MiB。  - 限制：容器允许使用的内存资源最大上限，默认与申请值相同。如果设置限制值大于申请值，则表示在突发场景可临时突破预分配的资源限制。   详细说明请参见[设置容器规格](https://support.huaweicloud.com/usermanual-cce/cce_10_0163.html)。         |
        
     
     
  
  6. 在环境变量下添加如下环境变量，此处一共需要设置四个环境变量，为WordPress添加MySQL数据库的信息。 
     ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002017978508.png "点击放大")
     
     
     | 环境变量                  | 取值示例            | 说明                                                                                                                                                                                                     |
     |:---|:---|:---|
     | WORDPRESS_DB_HOST     | **mysql:3306**  | 数据库的访问地址。本示例中需填写mysql工作负载的访问方式，即[步骤四：部署MySQL]中的Headless Service，可以使用集群内部域名mysql.default.svc.cluster.local:3306访问，其中.default.svc.cluster.local可以省略，即使用**mysql:3306**。 |
     | WORDPRESS_DB_USER     | **db_user**     | 访问数据的用户名，此处需要与[步骤四：部署MySQL]中的**MYSQL_USER**参数值保持一致，即使用这个用户去连接MySQL。                                                                                                  |
     | WORDPRESS_DB_PASSWORD | **您自行设置的数据库密码** | 访问数据库的密码，此处需要与[步骤四：部署MySQL]中的**MYSQL_PASSWORD**参数值保持一致。                                                                                                              |
     | WORDPRESS_DB_NAME     | **database**    | 访问数据库的名称，此处需要与[步骤四：部署MySQL]中的**MYSQL_DATABASE**参数值保持一致。                                                                                                              |
        
     
     
  
  7. 在"数据存储"下选择"已有存储卷声明 (PVC)"，添加云硬盘存储作为WordPress的存储。 
     单击"创建存储卷声明PVC"，并填写以下关键参数，其余参数可保持默认。
     ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002018042182.png "点击放大")
     
     
     | 参数      | 示例            | 参数说明                                                          |
     |:---|:---|:---|
     | 存储卷声明类型 | **云硬盘**       | PVC使用的底层存储类型。                                                 |
     | PVC名称   | **wordpress** | 自定义PVC名称。                                                     |
     | 创建方式    | **动态创建**      | 本例中选择"动态创建"，将自动为您创建存储卷声明PVC、存储卷PV和底层存储。适用于无可用的底层存储卷，需要新创建的场景。 |
     | 存储类     | **csi-disk**  | 默认为csi-disk。                                                  |
     | 可用区     | **可用区1**      | 选择一个可用区，云硬盘只能挂载到同一可用区的节点上，创建后不支持更换可用区，请谨慎选择。                  |
     | 云硬盘类型   | **通用SSD**     | 请根据需求自定义选择合适的云硬盘类型。                                           |
     | 容量（GiB） | **10GiB**     | 请根据需求填写容量，默认为10GiB。                                           |
        
     单击"创建"，然后填写存储挂载到容器的路径， WordPress默认使用的路径为"/var/www/html"。
     ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002054337965.png "点击放大")
     
     
     
     
  
  8. 配置访问信息。
     
     单击"服务配置"下的加号，创建服务（Service）用于从外部访问负载。本示例将创建一个负载均衡类型的Service，请在右侧弹窗中配置如下参数。
     ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002054163725.png "点击放大")
     
     
     | 参数        | 示例                                                                                                                                                                                                                                                                                                      | 参数说明                                                                                                                                                                                                                                                                                                                                             |
     |:---|:---|:---|
     | Service名称 | **wordpress**                                                                                                                                                                                                                                                                                           | 输入服务的名称。                                                                                                                                                                                                                                                                                                                                         |
     | 访问类型      | **负载均衡 ( LoadBalancer )**                                                                                                                                                                                                                                                                               | 选择服务类型，即服务访问的方式。不同的服务类型的差别请参见[服务概述](https://support.huaweicloud.com/usermanual-cce/cce_10_0249.html)。                                                                                                                                                                                                                                            |
     | 负载均衡器     | - 类型：选择**独享型**。  - 可用区：至少选择一个可用区，如**可用区1**。  - 弹性公网IP：选择**自动创建**。   其余参数可保持默认。 | 如果已有负载均衡（ELB）实例，可以选择已有ELB。 如果没有可选择"自动创建"，创建一个负载均衡器，并同时绑定弹性公网IP。关于参数的详细说明，请参见[创建负载均衡类型的服务](https://support.huaweicloud.com/usermanual-cce/cce_10_0681.html)。                                                                                                                                                         |
     | 端口配置      | - 协议：**TCP**  - 容器端口：**80**  - 服务端口：**8080**                                       | - 协议：负载均衡监听器端口协议。  - 容器端口：容器中应用启动监听的端口，该容器端口需和应用对外提供的监听端口一致，使用wordpress镜像请设置为80。  - 服务端口：ELB将会使用该端口创建监听器，提供外部流量访问入口。您可以自定义对外访问的端口。   |
        
     
     
  
  9. 单击右下角"创建工作负载"。 
     等待工作负载创建成功，创建成功后在无状态负载下会显示一个运行中的工作负载。
     ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002018045434.png "点击放大")
     
     
     
   
- [使用kubectl命令行方式]
  1. 登录安装kubectl命令行工具的ECS虚拟机。
  
  2. 创建一个名为wordpress-deployment.yaml的描述文件。其中，wordpress-deployment.yaml为自定义名称，您可以随意命名。
     
     ```
     vi wordpress-deployment.yaml
     ```
     文件内容如下：
     ```
     apiVersion: apps/v1
     kind: Deployment
     metadata:
       name: wordpress
       namespace: default
     spec:
       replicas: 1
       selector:
         matchLabels:
           app: wordpress
           version: v1
       template:
         metadata:
           labels:
             app: wordpress
             version: v1
         spec:
           containers:
             - name: container-1
               image: wordpress:latest
               env:
                 - name: WORDPRESS_DB_HOST  # 数据库的访问地址，即mysql的“Headless Service名称:服务端口”，本示例为mysql:3306
                   value: mysql:3306           
                 - name: WORDPRESS_DB_USER  # 访问数据的用户名，此处需要与mysql的MYSQL_USER参数值保持一致，即使用这个用户去连接MySQL
                   value: db_user
                 - name: WORDPRESS_DB_PASSWORD # 访问数据库的密码，此处需要与mysql中的MYSQL_PASSWORD参数值保持一致
                   value: *****
                 - name: WORDPRESS_DB_NAME  # 访问数据库的名称，此处需要与mysql中的MYSQL_DATABASE参数值保持一致
                   value: database
               resources:
                 requests:
                   cpu: 250m
                   memory: 512Mi
                 limits:
                   cpu: 250m
                   memory: 512Mi
               volumeMounts:    # 挂载存储
                 - name: wordpress
                   readOnly: false
                   mountPath: /var/www/html # WordPress默认使用的路径为“/var/www/html”
           imagePullSecrets:
             - name: default-secret
           volumes:
             - name: wordpress
               persistentVolumeClaim:
                 claimName: wordpress
     ---
     # 动态创建存储卷
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: wordpress
       namespace: default
       annotations:
         everest.io/disk-volume-type: SSD
         everest.io/enterprise-project-id: '0'
       labels:
         failure-domain.beta.kubernetes.io/region: cn-north-4  #云硬盘所在的区域
         failure-domain.beta.kubernetes.io/zone: cn-north-4b   #云硬盘所在的可用区，必须和工作负载部署的节点可用区一致
     spec:
       accessModes:
         - ReadWriteOnce
       resources:
         requests:
           storage: 10Gi
       storageClassName: csi-disk
     ```
     
     
  
  3. 创建WordPress。 
     ```
     kubectl apply -f wordpress-deployment.yaml
     ```
     查看工作负载状态。
     ```
     kubectl get deployment
     ```
     回显如下，表示工作负载已创建成功。
     ```
     NAME               READY     UP-TO-DATE   AVAILABLE   AGE 
     wordpress          1/1       1            1           4m5s
     ```
     
     
  
  4. 创建一个名为wordpress-service.yaml的描述文件。其中，wordpress-service.yaml为自定义名称，您可以随意命名。 
     ```
     vi wordpress-service.yaml
     ```
     文件内容如下：
     ```
     apiVersion: v1
     kind: Service
     metadata:
       name: wordpress
       namespace: default
       annotations:
         kubernetes.io/elb.class: union
         kubernetes.io/elb.autocreate:         
             '{
                 "type": "public",
                 "bandwidth_name": "cce-wordpress",
                 "bandwidth_chargemode": "bandwidth",
                 "bandwidth_size": 5,
                 "bandwidth_sharetype": "PER",
                 "eip_type": "5_bgp"
             }'
     spec:
       selector:      # 标签选择器，需与wordpress工作负载的Labels一致，用于匹配正确的工作负载
         app: wordpress
       externalTrafficPolicy: Cluster
       ports:
         - name: cce-service-0
           targetPort: 80  # 容器端口，使用wordpress镜像请设置为80
           nodePort: 0
           port: 8080      # 服务端口，可自定义
           protocol: TCP
       type: LoadBalancer
     ```
     
     
  
  5. 创建服务。 
     ```
     kubectl create -f wordpress-service.yaml
     ```
     回显如下，表示服务已创建。
     ```
     service/wordpress created
     ```
     
     
  
  6. 查看服务。 
     ```
     kubectl get svc
     ```
     回显如下，表示工作负载访问方式已设置成功。您可通过LoadBalancer服务从公网访问WordPress工作负载。其中\*\*.\*\*.\*\*.\*\*为负载均衡实例的弹性公网IP地址，8080为访问端口。
     ```
     NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
     kubernetes   ClusterIP      10.247.0.1       <none>        443/TCP          3d
     mysql        ClusterIP      10.247.202.20    <none>        3306/TCP         8m
     wordpress   LoadBalancer   10.247.130.196   **.**.**.**   8080:31540/TCP   51s
     ```
     
     
   
 #### 步骤六：访问WordPress
1. 获取WordPress的外部访问地址。 
   单击WordPress工作负载名称，进入工作负载详情页。在"访问方式"页签下可以看到WordPress的IP地址，其中公网地址就是外部访问地址。
   ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000002032851602.png "点击放大")
   
   
   
2. 在浏览器中输入"外部访问地址:端口"，即可成功访问应用，其中端口为[8]中配置的服务端口值，为8080。
   
   ![](https://support.huaweicloud.com/qs-cce/zh-cn_image_0000001938519170.png "点击放大")
   
   
 
 #### 后续操作：释放资源
如果您无需继续使用集群，请及时释放资源，避免产生额外的费用。详细操作步骤请参见[删除集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0212.html)。
 #### 常见问题
**问题现象** ：无法访问WordPress，报错信息为**Error establishing a database connection**。
**问题原因** ：出现上述问题一般与MySQL数据库有关，常见原因包括：
- 在[3]中，使用的MySQL镜像版本与WordPress不兼容，进而导致二者连接失败。
- 在[2]中，WordPress的数据库的访问地址未配置正确，与MySQL中Headless Service访问地址不一致。
 
**解决方案**：
- 版本不兼容：修改MySQL镜像版本，建议使用8.0版本。
- 访问地址不一致：修改WordPress中的环境变量WORDPRESS_DB_HOST的取值，与MySQL中Headless Service访问地址一致。
 
