云服务器内容精选

  • 实践概述 代码开发完成后,每次上线前都需要先在Jenkins上打包成镜像包或Jar包,再将镜像包上传到SWR镜像仓库或者将Jar包上传到OBS对象存储,然后再使用ServiceStage升级组件版本配置。该流程较为繁琐,频繁发版本测试导致开发和运维效率低、用户体验差。 如果您的代码在GitLab上管理,使用ServiceStage进行应用托管并且已经部署了组件,则可以通过使用GitLab对接Jenkins自动构建打包,升级已经部署在ServiceStage上的组件版本配置。 本实践通过输出在Jenkins构建打包完成之后自动升级组件的shell脚本,实现了代码合入后自动构建打包并在ServiceStage上滚动升级组件。 父主题: 使用GitLab对接Jenkins自动构建并滚动升级部署到ServiceStage的组件
  • 脚本参数说明 参数 是否必须 参数类型 描述 region 是 String Region名称。获取方法,请参考参数值获取。 project_id 是 String 项目ID。获取方法,请参考参数值获取。 application_id 是 String 应用ID。获取方法,请参考参数值获取。 component_id 是 String 组件ID。获取方法,请参考参数值获取。 rolling_release_batches 是 int 分批部署批次。 deploy_type 是 String 部署类型。 package表示软件包部署。 image表示镜像部署。 obsutil 否 String 当使用软件包部署如jar包部署时为必选参数,上传jar包到obs的工具安装的绝对路径。例如:/root/tools/obsutil/obsutil_linux_amd64_5.4.6/obsutil。 bucket 否 String 当使用软件包部署时为必选参数,上传到obs的桶路径,格式为obs://{桶名称},例如:obs://obs-mzc。 obs_jar_url 否 String 当使用软件包部署时为必选参数。软件包上传obs后的链接,格式为obs://{桶名}/{软件包名}。例如,obs://obs-mzc/spring-demo-0.0.1-SNAPSHOT.jar。 machine_image_name 否 String 当使用镜像部署时为必选参数,Jenkins打包构建后生成的镜像,格式为:{镜像名称}:{版本},例如:java-test:v1。 swr_image_url 否 String 当使用镜像部署时为必选参数,上传到SWR镜像仓库的镜像包路径,格式为:{镜像仓库地址}/{组织名称}/{镜像包名称}:{版本},其中SWR镜像仓库地址格式为:swr.{区域所属项目名称}.myhuaweicloud.com。 AK 否 String 当使用镜像部署时为必选参数。访问密钥ID,即AK,用于登录SWR镜像仓库。获取方法,请参考访问密钥。 SK 否 String 当使用镜像部署时为必选参数。与访问密钥ID(AK)结合使用的密钥,即SK,用于登录SWR镜像仓库。获取方法,请参考访问密钥。 login_secret 否 String 当使用镜像部署时为必选参数。SWR镜像仓库的登录密钥,用于登录SWR镜像仓库。执行如下命令,返回的结果就是登录密钥: printf "{AK}" | openssl dgst -binary -sha256 -hmac "{SK}" | od -An -vtx1 | sed 's/[ \n]//g' | sed 'N;s/\n//' {AK}、{SK}请替换为已获取到的AK、SK的值。 swr_url 否 String 当使用镜像部署时为必选参数。SWR镜像仓库地址,格式为:swr.{区域所属项目名称}.myhuaweicloud.com
  • 配置构建触发器 配置Jenkins构建触发器。 勾选“Build when a change is pushed to GitLab”,保存GitLab webhook URL(配置Gitlab webhook时需使用),然后单击右下角“高级”。 选择“Filter branches by regex ”,配置指定分支变更后触发构建任务,示例中的分支名称为main,单击右下角“Generate”生成Secret token并保存,在配置GitLab webhook时需使用。 配置GitLab webhook。 登录GitLab,进入代码仓库,示例中的仓库名称是“test”,选择settings中的“Webhooks”,URL和Secret token填写1获取到的GitLab webhook URL和Secret token。 取消勾选SSL verification的“Enable SSL verification”,单击“Add webhook”。
  • 配置流水线脚本 流水线脚本是构建时运行的构建命令。 选择“流水线”页签,在下拉框选择“Pipeline script”。 配置如下所示流水线脚本,示例中使用的是构建jar包场景。 请使用您环境下的实际参数替换脚本中的参数变量。脚本参数说明,请参考表1。 流水线脚本运行时会调用upgrade.sh。脚本详细说明,请参考upgrade.sh脚本。 需要设置脚本文件upgrade.sh为可执行文件。 node { // 定义代码仓库地址,例如:http://10.95.156.58:8090/zmg/test.git def git_url = '{代码仓库地址}' // GitLab凭据id def credentials_id = '{GitLab凭据id}' // git代码仓库分支名称,例如:main def branch_name = '{git代码仓库分支名称}' // maven安装的可执行文件路径,例如 :/root/app/maven/apache-maven-3.8.6/bin/mvn def maven = '{maven安装的可执行文件路径}' // upgrade.sh脚本存放路径,例如:/root/jar/upgrade.sh def upgrade_shell = '{upgrade.sh脚本存放路径}' stage('Clone sources') { git branch: branch_name, credentialsId: credentials_id, url: git_url } stage('Build') { // 构建jar包 sh "'$maven' clean package -Dmaven.test.failure.ignore=true -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true" } stage('upgrade') { // 执行脚本,使用构建上传到obs的jar包升级ServiceStage组件,超时时间5分钟 sh "timeout 300s '$upgrade_shell'" } } 表1 流水线脚本参数说明 参数 是否必须 参数类型 描述 git_url 是 String GitLab代码仓库地址。 credentials_id 是 String 使用账号密码配置的GitLab凭据id,请参考创建GitLab凭证。 branch_name 是 String GitLab代码仓库分支名称。 maven 是 String maven安装的可执行文件路径,例如:/root/app/maven/apache-maven-3.8.6/bin/mvn。 upgrade_shell 是 String upgrade.sh脚本在Jenkins所在虚拟机上存放的路径,例如:/root/jar/upgrade.sh。脚本内容,请参考upgrade.sh脚本。 执行构建并验证构建结果,请参考构建验证。
  • ServiceStage最佳实践汇总 本文汇总了基于应用管理与运维平台(ServiceStage)常见应用场景的操作实践,为每个实践提供详细的方案描述和操作指导,帮助您轻松掌握不同应用场景下ServiceStage的使用方法。 表1 ServiceStage最佳实践一览表 最佳实践 说明 使用ServiceStage托管和治理天气预报微服务应用 通过天气预报应用,展示了微服务架构设计理念的应用场景,以及使用ServiceStage管理运行环境、构建应用和治理微服务的最佳实践。 开启ServiceComb引擎专享版安全认证 ServiceComb引擎专享版支持基于RBAC(Role-Based Access Control,基于角色的访问控制)策略的安全认证,并支持开启/关闭安全认证。 引擎开启了安全认证之后,要求所有连接该引擎的微服务都要配置安全认证账号和密码。否则,微服务将注册失败,导致业务受损。 本章节介绍未开启安全认证的ServiceComb引擎专享版,开启安全认证并确保已接入引擎的微服务组件业务不受影响,即如何平滑开启安全认证。 ServiceComb引擎仪表盘中的数据通过ServiceStage对接到 AOM 接入ServiceComb引擎的Java Chassis应用,在ServiceComb引擎仪表盘上的实时监控数据默认保留5分钟。如果需要持久化存储历史监控数据用于后续查询分析,可以使用ServiceStage的自定义指标监控功能,将微服务显示到ServiceComb引擎仪表盘中的数据对接到AOM。 本章节以软件包部署应用为例,指导您完成将ServiceComb引擎仪表盘中的数据通过ServiceStage对接到AOM。 使用ServiceStage零代码修改实现微服务注册引擎迁移 本章节指导您将使用Java Chassis微服务框架开发并注册在ServiceComb引擎专业版上的微服务应用组件,零代码修改迁移注册到ServiceComb引擎专享版。 使用ServiceStage托管Spring Boot应用 Spring Boot是一个基于Spring框架的开源应用程序开发框架,可以帮助您快速构建可独立运行的、生产级别的应用程序。 本最佳实践使用Spring官方提供的样例代码,帮助您快速在ServiceStage上快速部署、访问和升级Spring应用。 使用GitLab对接Jenkins自动构建并滚动升级部署到ServiceStage的组件 代码开发完成后,每次上线前都需要先在Jenkins上打包成镜像包或Jar包,再将镜像包上传到SWR镜像仓库或者将Jar包上传到OBS对象存储,然后再使用ServiceStage升级组件版本配置。该流程较为繁琐,频繁发版本测试导致开发和运维效率低、用户体验差。 如果您的代码在GitLab上管理,使用ServiceStage进行应用托管并且已经部署了组件,则可以通过使用GitLab对接Jenkins自动构建打包,升级已经部署在ServiceStage上的组件版本配置。 本实践通过输出在Jenkins构建打包完成之后自动升级组件的shell脚本,实现了代码合入后自动构建打包并在ServiceStage上升级部署。 使用ServiceStage全链路流量控制实现Spring Cloud应用全链路灰度 在一个存在多个微服务组件的应用体系中,对其中一个微服务组件进行版本升级发布时,会涉及到其他微服务组件版本的变动升级。所以要求在灰度验证时能够使得灰度流量同时经过涉及到的所有微服务组件灰度版本。 但是在真实业务场景中,由于业务的微服务组件规模和数量很大,一条请求链路可能会经过很多个微服务组件。新功能发布时也可能会涉及到多个微服务组件同时变更,并且业务的微服务组件之间依赖错综复杂。频繁的组件版本发布、以及组件多版本并行开发导致流量治理规则日益膨胀,给整个系统的可维护性和稳定性带来了严重挑战。 对于以上问题和挑战,通过全链路流量控制功能将应用组件的相关版本隔离成一个独立的运行环境(即泳道),通过设置流控路由规则,可以将满足规则的请求流量路由到目标版本应用。 使用ServiceStage基于发布管理实现组件跨可用区搬迁和顺序升级 在实际业务中,考虑到机房故障问题,需要将服务部署在不同的可用区中以提高可用性。 但是,在不同可用区部署组件时每个组件都必须按需配置一遍,存在操作复杂、容易出错的问题。而且需要在组件创建完成后立即部署运行,并不支持创建后按需部署的需求。如果组件配置错误,会导致部署失败,需要删除后重新创建并部署。 使用ServiceStage的发布管理功能可以更好的实施组件跨可用区搬迁和顺序升级: 基于ServiceStage发布管理的批量克隆发布单实现组件的跨可用区搬迁。 基于ServiceStage发布管理的批量升级发布单实现组件跨可用区的升级,并指定在不同可用区组件的升级顺序。
  • 资源准备 创建一个 虚拟私有云VPC ,请参考创建虚拟私有云和子网。 创建两个处于不同可用区(例如:az1、az2)的CCE集群(例如:cce-az1、cce-az2)。如果只是试用场景,“集群规模”选择“50节点”,“集群master实例数”选择“单实例”即可。 请参考购买集群。 每个集群中至少包含1个规格为8vCPUs、16GB内存或者2个规格为4vCPUs、8GB内存的E CS 节点。 为CCE集群添加节点,请参考创建节点。 集群所在VPC为1创建的VPC。 创建集群时,需在“集群master实例数”下选择“指定集群master实例分布策略”,选择“自定义分配”将两个集群的master节点分配到不同的可用区。 集群中的ECS节点的可用区需要和其所在CCE集群master节点的可用区保持一致。 创建用于存储软件包的桶,请参考创建桶。
  • 使用ServiceStage托管天气预报微服务应用概述 天气预报微服务应用提供天气预报、紫外线和天气湿度展示等功能。本文通过天气预报应用,展示了微服务架构设计理念的应用场景,以及使用ServiceStage管理运行环境、构建应用和治理微服务的最佳实践。 天气预报应用由前端应用和后端应用组成。前端应用组件weathermapweb采用Node.js进行开发,实现前端应用发现后端应用。后端应用分别采用Java Chassis、Spring Cloud微服务开发框架实现,包括weather、forecast、fusionweather、weather-beta、edge-service等微服务组件。 其中: weathermapweb是一个基于Node.js语言开发的界面微服务。 weather是提供指定城市当前的天气情况的微服务。 forecast是提供指定城市未来几天天气情况预测的微服务。 fusionweather是一个聚合微服务,通过访问weather和forecast服务,提供全方位的天气预报功能。 weather-beta是weather微服务的新版本,新增了查询指定城市紫外线情况的功能。 edge-service为所有其它微服务的统一入口。 天气预报各个后端应用组件详细说明,请参考表1。 表1 天气预报组件说明 微服务开发框架 组件名称 Java Chassis weather forecast fusionweather weather-beta edge-service weathermapweb Spring Cloud weather forecast fusionweather weather-beta edge-service weathermapweb 天气预报的逻辑组网和调用关系图如下: ServiceStage支持通过源码、软件包方式部署并接入Java Chassis、Spring Cloud微服务开发框架开发的微服务应用。 本最佳实践使用基于Java Chassis微服务开发框架开发的天气预报应用,提供了使用源码部署天气预报微服务和使用软件包部署天气预报微服务两种微服务应用部署方法,为您展示使用ServiceStage托管和治理微服务应用的能力。 父主题: 使用ServiceStage托管和治理天气预报微服务应用
  • 生成GitLab访问令牌 登录GitLab。 鼠标移动到右上角的账号名上,单击“Edit profile”。 单击“Access Tokens”,输入“Token name”,勾选“api”,单击“Create personal access token”创建访问令牌。 完成后在页面上方的“Personal Access Tokens”右侧显示token令牌。 令牌仅在初次生成时显示,否则下次需要重新创建。该令牌仅用于GitLab对接测试。
  • 前提条件 只能在应用下新增组件,需要先创建应用,请参考创建应用。 组件需要部署在指定环境下,需要先创建Kubernetes类型环境并纳管资源,请参考环境管理。 需要根据组织管理组件构建生成的镜像,需要先创建组织,请参考创建组织。 需要根据命名空间隔离构建数据和组件实例,需要先创建命名空间,请参考创建命名空间。 如果您基于“源码仓库”创建组件,那么您首先需要创建仓库授权,请参考创建仓库授权。 如果您基于软件包创建组件,那么您首先需要将软件包上传至CodeArts软件发布库、SWR软件仓库或者OBS对象存储中。 将软件包上传至CodeArts软件发布库,请参考上传软件包。 将软件包上传至SWR软件仓库,请参考上传软件包。 将软件包上传至OBS对象存储中,请参考流式上传(PUT上传)。 如果组件来源为软件包且需要使用例如JFrog(制品仓库)作为软件包存储仓库,支持自定义HTTP/HTTPS协议的文件地址下载。您需要提前将软件包上传至对应的自定义文件地址下。 如果上传软件包失败,请参考如何解决上传软件包失败的问题?。 如果您基于镜像包创建组件,请参考组件来源说明准备镜像。 如果您需要基于组件草稿创建组件,请参考本章节保存组件草稿。
  • 修改环境 登录ServiceStage控制台。 选择“环境管理”,进入“环境管理”页面。 选择如下方式进入“编辑环境”页面: 直接编辑:选择待操作环境,在“操作”列单击“编辑”。 查看环境详情后编辑:单击待操作环境名称,进入环境“概览”页面,单击“编辑”。 参考下表编辑环境信息。 参数 参数说明 环境名称 环境的名称。 长度为2到64个字符,可以包含英文字母、数字、下划线(_)或中划线(-),以英文字母开头、英文字母或者数字结尾,英文字母区分大小写。 企业项目 企业项目是一种云资源管理方式,企业项目管理服务提供统一的云资源按项目管理,以及项目内的资源管理、成员管理。 已开通企业项目后可以使用。 单击下拉列表,可以选择使用已有企业项目。 单击“新建企业项目”,可以参考创建企业项目创建并选择使用新建的企业项目。 环境标签 标签用于标识资源,当您拥有相同类型的许多资源时,可以使用标签按各种维度(例如用途、所有者或环境)对资源进行分类。 如果您的组织已经设定ServiceStage服务的相关标签策略,则需按照标签策略规则添加标签。标签如果不符合标签策略的规则,则可能会导致编辑环境失败,请联系组织管理员了解标签策略详情。 同一个环境下最多可以添加20个标签。 删除标签 单击待删除标签后的。 新增标签 单击“添加标签”,弹出“添加标签”对话框。 单击“新增标签”。 输入标签对应的key值和value值。 key值:长度为1到36个字符,只能包含数字、英文字母、下划线(_)、中划线(-)或中文。 value值:长度为1到43个字符,只能包含数字、英文字母、下划线(_)、点(.)、中划线(-)或中文。 如果您需要使用同一标签标识多种资源,即所有资源均可在标签输入框下拉选择同一标签,建议在TMS中创建预定义标签。 单击“确定”。 描述 环境描述信息,长度不超128个字符。 单击“保存”,完成环境修改。
  • 创建配置项 登录ServiceStage控制台。 选择“环境管理”,进入“环境管理”页面。 单击待操作环境名称,进入环境“概览”页面。 选择“计算”资源类型下的资源名称“云容器引擎 CCE”。 进入“配置项”列表页面。 非高可用环境:选择“配置项”页签。 高可用环境:单击已绑定CCE集群名称,选择“配置项”页签。 单击“创建配置项”。 ServiceStage支持“可视化”和“YAML”两种创建方式来创建配置项。 方式一:可视化。 参照表1设置配置项参数,其中带“*”标志的参数为必填参数。 表1 可视化方式创建配置项参数设置说明 参数 说明 *配置名称 新建的配置项名称,同一个命名空间里必须唯一。 长度为4到24个字符,可以包含英文小写字母、数字和中划线(-),以英文小写字母开头、英文小写字母或者数字结尾。 *所属集群 使用新建配置项的集群。 *命名空间 新建配置项所在的命名空间。 描述 配置项的描述信息,长度范围为0到255个字符。 配置数据 应用配置的数据可以在应用中使用,或被用来存储配置数据。其中,“键”代表文件名;“值”代表文件中的内容。 单击“添加更多配置数据”。 输入键、值。 配置数据的键必须由数字、字母、点号(.)、中划线(-)或下划线(_)组成,长度为1到63个字符。 配置数据的值长度为0到1,048,576个字符。 配置标签 标签以键值对的形式附加到各种对象上(如应用、节点、服务等)。标签定义了这些对象的可识别属性,用来对它们进行管理和选择。 单击“添加标签” 。 输入键、值。 标签的键由数字、字母、点号(.)、中划线(-)、下划线(_)或斜杠(/)组成,必须以字母或者数字开头和结尾,长度为1到63个字符。 标签的值由数字、字母、点号(.)、中划线(-)或下划线(_)组成,必须以字母或者数字开头和结尾,长度为1到63个字符。 图1 可视化方式设置配置项参数 方式二:YAML。 若需要通过上传文件的方式创建配置项,请确保已创建格式为YAML的ConfigMap资源文件,且文件小于1MB。详情请参考ConfigMap资源文件要求。 在“所属集群”下拉框中,选择相应的集群。 选择以下任一方式设置ConfigMap资源文件。 单击“上传文件”,选择本地已创建的ConfigMap资源文件后,单击“打开”,等待文件上传成功。 在“编排内容”中写作或者修改ConfigMap资源文件。 图2 YAML方式设置配置项参数 单击“创建配置项”。 配置项创建完成后,应用配置列表中会出现新创建的应用配置。
  • ConfigMap资源文件要求 ConfigMap资源文件支持YAML文件格式,且文件大小不得超过1MB。 文件配置示例如下: apiVersion: v1 data: {} kind: ConfigMap metadata: annotations: description: '' labels: {} name: configmap-ww8qkl namespace: cse 配置项关键参数说明请参考表3。 表3 配置项关键参数说明 参数名称 参数说明 apiVersion 固定值:v1。 kind 固定值:ConfigMap。 metadata.name 配置项名称,可自定义。 data 键值对形式配置项数据。
  • 前提条件 只能在应用下新增组件,需要先创建应用,请参考创建应用。 组件需要部署在指定环境下,需要先创建Kubernetes类型环境并纳管资源,请参考环境管理。 需要根据组织管理组件构建生成的镜像,需要先创建组织,请参考创建组织。 需要根据命名空间隔离构建数据和组件实例,需要先创建命名空间,请参考创建命名空间。 如果您基于“源码仓库”创建组件,那么您首先需要创建仓库授权,请参考创建仓库授权。 如果您基于软件包创建组件,那么您首先需要将软件包上传至CodeArts软件发布库、SWR软件仓库或者OBS对象存储中。 将软件包上传至CodeArts软件发布库,请参考上传软件包。 将软件包上传至SWR软件仓库,请参考上传软件包。 将软件包上传至OBS对象存储中,请参考流式上传(PUT上传)。 如果组件来源为软件包且需要使用例如JFrog(制品仓库)作为软件包存储仓库,支持自定义HTTP/HTTPS协议的文件地址下载。您需要提前将软件包上传至对应的自定义文件地址下。 如果上传软件包失败,请参考如何解决上传软件包失败的问题?。 如果您基于镜像包创建组件,请参考组件来源说明准备镜像。 如果您需要基于组件草稿创建组件,请参考本章节保存组件草稿。
  • 前提条件 只能在应用下导入组件,需要创建应用,请参考创建应用。 组件需要部署在指定Kubernetes类型环境下,需要创建环境并绑定待导入的工作负载所在的CCE集群等资源用于部署和运行组件,请参考环境管理。 基于Kubernetes类型的环境创建并部署组件,需要创建命名空间用于隔离构建数据,请参考创建命名空间。 待导入的无状态或者有状态工作负载已经在CCE中创建且未被导入,请参考创建工作负载。 如果需要启用多容器部署,请在创建工作负载时,添加并配置多个容器。可以指定某个容器为初始化容器,用于业务容器启动前安装特定工具或脚本。多个容器中,至少需要指定一个容器作为业务容器(非初始化容器)。初始化容器详情,请参考Init容器。 导入工作负载创建组件时,组件包参数配置固定为创建工作负载时的设置,不可修改。 导入CCE工作负载创建组件使用的Docker技术栈需启用且处于“启用中 ”状态。如果Docker技术栈未启用,请参考启用技术栈启用Docker技术栈。
  • 创建命名空间 登录ServiceStage控制台。 选择“环境管理”,进入“环境管理”页面。 单击待操作环境名称,进入环境“概览”页面。 选择“计算”资源类型下的资源名称“云容器引擎 CCE”。 进入“命名空间”列表页面。 高可用环境:单击环境已绑定的CCE集群名称,选择“命名空间”页签。 非高可用环境:选择“命名空间”页签。 单击“创建命名空间”,参考下表填写参数,其中带“*”标志的参数为必填参数。 参数 说明 *命名空间 命名空间的名称。 命名空间名称必须唯一,长度为1到63个字符,可以包含英文小写字母、数字和中划线(-),以英文小写字母开头、以英文小写字母或者数字结尾。 命名空间描述 命名空间的描述信息,长度不超过200个字符。 图1 设置命名空间参数 单击“确定”。 创建成功的命名空间会显示在命名空间列表。需要执行绑定命名空间才能被绑定到环境绑定的CCE集群下。