华为云用户手册

  • 备案授权码 什么是备案授权码 备案授权码是由弹性云服务器(含云耀云服务器)生成的用于备案的授权凭证,实际指向该服务器的IP地址。 备案授权码使用场景 对于跨账号的云资源类型,您可以通过备案授权码进行备案。 示例: 华为云账号A内无满足备案条件的服务器,您可以使用其他华为云账号(如账号B)内满足条件的弹性云服务器生成备案授权码进行备案。华为云账号B需满足如下要求: 用于生成备案授权码的弹性云服务器,需满足备案服务器的要求,即弹性云服务器是“包年/包月”计费模式。 华为云账号B需授权备案授权码给账号A后,账号A才能使用该备案授权码。
  • 处理方法 登录有处理委托权限的账号进行操作,如主账号或者授予 IAM 权限的账号。 单击控制台左上角的,搜索并单击进入“ 统一身份认证 服务 IAM”,单击“委托”。 在委托页面搜索“cpts_admin”,单击搜索结果查看授权记录。 查看授权记录中的权限是否包含CCE Administrator 、E CS ReadOnlyAccess、VPCEndpoint Administrator角色。 如果不包含,单击页面中的“授权”,分别搜索CCE Administrator 、ECS ReadOnlyAccess、VPCEndpoint Administrator进行授权。授权需要的权限,勾选之后,需要单击“查看已选”,只选择需要的权限。 单击“下一步”,根据需要选择授权范围,至少选择需要使用服务的局点。 单击“确定”即可完成授权。 完成授权之后,进入性能测试服务页面,在“测试资源”页面将创建失败的资源组删除,重新创建即可。
  • 节点使用建议 用于测试资源组的节点不要运行任何应用或做其他用途,可能会导致应用运行异常。 至少需要2台空节点,1台用于压测资源组的调试机(即调试执行机的节点),1台用于压测资源组的执行机(即在压测过程中能够提供自身性能数据的施压目标机器)。请根据需要压测的并发用户数,创建对应规格的节点,PerfTest测试工程的节点规格推荐请参考表1,JMeter测试工程的节点规格推荐请参考表2。 如需要压测外部服务,请为执行节点绑定弹性IP。如需要调试外部服务,请为调试节点和执行节点都绑定弹性IP。 表1 PerfTest测试工程的节点规格推荐 并发用户数 所需规格 数量 0-5000 调试节点:4U8G 1 执行节点:4U8G 1 5001-10000 调试节点:4U8G 1 执行节点:8U16G 1 10001-20000 调试节点:4U8G 1 执行节点:8U16G 2 20001-30000 调试节点:4U8G 1 执行节点:8U16G 3 30001-40000 调试节点:4U8G 1 执行节点:8U16G 4 40001-50000 调试节点:4U8G 1 执行节点:8U16G 5 50001以上 调试节点:4U8G 1 执行节点:8U16G n 说明: 每台8U16G的执行节点可支撑10000并发。 表2 JMeter测试工程的节点规格推荐 并发用户数 所需规格 数量 0-1000 调试节点:4U8G 1 执行节点:4U8G 1 1001-2000 调试节点:4U8G 1 执行节点:8U16G 1 2001-4000 调试节点:4U8G 1 执行节点:8U16G 2 4001-6000 调试节点:4U8G 1 执行节点:8U16G 3 6001-8000 调试节点:4U8G 1 执行节点:8U16G 4 8001-10000 调试节点:4U8G 1 执行节点:8U16G 5 10001以上 调试节点:4U8G 1 执行节点:8U16G n 说明: 每台8U16G的执行节点可支撑2000并发。 以上节点规格推荐是通用规格,仅供参考。实际压测时,资源规格的需求受思考时间、压测的协议类型、请求和响应的大小数量、响应时间、结果验证等因素影响,用户可根据实际情况进行调整。 压测外部服务时,执行节点需要绑定弹性IP,测试带宽受限于购买的EIP带宽。 当集群上的节点已经被部署上了应用,创建私有资源组时,该节点无法被选用。
  • 计费示例 假设您已购买峰值并发1万,VUM额度100万的按需套餐包,您在2023/03/10 8:45:30在性能测试服务上启动了并发数为1000的压测任务,然后在9:30:00将其全部停止运行,则计费周期分为如下两个时间段: 8:00:00~9:00:00时间段,在8:45:30~9:00:00间产生费用,该计费周期内的计费时长为870秒。则参考计费项中的计费公式,该计费时间段消耗的VUM为:1000x870÷60=14500(VUM)。 9:00:00~10:00:00时间段,在9:00:00~9:30:00间产生费用,该计费周期内的计费时长为1800秒。则参考计费项中的计费公式,该计费时间段消耗的VUM为:1000x1800÷60=30000(VUM)。 因此,总消耗VUM=14500+30000=44500(VUM),即4.45万VUM,则剩余的VUM=100万-4.45万=95.55万(VUM)。
  • 计费周期 按需套餐包计费时,性能测试服务资源按秒计费,每一个小时整点结算一次费用(以GMT+8时间为准),结算完毕后进入新的计费周期。计费的起点以性能测试服务上的测试任务启动运行的时间点为准,终点以测试任务停止运行的时间为准。 例如,假设您在2023/03/10 8:45:30在性能测试服务上启动了测试任务,然后在9:30:00将其全部停止运行,则计费周期分为如下两个时间段: 8:00:00~9:00:00时间段,在8:45:30~9:00:00间产生费用,该计费周期内的计费时长为870秒。 9:00:00~10:00:00时间段,在9:00:00~9:30:00间产生费用,该计费周期内的计费时长为1800秒。
  • 适用计费项 表1 按需套餐包计费适用计费项 计费项 说明 峰值并发 运行任务支持的最大并发用户数,请根据测试需求预估。如需更大峰值并发,请选择企业版服务。 VUM额度 按需套餐包计费时,优先扣除有效期内的按需套餐包的VUM额度,超出按需套餐包的部分以按需计费模式进行结算。 假设您计划购买性能测试服务企业版,峰值并发1万,VUM额度100万,在购买性能测试套餐页面底部,您将看到所需的配置费用。 图1 按需套餐包配置费用示例
  • 背景信息 性能自动化集成了华为云云性能测试服务。性能测试服务(CodeArts PerfTest)是一项为基于HTTP/HTTPS/TCP/UDP/WebSocket/RTMP/HLS等协议构建的云应用提供性能测试的服务。 服务支持快速模拟大规模并发用户的业务高峰场景,可以很好的支持报文内容和时序自定义、多事务组合的复杂场景测试,测试完成后会为您提供专业的测试报告呈现您的服务质量。 性能自动化用例包含基本信息和测试脚本两部分: 基本信息用于管理和描述测试用例,包含用例名称(必填)、编号、标签、用例等级等信息,基本信息的编辑通过测试计划服务页面完成。 测试脚本定义测试步骤,包含请求、事务、阶段等,测试脚本的编辑将跳转至CodeArts PerfTest完成。
  • 背景信息 接口自动化用例可包括三个阶段:准备阶段、测试阶段、销毁阶段。 准备阶段对应页面中的“前置步骤”,实现测试前置条件的准备;测试阶段对应“测试步骤”,实现接口的功能测试;销毁阶段对应“后置步骤”,实现准备阶段和测试阶段测试数据的释放或恢复。 准备阶段(可选):前置步骤。 在此阶段中准备测试阶段需要的前置条件的数据,如果没有前置条件,可以忽略此阶段。 在准备阶段通过调用接口的方式初始化前置条件,如果前置条件的数据需要在测试阶段中引用,可以使用参数传递将数据参数化后供测试阶段引用,详见设置响应提取。 测试阶段:测试步骤。 定义接口核心测试步骤,测试阶段中的测试步骤可以引用准备阶段提取的参数。 销毁阶段(可选):后置步骤。 为了不影响其它测试或者下一次测试,建议在每次测试结束后清理测试环境数据,恢复测试环境的初始状态,销毁准备阶段创建的数据。 如果没有数据需要销毁,可以忽略此阶段。通过调用接口的方式销毁数据,销毁阶段的测试步骤可以引用准备阶段提取的参数。
  • 背景信息 接口自动化用例支持通过导入Postman文件生成测试步骤。 导入Postman需满足以下要求: 支持Postman Collection v2.1标准。 仅支持Postman请求方法、请求URL、请求头、请求体生成测试步骤。 Postman请求体导入方式仅支持form-data、x-www-form-urlencode、raw。 Postman请求体form-data上传附件需要在测试步骤中单独上传。
  • 导读 接口自动化用例提供了丰富的用户界面,支持可视化地编排自动化测试步骤,以及丰富的检查点和相应提取配置,可以在简单易用的可视化接口管理页面上,快速生成与接口核心逻辑相匹配的测试用例,实现“零代码“快速生成测试用例。接口自动化用例具备多测试步骤的逻辑编排能力,支持通过拖拽来安排接口测试的顺序,生成自动化测试策略,完成场景级接口自动化脚本生成,将测试人员从重复工作中释放出来,进行探索性测试等更具有创造性和高价值的测试活动。 父主题: 接口自动化用例
  • 背景信息 接口关键字中定义单个接口的请求,可以通过导入Swagger文件、保存自定义URL请求等方式生成。 Swagger是一个定义、开发、调试RESTful等接口的工具,应用Swagger可以标准化地定义接口属性,便于互联互通。接口自动化支持导入Swagger 2.0&3.0格式的接口描述文件、解析接口的定义描述、生成脚本模板,只需要按照模板输入接口参数就可以创建接口自动化用例。 通过导入接口Swagger描述文件可以生成脚本模板,一个脚本模板对应Swagger中的一个接口定义,基于脚本模板可以可视化编排测试用例。 脚本模板和Swagger接口描述中字段的对应关系如下: swagger 2.0规范如下: 脚本模板属性 Swagger接口定义属性 名称 默认使用operationId,可在设置中配置使用summary。 路径 schema + :// + basePath + path。 请求参数hostURL host 其它请求参数 parameters swagger 3.0规范如下: 脚本模板属性 Swagger接口定义属性 名称 默认使用operationId,可在设置中配置使用summary。 路径 url + path。 请求参数hostURL servers: - url: https://{hostURL}/variable variables: hostURL: default: test.demo.com 其它请求参数 parameters, requestBody, responses
  • 新增节点 新增节点包括新增邻节点(即同级节点)与新增子节点。选中思维导图中任一节点,可根据需要选择新增节点的类型。根节点只能新增子节点,其它节点可以新增邻节点和子节点。 新增子节点 进入已创建的思维导图,选中任意节点,通过以下方式新增子节点。 敲击鼠标右键,在页面下拉列表中选择“新增子节点(Ins)”。 使用快捷键:敲击键盘上的“Insert”或“Tab”。 新增邻节点 进入已创建的思维导图,选中除根节点外的任意节点,通过以下方式新增邻节点。 敲击鼠标右键,在页面下拉列表中选择“新增邻节点(Enter)”。 使用快捷键:敲击键盘上的“Enter”。
  • 用例规范检查 用户可以对创建的手工测试用例进行规范检查,根据检查结果对用例进行优化。详细的编写规范请参考测试用例编写规范。 此功能为您提供65天试用期,后续需要开通测试计划专业版套餐或CodeArts专业版以上套餐来延续您的高阶体验。 完成编写测试步骤后,在页面下方单击“规范检查”,检查结果将显示在页面下方。 用户可以根据提示信息对用例进行优化,单击对应的规范描述可以查看详细规范信息。 用例编写完成后,单击保存。 父主题: 手工测试用例
  • 用例设计 完成测试点设计后,可以进一步细化成用例。 用例包括预置条件、步骤、预期结果三个部分,进行用例设计时分别设置这三部分内容。 进入已创建的思维导图。 在“注册会员”节点下按需新建子节点预置条件、步骤、预期结果,根据需要新建子节点(详细操作可参考新增节点)。 选中作为预置条件的节点,单击思维导图上方工具栏中。 当节点中出现时,说明设置成功。 选中作为步骤的节点,单击思维导图上方工具栏中。 当节点中出现时,说明设置成功。 选中作为预期结果的节点,单击思维导图上方工具栏中。 当节点中出现时,说明设置成功。 父主题: 需求目录测试设计策略
  • 基础操作 进入思维导图后,除了编辑节点,还可以进行以下操作: 操作项 说明 重命名 单击思维导图左上方,在弹框中输入新名称,可以对当前思维导图重命名。 删除思维导图 在思维导图页面右上方单击,在下拉列表中选择“删除思维导图”,单击“确定”,删除当前思维导图。 被删除的思维导图将移入回收站中。 回收站 在思维导图右上方单击,在下拉列表中选择“回收站”,在弹框中可查看已被删除的思维导图列表。 对于在回收站中的思维导图,可以完成如下操作: 单击,单击“确定”,恢复对应行中的思维导图。 说明: 恢复思维导图,会替换当前页面中的内容,请谨慎操作。 回收站记录一旦被恢复,该条记录将从列表中移除。 由于回收站恢复会覆盖当前思维导图内容,建议新建空白思维导图进行回收站恢复。 单击,查看对应行中思维导图的详情。 单击,单击“确定”,彻底删除对应行中的思维导图,删除后不可恢复,请谨慎操作。 导入 在思维导图上方工具栏中单击,单击“确定”。在弹窗中选中本地已存在的“.xmind”类型文件,可将选中的文件导入至当前页面中。 说明: 支持导入不超过20MB的文件。 支持导入脑图类压缩文件个数不超过100个。 导入的内容会替换当前页面中的思维导图,请谨慎操作。 导入脑图成功后不会改变根节点。 导出 在思维导图上方工具栏中单击,选择导出的格式,支持.PDF和.PNG格式,单击“确定”,可将页面中的思维导图导出到本地。 备份 在思维导图上方工具栏中单击,在弹框中输入名称和描述,单击“确定”,可为页面中的思维导图创建一个备份。 恢复 在思维导图上方工具栏中单击,在弹框中选择一个备份,单击,在弹框中单击“确定”,可将已备份的思维导图恢复到当前页面中。 说明: 恢复思维导图,会替换当前页面中的内容,请谨慎操作。 执行恢复思维导图之前,会自动备份当前思维导图的内容。 撤销 在思维导图上方工具栏中单击,可撤销页面中的最后一步操作。 重做 在思维导图上方工具栏中单击,可恢复最近被撤销的一步操作。 全部展开 选中一个带的节点,思维导图上方工具栏中单击,可将该节点下所有子节点全部展开,展开后节点旁的图标变为。 全部收缩 选中一个带的节点,思维导图上方工具栏中单击,可将该节点下所有子节点全部收缩,收缩后节点旁的图标变为。
  • 快捷键 测试设计支持通过以下快捷键编辑思维导图。 操作 快捷键 视图居中 End 移动视图 W/A/S/D 展开/收缩 F 放大/缩小 +/- 编辑节点 F2或Space 编辑换行 Alt+L/Shift+Enter/Ctrl+Enter 复制 Ctrl+C 粘贴 Ctrl+V 剪切 Ctrl+X 回撤 Ctrl+Z 重做 Ctrl+Y 添加同级 Enter 添加子级 Ins或Tab 删除节点 Del 选中根节点 Ctrl+Home或Home 选中父节点 Backspace 移动选中节点 ↑/←/↓/→ 移动节点 Ctrl+↑/←/↓/→ 添加场景 Alt+C 添加测试点 Alt+P 添加预置条件 Alt+O 添加步骤 Alt+T 添加预期结果 Alt+X 添加用例等级 Ctrl+0 / 1 / 2 / 3 / 4 添加图片 Ctrl+I 添加文件 Ctrl+D 设置标签 F3 查看快捷键 Ctrl+Shift+L 单击思维导图左下角“快捷键”,可以查看快捷键列表。
  • 背景信息 关键字驱动测试是一种测试自动化的技术,通过提供一组称为关键字的“构建块”创建自动化测试用例。关键字驱动测试可用于组件测试、系统测试等不同的测试级别,其优势体现在易用性、可理解性、可维护性、测试信息的重用、支持测试自动化、节约潜在的成本和进度等方面。 在设计测试用例时,经常会遇到有一些相同的前置步骤或者测试逻辑。如果每一个测试用例中都编写这些步骤,重复工作量很大,并且难以维护。测试关键字可以帮助复用这些测试步骤。 关键字库将接口关键字、组合关键字、系统关键字、自定义关键字进行统一管理,打造一站式关键字管理能力,在用例脚本设计时用户体验保持一致。 接口关键字中定义单个接口的请求,可以通过导入Swagger文件、保存自定义URL请求等方式生成。 组合关键字用于将多个步骤封装常用测试逻辑,可以被测试用例调用实现逻辑复用。 系统关键字涵盖认证、协议、中间件、数据库四大类别,覆盖身份认证、复杂协议、数据处理、数据预置、数据验证、接口集成等丰富场景。 自定义关键字具备高度的扩展性,用户可以在本地编写代码完成自定义关键字的开发,满足高阶用户的复杂场景测试诉求。
  • 编辑测试计划 在测试计划列表中,单击需要编辑的测试计划名称,页面右侧将滑出编辑窗口,可对测试计划进行编辑。 页签“详情”中,可以编辑测试计划(可以编辑测试计划的名称、编辑描述、选择执行方式、编辑基本信息),编辑完毕单击页面右上方“保存”。 页签“需求”中,可以添加、移除当前测试计划范围的需求,操作方式与新建测试计划里添加、移除需求相关步骤相同。 页签“测试用例”中,可以查看该计划内的测试用例,也可以添加测试计划所属版本的测试用例。 页签“操作历史”中,可以查看对测试计划的编辑历史。
  • 步骤一:源集群数据采集 通过kubectl连接源集群。具体方法可参考使用kubectl连接集群。 使用默认参数配置,采集集群中所有命名空间的数据。执行方法:./kspider-linux-amd64 执行后的输出详细信息如下: [~]# ./kspider-linux-amd64 The Cluster version is v1.15.6-r1-CCE2.0.30.B001 There are 5 Namespaces There are 2 Nodes Name CPU Memory IP Arch OS Kernel MachineID 10.1.18.64 4 8008284Ki [10.1.18.64 10.1.18.64] amd64 linux 3.10.0-1127.19.1.el7.x86_64 ef9270ed-7eb3-4ce6-a2d8-f1450f85489a 10.1.19.13 4 8008284Ki [10.1.19.13 10.1.19.13] amd64 linux 3.10.0-1127.19.1.el7.x86_64 2d889590-9a32-47e5-b947-09c5bda81849 There are 9 Pods There are 0 LonePods: There are 2 StatefulSets: Name Namespace NodeAffinity minio default false minio minio false There are 3 Deployments: Name Namespace NodeAffinity rctest default true flink-operator-controller-manager flink-operator-system false rctest minio false There are 1 DaemonSets: Name Namespace NodeAffinity ds-nginx minio false There are 0 Jobs: There are 0 CronJobs: There are 4 PersistentVolumeClaims: Namespace/Name Pods default/pvc-data-minio-0 default/minio-0 minio/obs-testing minio/ds-nginx-9hmds,minio/ds-nginx-4jsfg minio/pvc-data-minio-0 minio/minio-0 There are 5 PersistentVolumes: Name Namespace pvcName scName size key pvc-bd36c70f-75bf-4000-b85c-f9fb169a14a8 minio-pv obs-testing csi-obs 1Gi pvc-bd36c70f-75bf-4000-b85c-f9fb169a14a8 pvc-c7c768aa-373a-4c52-abea-e8b486d23b47 minio-pv pvc-data-minio-0 csi-disk-sata 10Gi 1bcf3d00-a524-45b1-a773-7efbca58f36a pvc-4f52462b-3b4c-4191-a63b-5a36a8748c05 minio obs-testing csi-obs 1Gi pvc-4f52462b-3b4c-4191-a63b-5a36a8748c05 pvc-9fd92c99-805a-4e65-9f22-e238130983c8 default pvc-data-minio-0 csi-disk 10Gi 590afd05-fc68-4c10-a598-877100ca7b3f pvc-a22fd877-f98d-4c3d-a04e-191d79883f97 minio pvc-data-minio-0 csi-disk-sata 10Gi 48874130-df77-451b-9b43-d435ac5a11d5 There are 7 Services: Name Namespace ServiceType headless-lxprus default ClusterIP kubernetes default ClusterIP minio default NodePort flink-operator-controller-manager-metrics-service flink-operator-system ClusterIP flink-operator-webhook-service flink-operator-system ClusterIP headless-lxprus minio ClusterIP minio minio NodePort There are 0 Ingresses: There are 6 Images: Name gcr.io/flink-operator/flink-operator:v1beta1-6 flink:1.8.2 swr.cn-north-4.myhuaweicloud.com/paas/minio:latest nginx:stable-alpine-perl swr.cn-north-4.myhuaweicloud.com/everest/minio:latest gcr.io/kubebuilder/kube-rbac-proxy:v0.4.0 There are 2 Extra Secrets: SecretType cfe/secure-opaque helm.sh/release.v1 在kspider执行完毕后,当前目录下将生成两个文件: cluster-*.json:此文件包含了源集群及应用的采集数据,这些数据可用于分析和规划迁移过程。 preferred-*.json:此文件包含了推荐的目标集群信息。基于源集群的规模和节点规格进行初步评估,文件将提供关于目标集群版本和规模的建议。 查看源集群及应用的采集数据。 您可以用文本编辑器或JSON查看器打开“cluster-*.json”文件以查看数据。在实际操作中,您需要将文件名中的“*”替换为实际的时间戳或序列号,以找到并打开正确的文件。 “cluster-*.json”文件说明如下: { K8sVersion:Kubernetes版本,字符串类型 Namespaces:命名空间数量,字符串类型 Pods:Pod总数量,整型 Nodes:节点总信息,以IP为key,展示节点信息 IP地址 CPU:CPU,字符串类型 Arch:CPU架构,字符串类型 Memory:内存,字符串类型 HugePages1Gi:1G大页内存,字符串类型 HugePages2Mi:2M大页内存,字符串类型 OS:节点OS,字符串类型 KernelVersion:OS内核版本,字符串类型 RuntimeVersion:节点容器运行及版本,字符串类型 InternalIP:内部IP,字符串类型 ExternalIP:外部IP,字符串类型 MachineID:节点ID,字符串类型。说明:CCE中能够保证与ECS的ID一致 Workloads:工作负载 Deployment:工作负载类型,支持Deployment(无状态负载)、StatefulSet(有状态负载)、DaemonSet(守护进程集)、CronJob(定时任务)、Job(普通任务)、LonePod(独立Pod) default:命名空间名称 Count:数量,整型 Items:详细信息,数组类型 Name:工作负载名称,字符串类型 Namespace:命名空间名称,字符串类型 NodeAffinity:节点亲和性,布尔型 Replicas:副本数量,整型 Storage:存储 PersistentVolumes:持久卷 pv-name:以PV名称为key VolumeID:卷ID,字符串类型 Namespace:命名空间,字符串类型 PvcName:绑定PVC的名称,字符串类型 ScName:存储类的名称,字符串类型 Size:申请空间大小,字符串类型 Pods:使用PV的Pod名称,字符串类型 NodeIP:Pod所在的节点IP,字符串类型 VolumePath:该Pod挂载节点的路径,字符串类型 OtherVolumes:其它类型卷 类型:AzureFile、AzureDisk、GCEPersistentDisk、AWSElasticBlockStore、Cinder、Glusterfs、NFS、CephFS、FlexVolume、FlexVolume、DownwardAPI 卷ID/卷名称/卷共享路径等为key Pods:使用其的Pod,字符串类型 NodeIP:Pod所在的节点IP,字符串类型 卷ID/卷名称/卷共享路径等唯一标识卷信息的信息,字符串类型 Networks:网络 LoadBalancer:负载均衡类型 service:网络类型,包括service和ingress Name:名称,字符串类型 Namespace:命名空间名称,字符串类型 Type:类型,字符串类型 ExtraSecrets:扩展secret类型 secret类型名,字符串类型 Images:镜像 镜像repo,字符串类型 } 示例: { "K8sVersion": "v1.19.10-r0-CCE22.3.1.B009", "Namespaces": 12, "Pods": 33, "Nodes": { "10.1.17.219": { "CPU": "4", "Memory": "7622944Ki", "HugePages1Gi": "0", "HugePages2Mi": "0", "Arch": "amd64", "OS": "EulerOS 2.0 (SP9x86_64)", "KernelVersion": "4.18.0-147.5.1.6.h687.eulerosv2r9.x86_64", "RuntimeVersion": "docker://18.9.0", "InternalIP": "10.1.17.219", "ExternalIP": "", "MachineID": "0c745e03-2802-44c2-8977-0a9fd081a5ba" }, "10.1.18.182": { "CPU": "4", "Memory": "7992628Ki", "HugePages1Gi": "0", "HugePages2Mi": "0", "Arch": "amd64", "OS": "EulerOS 2.0 (SP5)", "KernelVersion": "3.10.0-862.14.1.5.h520.eulerosv2r7.x86_64", "RuntimeVersion": "docker://18.9.0", "InternalIP": "10.1.18.182", "ExternalIP": "100.85.xxx.xxx", "MachineID": "2bff3d15-b565-496a-817c-063a37eaf1bf" } }, "Workloads": { "CronJob": {}, "DaemonSet": { "default": { "Count": 1, "Items": [ { "Name": "kubecost-prometheus-node-exporter", "Namespace": "default", "NodeAffinity": false, "Replicas": 3 } ] } }, "Deployment": { "default": { "Count": 1, "Items": [ { "Name": "kubecost-cost-analyzer", "Namespace": "default", "NodeAffinity": false, "Replicas": 1 } ] }, "kubecost": { "Count": 1, "Items": [ { "Name": "kubecost-kube-state-metrics", "Namespace": "kubecost", "NodeAffinity": false, "Replicas": 1 } ] } }, "Job": {}, "LonePod": {}, "StatefulSet": { "minio-all": { "Count": 1, "Items": [ { "Name": "minio", "Namespace": "minio-all", "NodeAffinity": false, "Replicas": 1 } ] } } }, "Storage": { "PersistentVolumes": { "demo": { "VolumeID": "demo", "Namespace": "fluid-demo-test", "PvcName": "demo", "ScName": "fluid", "Size": "100Gi", "Pods": "", "NodeIP": "", "VolumePath": "" }, "pvc-fd3a5bb3-119a-44fb-b02e-96b2cf9bb36c": { "VolumeID": "82365752-89b6-4609-9df0-007d964b7fe4", "Namespace": "minio-all", "PvcName": "pvc-data-minio-0", "ScName": "csi-disk", "Size": "10Gi", "Pods": "minio-all/minio-0", "NodeIP": "10.1.23.159", "VolumePath": "/var/lib/kubelet/pods/5fc47c82-7cbd-4643-98cd-cea41de28ff2/volumes/kubernetes.io~csi/pvc-fd3a5bb3-119a-44fb-b02e-96b2cf9bb36c/mount" } }, "OtherVolumes": {} }, "Networks": { "LoadBalancer": {} }, "ExtraSecrets": [ "cfe/secure-opaque", "helm.sh/release.v1" ], "Images": [ "nginx:stable-alpine-perl", "ghcr.io/koordinator-sh/koord-manager:0.6.2", "swr.cn-north-4.myhuaweicloud.com/paas/minio:latest", "swr.cn-north-4.myhuaweicloud.com/everest/e-backup-test:v1.0.0", "gcr.io/kubecost1/cost-model:prod-1.91.0", "gcr.io/kubecost1/frontend:prod-1.91.0" ] }
  • 步骤二:目标集群评估 在kspider执行完毕后,除了“cluster-*.json”文件之外,还会在当前目录下生成“preferred-*.json”文件。这个文件基于源集群的规模和节点规格进行初步评估,并提供关于目标集群版本和规模的推荐信息。这有助于您更好地规划和准备迁移过程。 “preferred-*.json”文件说明如下: { K8sVersion:Kubernetes版本,字符串类型 Scale:集群规模,字符串类型 Nodes:节点信息 CPU:CPU,字符串类型 Memory:内存,字符串类型 Arch:架构,字符串类型 KernelVersion:OS内核版本,字符串类型 ProxyMode:集群Proxy模式,字符串类型 ELB:是否依赖ELB,布尔型 } 上述文件中每个字段的评估规则如下: 表1 评估规则 字段 评估规则 Kubernetes版本 如果是1.21以下版本,推荐UCS集群主要发行版本(例如1.21,随着时间发展会发生变化),大于主要发行版本时,将推荐UCS集群的最新版本。 集群规模 源集群节点数<25,推荐50节点规模 25≤源集群节点数<100,推荐200节点规模 100≤源集群节点数<500,推荐1000节点规模 源集群节点数≥500,推荐2000节点规模 CPU+内存 统计数量最多的那一种规格 架构 统计数量最多的那一种规格 OS内核版本 统计数量最多的那一种规格 集群Proxy模式 根据集群规模来设置,大于1000节点规模的集群,推荐使用ipvs,1000以内的推荐使用iptables。 是否依赖ELB 源集群是否有负载均衡类型的Service 示例: { "K8sVersion": "v1.21", "Scale": 50, "Nodes": { "CPU": "4", "Memory": "7622952Ki", "Arch": "amd64", "KernelVersion": "3.10.0-862.14.1.5.h520.eulerosv2r7.x86_64" }, "ELB": false, "ProxyMode": "iptables" } 评估结果仅供参考,最终选择什么版本、规模的目标集群还需要您综合判断。
  • kspider使用方法 kspider工具支持在Linux(x86、arm)和Windows环境中运行,使用方法相似。本文将以Linux(x86)环境为例进行介绍。 若使用Linux(arm)或Windows环境,请将下述命令中的kspider-linux-amd64分别替换为kspider-linux-arm64或kspider-windows-amd64.exe。 根据容器迁移准备工作章节的要求,准备一台服务器并上传kspider工具,然后进行解压缩。在kspider工具所在目录下执行./kspider-linux-amd64 -h,您可以查看该工具的使用方法。 -k, --kubeconfig:指定kubectl的KubeConfig位置,默认是$HOME/.kube/config。kubeConfig文件:用于配置对Kubernetes集群的访问,KubeConfig文件中包含访问注册Kubernetes集群所需要的认证凭据以及Endpoint(访问地址),详细介绍可参见Kubernetes文档。 -n, --namespaces:指定采集的命名空间,默认排除了kube-system、kube-public、kube-node-lease等系统命名空间。 -q, --quiet:静态退出。 -s, --serial:根据采集信息输出汇聚文件(cluster-{serial}.json)和推荐文件(preferred-{serial}.json)唯一标识的序号。 $ ./kspider-linux-amd64 -h A cluster information collection and recommendation tool implement by Go. Usage: kspider [flags] Aliases: kspider, kspider Flags: -h, --help help for kspider -k, --kubeconfig string The kubeconfig of k8s cluster's. Default is the $HOME/.kube/config. (default "$HOME/.kube/config") -n, --namespaces string Specify a namespace for information collection. If multiple namespaces are specified, separate them with commas (,), such as ns1,ns2. default("") is all namespaces -q, --quiet command to execute silently -s, --serial string User-defined sequence number of the execution. The default value is the time when the kspider is started. (default "1673853404")
  • kspider工作原理 kspider工具的架构如图1所示,包含三个模块:采集模块、连接管理和分析模块。采集模块可以收集源集群的数据,包括命名空间、工作负载、节点、网络等;连接管理模块负责与源集群的API Server建立连接;分析模块分为聚合输出和评估推荐两部分,旨在输出源集群的采集数据(生成“cluster-*.json”文件)以及提供目标集群的推荐信息(生成“preferred-*.json”文件)。 图1 kspider架构
  • 创建守护进程集 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 在“容器舰队”页签下找到已开通集群联邦的舰队,单击名称进入详情页。 在左侧导航栏中选择“工作负载”,切换至“守护进程集”页签,并单击右上角“镜像创建”。 若使用已有的YAML创建工作负载,请单击右上角“YAML创建”。 设置工作负载基本信息。 负载类型:选择“守护进程集”。 负载名称:新增工作负载的名称,命名必须唯一。 命名空间:选择工作负载所在命名空间。如需新建命名空间,请参见创建命名空间。 描述:工作负载的描述信息。 设置工作负载容器配置。 Pod中可以配置多个容器,您可以单击右侧“添加容器”为Pod配置多个容器并分别进行设置。 基本信息: 表1 基本信息参数说明 参数 说明 容器名称 为容器命名。 镜像名称 单击后方“选择镜像”,选择容器使用的镜像。 我的镜像:当前区域下华为云镜像仓库中的镜像。若无可用的镜像,可单击“上传镜像”进行上传。 镜像中心:开源镜像仓库中的官方镜像。 共享镜像:由他人账号共享的私有镜像,详情请参见共享私有镜像。 镜像版本 选择需要部署的镜像版本。 更新策略 镜像更新/拉取策略。勾选“总是拉取镜像”表示每次都从镜像仓库拉取镜像;如不勾选则优先使用节点已有的镜像,如果没有这个镜像再从镜像仓库拉取。 CPU配额 申请:容器需要使用的最小CPU值,默认0.25Core。 限制:允许容器使用的CPU最大值。建议设容器配额的最高限额,避免容器资源超额导致系统故障。 内存配额 申请:容器需要使用的内存最小值,默认512MiB。 限制:允许容器使用的内存最大值。如果超过,容器会被终止。 关于CPU/内存配额申请和限制的具体说明请参见设置容器规格。 初始化容器 选择容器是否作为初始化容器。 Init 容器是一种特殊容器,在 Pod 内的应用容器启动之前运行。详细说明请参见Init 容器。 生命周期:设置生命周期回调函数可在容器的特定阶段执行调用,比如容器在停止前希望执行某项操作,就可以设置相应的函数。目前提供的生命周期回调函数有启动命令、启动后处理、停止前处理,详情请参见设置容器生命周期。 健康检查:设置健康检查可以在容器运行过程中定时检查容器的健康状况,详情请参见设置容器健康检查。 环境变量:容器运行环境中设定的一个变量,通过环境变量设置的配置项不会随着Pod生命周期结束而变化,详情请参见设置环境变量。 数据存储:配置容器存储,可以使用本地存储和存储卷声明(PVC)。建议使用PVC将工作负载Pod数据存储在 云存储 上。若存储在本地磁盘上,节点异常无法恢复时,本地磁盘中的数据也将无法恢复。容器存储相关内容请参见容器存储。 安全设置:对容器权限进行设置,保护系统和其他容器不受其影响。请输入用户ID,容器将以当前用户权限运行。 镜像访问凭证:用于访问镜像仓库的凭证。该凭证仅访问私有镜像仓库时使用,如所选镜像为公开镜像,则无需选择密钥。密钥的创建方法请参见创建密钥。 (可选)单击服务配置栏的,进行工作负载服务配置。 若工作负载需要和其它服务互访,或需要被公网访问,您需要添加服务(Service),设置访问方式。工作负载访问的方式决定了这个工作负载的网络属性,不同访问方式的工作负载可以提供不同网络能力,操作详情请参见服务与路由。 您也可以在创建完工作负载之后再创建Service,参见集群内访问(ClusterIP)和节点访问(NodePort)。 Service名称:新增服务名称,用户可自定义,服务名称必须唯一。 访问类型: 集群内访问(ClusterIP):只能集群内访问服务。 节点访问(NodePort):可以通过集群内任意节点访问到服务。 服务亲和(仅节点访问设置): 集群级别:集群下所有节点的IP+访问端口均可以访问到此服务关联的负载,服务访问会因路由跳转导致一定性能损失,且无法获取到客户端源IP。 节点级别:只有通过负载所在节点的IP+访问端口才可以访问此服务关联的负载,服务访问没有因路由跳转导致的性能损失,且可以获取到客户端源IP。 端口配置: 协议:TCP或UDP,请根据业务的协议类型选择。 服务端口:容器端口映射到集群虚拟IP上的端口,用虚拟IP访问应用时使用,端口范围为1-65535,可任意指定。 容器端口:容器镜像中应用程序实际监听的端口,需用户确定。例如:nginx程序实际监听的端口为80。 节点端口(仅节点访问设置):容器端口映射到节点私有IP上的端口,用私有IP访问应用时使用,端口范围为30000-32767,建议选择“自动生成”。 自动生成:系统会自动分配端口号。 指定端口:指定固定的节点端口,默认取值范围为30000-32767。若指定端口时,请确保同个集群内的端口唯一性。 (可选)单击“展开高级配置”,设置工作负载高级配置。 升级策略:指定守护进程集的升级方式,包括整体替换升级和逐步滚动升级,详细参数说明请参见配置工作负载升级策略。 滚动升级:滚动升级将逐步用新版本的实例替换旧版本的实例,升级的过程中,业务流量会同时负载均衡分布到新的和旧的实例上,因此业务不会中断。 替换升级:守护进程集的替换升级,需要手动删除旧实例,再创建新实例。升级过程中业务会中断。 调度策略:您可设置亲和(affinity)与反亲和(anti-affinity)实现Pod的计划性调度,详细信息请参见配置调度策略(亲和与反亲和)。 标签与注解:您可以单击“添加”为Pod增加标签或注解,新增标签或注解的键不能与已有的重复。 单击“下一步:调度与差异化”,对选择的集群进行调度与差异化配置。在选择可调度集群后,可对容器进行“差异化配置”。 调度策略: 调度方式: 复制分发:工作负载将在勾选的所有集群中进行部署。 部署集群:单击集群即可将其勾选为工作负载可调度的集群,集群个数请您根据自身业务进行确定。 差异化配置: 工作负载在不同的集群中部署可进行差异化的配置。在选择可调度集群后单击对应集群右上角,即可对每个集群进行差异化配置,差异化后的容器配置只对该集群生效。 具体参数说明请参见容器配置。 设置完成后,单击“创建工作负载”完成创建。
  • 通过控制台配置调度策略 登录UCS控制台,进入集群联邦页面。 在创建工作负载时,在“高级配置”中找到“调度策略”。 表1 节点亲和性设置 参数名 参数描述 必须满足 即硬约束,设置必须要满足的条件,对应于requiredDuringSchedulingIgnoredDuringExecution,多条规则间是一种“或”的关系,即只需要满足一条规则即会进行调度。 尽量满足 即软约束,设置尽量满足的条件,对应于preferredDuringSchedulingIgnoredDuringExecution,无论是满足其中一条或者是都不满足都会进行调度。 在“节点亲和性”、“工作负载亲和性”、“工作负载反亲和性”下单击添加调度策略。 表2 调度策略设置 参数名 参数描述 标签名 对应节点的标签,可以使用默认的标签也可以用户自定义标签。 操作符 可以设置六种匹配关系(In, NotIn, Exists, DoesNotExist. Gt, and Lt)。 In:是否在标签值的列表中 NotIn:是否不在标签值的列表中 Exists:某个标签存在 DoesNotExist:某个标签不存在 Gt:标签的值大于某个值(字符串比较) Lt:标签的值小于某个值(字符串比较) 标签值 请填写标签值。 命名空间 仅支持在工作负载亲和/工作负载反亲和调度策略中使用。 指定调度策略生效的命名空间。 拓扑域 仅支持在工作负载亲和/工作负载反亲和调度策略中使用。 先圈定拓扑域(topologyKey)指定的范围,然后再选择策略定义的内容。 权重 仅支持在“尽量满足”策略中添加。
  • 污点(Taints)说明 污点格式为“Key=Value:Effect”,Key和Value作为污点的标签,Value可以为空,Effect用于描述污点的效果。当前Effect支持如下两个选项: NoSchedule:不能容忍此污点的 Pod 不会被调度到集群上,但是现有 Pod 不会从集群中逐出。 NoExecute:表示不能容忍此污点的 Pod 不会被调度到集群上,同时会将集群上已存在的Pod驱逐。
  • 管理集群标签/污点 登录UCS控制台。 单击目标集群所在的容器舰队名称,在左侧导航栏选择“容器集群”,找到目标集群,在右上角单击进入“标签与污点管理”。 单击按钮,设置节点标签/污点。如需执行多项操作,可多次添加,最多支持10条操作。 图1 添加标签/污点 选择“添加”或“删除”操作。 选择操作对象为“K8S标签”或“污点(Taints)”。 填写需要增加标签/污点的“键”和“值”。 如选择操作对象为“污点(Taints)”,需选择污点效果,关于污点效果说明请参见污点(Taints)说明。 单击“确定”,对所选节点执行标签/污点操作。
  • 约束与限制 仅华为云账号或具备UCS FullAccess权限的用户可进行策略中心的启用操作。 为非华为云集群启用策略中心前,请确保集群能够拉取公网镜像。 启用策略中心功能后,系统将在舰队或集群上安装Gatekeeper插件。需要注意的是,插件会占用部分集群资源(如表1所示)。因此,在启用策略中心功能之前,请确保您的集群具有足够的资源。这将有助于确保策略中心功能的顺利部署,同时避免对现有工作负载的性能产生负面影响。 表1 Gatekeeper插件的资源占用情况 CPU Mem Requests:100m * 3 Limits:1000m * 3 Requests:256Mi * 3 Limits:512Mi * 3 “* 3”表示有3个Pod。 当舰队或集群处于启用中的状态时,请避免在该舰队或集群上执行任何操作。在启用过程中执行操作可能会影响启用的成功。
  • 操作步骤 登录UCS控制台,在左侧导航栏中选择“策略中心”。 单击页面中的“启用”按钮,弹出“启用策略管理功能”对话框。 在下拉列表中选择容器舰队或集群,单击“确定”,返回主页面。 您将会看到舰队或集群的策略管理状态显示为启用中。请耐心等待大约3分钟,策略管理将成功启用。 如果在启用策略管理功能时出现“The thorttling threshold has been reached: policy ip over ratelimit”,说明因为启用集群较多被限流了,请稍等一会再重试即可。
  • image-migrator使用方法 image-migrator工具支持在Linux(x86、arm)和Windows环境中运行,使用方法相似。本文将以Linux(x86)环境为例进行介绍。 若使用Linux(arm)或Windows环境,请将下述命令中的image-migrator-linux-amd64分别替换为image-migrator-linux-arm64或image-migrator-windows-amd64.exe。 在image-migrator工具所在目录下执行./image-migrator-linux-amd64 -h,可以查看image-migrator工具的使用方法。 --auth:指定auth.json的路径,默认在image-migrator所在目录下。 --images:指定images.json的路径,默认在image-migrator所在目录下。 --log:指定image-migrator生成日志的路径,默认是image-migrator当前目录下的image-migrator.log。 --namespace:默认的目标仓库的namespace,也就是说,如果images.json中没有指定目标仓库中的namespace,可以在执行迁移命令时指定。 --registry:默认的目标仓库的registry,也就是说,如果images.json中没有指定目标仓库中的registry,可以在执行迁移命令时指定。 --retries:迁移失败时的重试次数,默认为3。 --workers:镜像搬迁的worker数量(并发数),默认是7。 $ ./image-migrator-linux-amd64 -h A Fast and Flexible docker registry image images tool implement by Go. Usage: image-migrator [flags] Aliases: image-migrator, image-migrator Flags: --auth string auth file path. This flag need to be pair used with --images. (default "./auth.json") -h, --help help for image-migrator --images string images file path. This flag need to be pair used with --auth (default "./images.json") --log string log file path (default "./image-migrator.log") --namespace string default target namespace when target namespace is not given in the images config file, can also be set with DEFAULT_NAMESPACE environment value --registry string default target registry url when target registry is not given in the images config file, can also be set with DEFAULT_REGISTRY environment value -r, --retries int times to retry failed tasks (default 3) -w, --workers int numbers of working goroutines (default 7) $./image-migrator --workers=5 --auth=./auth.json --images=./images.json --namespace=test \ --registry=swr.cn-north-4.myhuaweicloud.com --retries=2 $ ./image-migrator Start to generate images tasks, please wait ... Start to handle images tasks, please wait ... Images(38) migration finished, 0 images tasks failed, 0 tasks generate failed 示例如下: ./image-migrator --workers=5 --auth=./auth.json --images=./images.json --namespace=test --registry=swr.cn-north-4.myhuaweicloud.com --retries=2 该命令表示将“images.json”文件中的镜像迁移至“swr.cn-north-4.myhuaweicloud.com/test”镜像仓库下,迁移失败时可以重试2次,一次可以同时搬迁5个镜像。
  • 镜像迁移操作步骤 准备镜像仓库访问权限文件:auth.json。 新建一个auth.json文件,并按照格式修改,如果是匿名访问仓库,则不需要填写用户名、密码等信息。将文件放置在image-migrator所在目录下。 示例: { "quay.io/coreos": { }, "swr.cn-north-4.myhuaweicloud.com": { "username": "cn-north-4@RVHVMX******", "password": "***************", "insecure": true } } 详细的参数说明请参见“auth.json”文件。 准备镜像列表文件:images.json。 通过kubectl连接源集群。具体方法可参考使用kubectl连接集群。 执行镜像迁移config子命令,生成images.json文件。 您可以参考image-migrator config使用方法中的方法和示例,不指定命名空间,或者指定一个、多个命名空间来获取源集群应用中使用的镜像。 根据需求调整images.json文件内容,但要遵循“images.json”文件中所讲的八项要求。 镜像迁移。 您可以执行默认的./image-migrator-linux-amd64命令进行镜像迁移,也可以根据需要设置image-migrator的参数。 例如以下命令: ./image-migrator-linux-amd64 --workers=5 --auth=./auth.json --images=./images.json --namespace=test --registry=swr.cn-north-4.myhuaweicloud.com --retries=2 示例: $ ./image-migrator-linux-amd64 Start to generate images tasks, please wait ... Start to handle images tasks, please wait ... Images(38) migration finished, 0 images tasks failed, 0 tasks generate failed 结果查看。 上述命令执行完毕后,回显如下类似信息: Images(38) migration finished, 0 images tasks failed, 0 tasks generate failed 表示按照配置,成功将38个镜像迁移到SWR仓库中。
共100000条