华为云用户手册

  • 创建环境 登录CAE控制台。 选择以下任意方式创建环境。 在您首次使用本服务时,页面会提醒您尚未创建环境。 单击创建环境卡片中的“立即创建”。 图1 创建环境 在弹出的对话框中输入对应的参数,具体参照表1。 表1 创建环境 参数 说明 环境名称 输入自定义的环境名称。 企业项目 设置企业项目。 企业项目管理提供了一种按企业项目管理云资源的方式,帮助您实现以企业项目为基本单元的资源及人员的统一管理,默认项目为default。 开通企业项目后可以使用。 虚拟私有云 下拉框中选择环境资源所在VPC。 如需创建VPC,请单击“创建虚拟私有云”,具体操作参考创建虚拟私有云。 说明: 环境创建完成后,不支持修改VPC。 子网 下拉框中选择环境子网。 无可用子网时,单击“创建子网”,进入网络控制台创建新子网,具体操作参考为虚拟私有云创建新的子网。 说明: 子网需要保留至少2个可用网络IP地址,以供CAE配置和优化使用,如果不满足条件,会创建失败。 安全组 选择“自动生成”。 说明: 安全组需要放通所选择的子网到子网网关地址,以及需要访问的中间件如RDS,CSE等服务的访问地址和端口。 组织 如果您是首次使用本服务,在该下拉框中单击“创建组织”,输入自定义的组织名称。 非首次使用本服务,选择“组件列表”。 单击页面上方环境模块右侧。 在弹出的“新增环境”对话框中输入新增环境的名称。 可直接使用已创建的环境。 单击“确定”,完成创建环境。
  • 源码仓库授权 登录CAE控制台。 选择“系统设置”。 在“系统设置”页面,单击“源码仓库授权”模块的“编辑”,进入“已授权源码仓库”页面。 单击“新建授权”,进入“新建授权”页面。 单击“GitHub”。 授权名称输入:nacos-github。 授权方式选择“OAuth”。 单击“使用OAuth授权”。 在“服务声明”弹框中,勾选“我已知晓本服务的源码构建功能收集上述信息,并同意授权对其的收集、使用行为。”。单击“确认”完成授权。 单击“确认”,进入GitHub登录页面。 输入用户GitHub的用户名或邮箱和密码,单击“Sign in”,等待OAuth认证完成,返回CAE页面。 在CAE“系统设置”页面提示框单击“确认”,完成源码仓库授权。
  • 调用微服务 在左侧导航栏中选择“组件列表”,进入“组件列表”页面。 选择nacos-consumer组件,在“访问地址”列单击,获取自动生成的外网访问地址。 图1 获取外网访问地址 在浏览器输入访问地址:http://外网访问ip地址:访问端口/echo/{string},外网访问ip地址、访问端口为2中获取的,{string}为自定义字符串。例如:http://100.**.**.175:14688/echo/nacos-cae。 如果出现如下图所示欢迎页面,表示Nacos调用成功。 图2 调用微服务引擎
  • 操作步骤 登录CAE控制台。选择“组件配置”。 在“组件配置”页面上方的下拉框中选择待操作的组件。 图1 选择待操作的组件 如图2和图3所示分别配置启动探针与存活探针,并生效配置,具体操作步骤请参考配置健康检查。 图2 配置存活探针 图3 配置启动探针 启动探针会在实例创建后10秒钟进行检查,每5秒检测一次,且连续失败5次后进行容器重启的操作。在启动探针检测到实例健康后,存活探针将进行启动检测,可以避免程序启动过慢,导致实例一直重启。 请保证程序启动时间在“延迟时间”+ “检测周期”* “最大失败次数”秒内能启动,否则启动探针会一直重启实例。如果不确定程序启动时间,建议调大“最大失败次数”以及“延迟时间”。 如图3所示,程序需要在10 + 5 * 5 = 35秒内启动。 单击“组件事件”,在“组件事件”页面中可以看到启动探针探测一次失败后,程序成功启动,切换到了存活探针,并检测实例健康。 图4 查看事件信息 图5 启动探针探测情况
  • 参数说明 表1 参数说明 参数名称 是否必须 参数类型 描述 bucket_name 是 String obs桶名称,CAE发布插件中选择的区域和obs桶所在的区域保持一致。 file_name 是 String 上传到obs桶中的软件包名称。 file_dir 是 String 软件包上传到obs桶中的存放目录,目录需要以/结尾,如果obs桶中没有这个目录,会自动创建出该目录。如根目录是“/”,根目录下面的test目录“/test/”。 obs_address 是 String 值的格式为:obs.区域项目名称.myhuaweicloud.com,区域项目名称就是region,参考参数值获取。 软件包地址 是 String 上传到obs的软件包地址,值填写: https://${bucket_name}.${obs_address}${file_dir}${file_name}。
  • 配置构建触发器 这里介绍两种构建方式: 在Jenkins中手动触发构建,手动单击任务右边的“立即构建”从而触发流水线任务。 通过Gitlab提交代码后自动触发Jenkins构建,这种方式同时支持手动触发构建。 此处以第二种方式为例。 配置Jenkins构建触发器。 勾选“Build when a change is pushed to GitLab”,保存图示中的GitLab webhook URL(配置Gitlab webhook时需使用),然后单击右下角“高级”。 图6 获取GitLab webhook URL 选择“Filter branches by regex ”,配置指定分支变更后触发构建任务,示例中的分支名称为main,单击右下角“Generate”生成Secret token并保存,在配置Gitlab webhook时需使用。 图7 获取Secret token 配置Gitlab webhook 登录Gitlab,进入代码仓库,示例中的仓库名称是“test-demo”。 选择settings中的“Webhooks”,URL和Secret token填写1获取到的GitLab webhook URL和Secret token。 图8 webhooks配置 取消勾选SSL verification的“Enable SSL verification”,单击“Add webhook”。 图9 完成webhook配置
  • 配置流水线脚本 流水线脚本是构建时运行的构建命令,脚本参数说明见表1。 表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。 deploy_shell 是 String deploy.sh脚本在Jenkins所在虚拟机上存放的路径,示例:/root/jar/deploy.sh,内容请参见deploy.sh脚本说明。 build_target_name 是 String 构建产物名称:软件包名称或镜像名称:版本号,通过执行脚本时传入该参数,软件包部署场景为软件包名称,镜像部署场景为构建出来的镜像名称:版本号。 完成“构建触发器”配置之后,在“流水线”页签,在下拉框选择“Pipeline script”。 图10 流水线配置 配置流水线脚本,示例中使用的是构建jar包场景,脚本如下: node { // 定义代码仓地址 def git_url = 'http://100.**.**.207:8090/test/test-demo.git' // Gitlab凭据id def credentials_id = '133b7c9a-eb6a-4484-84b3-c3509ed63df8' // git代码仓库分支名称 def branch_name = 'main' // maven安装的可执行文件路径 def maven = '/root/app/maven/apache-maven-3.8.6/bin/mvn' // deploy.sh 脚本存放路径,需要设置可执行权限 def deploy_shell = '/root/jar/deploy.sh' // 构建产物名称:软件包名称或镜像名称,必须参数,通过执行脚本时传入该参数 def build_target_name = "cae-demo-1.0-SNAPSHOT.jar" 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" } stage('deploy') { // 执行脚本,使用构建产物升级CAE组件,超时时间5分钟 sh "timeout 300s '$deploy_shell' '$build_target_name'" } } 流水线脚本运行时会调用deploy.sh,该脚本详细说明参见deploy.sh脚本说明。 设置脚本文件deploy.sh为可执行文件。
  • 手动构建验证 在浏览器地址栏输入http://{安装Jekins的Linux虚拟机IP}:8080,登录Jenkins。 左侧导航栏单击“我的视图”。 选择对应的构建任务,单击构建任务名称进入详情界面,示例为“test-demo”。 单击右侧,在左侧构建执行状态中会生成一个构建任务,单击任务编号,选择“Console Output”,如图1,查看构建输出日志。 图1 手动构建验证 查看构建输出日志,构建出来的是jar包,部署成功。 图2 构建输出日志 登录CAE控制台。 导航栏单击“组件列表”,查看对应组件的版本号已更新,如图3。 图3 查看组件版本号 父主题: 构建验证
  • 操作步骤 登录CAE控制台。选择“组件配置”。 在“组件配置”页面上方的下拉框中选择待操作的组件。 图1 选择组件 如图2所示配置停止前处理,具体操作请参考配置生命周期。 分别输入以下命令: /bin/bash -c nginx -s quit;while killall -0 nginx;do sleep 1;done 图2 配置生命周期 单击“确定”,保存配置。 单击页面上方“生效配置”。在右侧弹框中确认配置信息,并单击“确定”,使配置生效。
  • 概述 健康检查用于检测您的应用实例是否正常工作,是用来保障业务正常运行的一种机制。CAE提供三种健康检查机制:存活探针、就绪探针和启动探针。 存活探针用于检测应用程序是否存活。如果检测实例异常,k8s将会删除当前运行的实例并重新检测,直到检测返回实例正常。 单独使用存活探针时,如出现网络波动或程序启动过慢的情况,会导致实例持续被重启,且实例一直处于未就绪的状态。 有如下解决方案: 与启动探针配合使用,具体操作请参见启动探针与存活探针配合工作。 使用时将“最大失败次数”调大,增加容错率,并增大“延迟时间”,保证程序在启动后再接受存活探针的检测。 检查成功:对于在健康检查中设置的请求返回状态码200。 检查失败:对于在健康检查中设置的请求返回状态码非200,且连续失败次数达到设置的“最大失败次数”。 就绪探针用于检测应用是否完成启动,并准备好开始接受请求。如果检查到实例已经健康,则进行流量的切换。 例如:以组件的实例从2个伸缩到3个为例,说明设置就绪探针前后对比。 未设置就绪探针时,实例已创建完成,但由于程序原因,并未准备好开始接受流量,此时如图1所示,部分流量仍然会进入实例3中。 图1 未配置就绪探针 设置就绪探针后,就绪探针会进行检测,发现实例3并未启动完成或就绪,则使实例3不接收流量,保证所有流量都会流入健康的实例1和实例2中。 图2 就绪探针检测健康前,流量不放通 当就绪探针检查到实例3为健康时,则放通流量,停止本次检测。 图3 就绪探针健康后,放通流量 启动探针在运行时会禁用其他探测(就绪探针以及存活探针),如果启动探针检查失败,则实例会被重启。 启动探针建议搭配存活探针一起使用。 父主题: 健康检查
  • Gitlab自动触发Jenkins构建 Gitlab触发Jenkins构建有以下两种方式: 通过配置好的Webhook来Push events,触发Jenkins构建任务。 修改构建配置指定分支的文件来Push events,触发Jenkins构建任务。 示例通过方式一来触发Jenkins构建。 登录Gitlab,进入代码仓库,示例为“test-demo”,单击“Settings”,选择“Webhooks”,在右下角的“Test”下拉框,选择“Push events”,如图1所示。 图1 Webhook触发Jenkins构建 登录Jenkins,左侧构建执行状态中可以看到已经触发的构建任务,单击构建任务编号,选择“Console Output”,查看构建输出日志,如图2。 图2 查看构建任务状态 查看构建输出日志,构建出来的是jar包,部署成功,如图3。 图3 查看构建输出日志 登录CAE控制台。 左侧导航栏单击“组件列表”,查看对应组件的版本号已更新,如图4。 图4 查看组建版本号 父主题: 构建验证
  • 环境信息说明 如果已安装好jenkins环境,请跳过本章节。 在linux虚拟机上安装好Jenkins,本实践使用的具体环境信息如下所示。如果使用镜像部署,需要在虚拟机中安装docker。 虚拟机:Centos7.9 Jenkins:2.331 git:yum安装 jdk:11.0.8 Apache Maven :3.8.6 部署的Jenkins启动时需添加如下参数: -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true 否则Gitlab对接Jenkins会失败,报错信息如下: HTTP Status 403 - No valid crumb was included in the request
  • 相关软件下载及安装 Jenkins下载链接: https://mirrors.jenkins.io/war-stable/ 安装git用于拉取代码进行构建: yum install git –y jdk安装包下载链接: https://www.oracle.com/cn/java/technologies/downloads/#java11 maven安装包下载链接: https://maven.apache.org/download.cgi docker安装用于打包镜像并上传到镜像仓库: yum install docker
  • 安装后检查 检查git: 检查git: [root@ecs-jenkins ~]# git version git version 1.8.3.1 检查JDK: [root@ecs-jenkins jar]# java -version openjdk version "1.8.0_345" OpenJDK Runtime Environment (build 1.8.0_345-b01) OpenJDK 64-Bit Server VM (build 25.345-b01, mixed mode) 检查Maven: [root@ecs-jenkins jar]# mvn -v Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63) Maven home: /root/app/maven/apache-maven-3.8.6 Java version: 11.0.8, vendor: Huawei Technologies Co., LTD, runtime: /root/app/jdk11/jdk-11.0.8 Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-1160.76.1.el7.x86_64", arch: "amd64", family: "unix" 检查Docker: [root@ecs-jenkins jar]# docker version Client: Version: 1.13.1 API version: 1.26 Package version: docker-1.13.1-209.git7d71120.el7.centos.x86_64 Go version: go1.10.3 Git commit: 7d71120/1.13.1 Built: Wed Mar 2 15:25:43 2022 OS/Arch: linux/amd64 Server: Version: 1.13.1 API version: 1.26 (minimum version 1.12) Package version: docker-1.13.1-209.git7d71120.el7.centos.x86_64 Go version: go1.10.3 Git commit: 7d71120/1.13.1 Built: Wed Mar 2 15:25:43 2022 OS/Arch: linux/amd64 Experimental: false 图1 版本查验
  • 参数说明 表1 参数说明 参数名称 是否必须 参数类型 描述 org_name 是 String 镜像上传到SWR的组织名称,可以登录SWR控制台查看。 image_name 是 String 上传到SWR的镜像名称。 image_tag 是 String 上传到SWR的镜像版本。 swr_address 是 String 值的格式:swr.区域项目名称.myhuaweicloud.com,区域项目名称就是region,参考参数值获取。 镜像地址 是 String 上传到SWR的镜像地址,值填写: ${swr_address}/${org_name}/${image_name}:${image_tag}。
  • 创建用户组并授权 在左侧导航栏中选择“用户组”,单击“创建用户组”。 图3 创建用户组 输入“用户组名称”,例如cae-test,单击“确定”,完成用户组创建。 在用户组列表中单击创建完成的用户组名称“cae-test”,进入用户组概览页面。 在“授权记录”页签中单击“授权”,选择创建自定义策略中创建的自定义策略。 图4 授权自定义策略 单击“下一步”,选择授权范围方案为“所有资源”。 单击“确定”,完成授权。 待授权完成后,单击“完成”,返回用户组概览页面。 图5 完成用户组授权 单击“用户管理”,进入“用户组管理”页面。 在用户列表中勾选需要控制权限的子用户,单击“确定”。 图6 配置用户管理
  • 配置云存储挂载路径 返回CAE控制台,选择“组件配置”。 在“组件配置”页面上方的下拉框中选择Nginx组件。 单击“云存储配置”模块中的“编辑”,进入云存储配置页面。 图8 配置云存储 在“云存储配置”页面单击“配置并行文件系统”,并输入挂载路径并设置权限。 并行文件系统名称:选择云存储授权中授权的并行文件系统“test-nginx”。 文件掩码(umask):文件掩码设置为0022。 挂载路径:数据存储挂载到组件上的路径。本实践使用“nginx”默认路径“/usr/share/nginx/html”。 权限:挂载路径及挂载路径下文件,有“读写”、“只读”两种权限,此处选择“读写”。 图9 配置云存储挂载路径 挂载静态文件路径到云存储上时需要注意:请不要挂载到含有系统文件的目录下,如“/”、“/var/run”等,否则可能会导致部署的组件异常。 挂载路径选择权限时需要注意:读写权限表示组件对于该挂载路径及路径下的所有文件拥有读写权限,只读即只有只读权限。 单击“确定”后在“云存储配置”页面再次单击“确定”,完成配置。 在“组件配置”页面单击“生效配置”。 图10 生效配置
  • 参数说明 表1 参数说明 参数名称 是否必须 参数类型 描述 release_version 是 String 发布版本号,取值使用时间戳变量:${TIMESTAMP}。 软件包地址 是 String 编译构建出来的软件包上传到软件发布库中的地址。 例如:复制图9中下载地址,下载地址为https://devrepo.devcloud.cn-east-3.huawei.com/DevRepoServer/v1/files/download?filename=39d25a3cc6ee48678533020abcfbf941/cae-backend/20231028200733/cae-backend.jar,将软件包的目录发布版本号20231028200733改为${release_version},则软件包地址的值为https://devrepo.devcloud.cn-east-3.huawei.com/DevRepoServer/v1/files/download?filename=39d25a3cc6ee48678533020abcfbf941/cae-backend/${release_version}/cae-backend.jar。
  • 脚本说明 每个组件都需要在pipeline中的envionment获取组件参数,用于判断参数化构建时是否选中,执行下面脚本: _{component_name}="${sh(script:' echo $Model_Name| grep -w -o "{component_name}" || echo "error" ', returnStdout: true).trim()}" 表1 参数说明 参数名称 描述 Model_Name 配置构建参数中的Name。 {component_name} 配置构建参数中的Choose Source for Value中的value里面填写的组件名称之一。 每个组件都需要配置一个stage,用于组件的升级任务,如果是串行执行的,则按照先后顺序放置stage的位置,如果是并行执行的任务就放置在stage('Build parallel jobs')中的parallel中。 stage脚本: stage('Build {component_name}') { when { environment name: '_{component_name}', value: '{component_name}' } steps { sh ''' echo "start to build {component_name}" ''' script{ def componentBuild=build(job: '{component_jenkins_task}') //打印执行任务的结果 println componentBuild.getResult() } } } 表2 参数说明 参数 描述 {component_name} 配置构建参数中的Choose Source for Value中的value里面填写的组件名称之一。 {component_jenkins_task} jenkins中创建的用于组件升级的任务名称,例如:用于componentA组件升级的任务名称如图6所示。 图6 组件升级任务名称
  • 流水线脚本 流水线脚本支持componentA、componentB、componentC和componentD,4个组件中的一个或多个同时升级,并且按照依赖顺序先升级componentA,再并行升级componentB和componentC,最后升级componentD。如果构建时没有勾选到的组件会跳过,不执行升级。 pipeline { agent any environment{ //构建时选择的组件以‘,’隔开的格式存在变量Model_Name里 //判断变量Model_Name里的可选组件是否存在,如果存在,把组件名赋值给对应变量,如果不存在,把字符串"error"赋值给对应变量。 //用于判断后续组件是否需要构建 _componentA="${sh(script:' echo $Model_Name| grep -w -o "componentA" || echo "error" ', returnStdout: true).trim()}" _componentB="${sh(script:' echo $Model_Name| grep -w -o "componentB" || echo "error" ', returnStdout: true).trim()}" _componentC="${sh(script:' echo $Model_Name| grep -w -o "componentC" || echo "error" ', returnStdout: true).trim()}" _componentD="${sh(script:' echo $Model_Name| grep -w -o "componentD" || echo "error" ', returnStdout: true).trim()}" } stages { stage('Build componentA') { //when条件判断当环境变量"_componentA" = "componentA"时,表示构建时选择了该组件,执行此stage,否则跳过此stage when { environment name: '_componentA', value: 'componentA' } steps { sh ''' echo "start to build componentA" ''' script{ //build(job: 'componentA') 表示执行componentA任务,这个任务是jenkins中创建的任务名称,用于componentA组件升级的任务 def componentBuild=build(job: 'componentA') //打印执行任务的结果 println componentBuild.getResult() } } } stage('Build parallel jobs') { //failFast true 表示parallel并行的stage中只要有一个失败,其他并行任务也会中止 //不加failFast true,parallel中失败的stage不会影响其他并行的stage执行,直到所有的并行任务执行完成 //failFast true //按需添加 //parallel 表示里面的stage是并行执行的,只要其中有一个stage执行失败,则"Build parallel jobs"这个stage是失败的,它后续的stage不会执行 parallel { stage('Build componentB') { when { environment name: '_componentB', value: 'componentB' } steps { sh ''' echo "start to build componentB" ''' script{ def componentBuild=build(job: 'componentB') println componentBuild.getResult() } } } stage('Build componentC') { when { environment name: '_componentC', value: 'componentC' } steps { sh ''' echo "start to build componentC" ''' script{ def componentBuild=build(job: 'componentC') println componentBuild.getResult() } } } } } stage('Build componentD') { when { environment name: '_componentD', value: 'componentD' } steps { sh ''' echo "start to build componentD" ''' script{ def componentBuild=build(job: 'componentD') println componentBuild.getResult() } } } } }
  • 使用流水线升级多个组件 选择流水线,单击“参数化构建”。 图7 参数化构建 选择要升级的组件,可以选择一个或多个同时升级,本示例选择全部组件同时升级,单击“开始构建”。 图8 选择组件 可在构建历史中查看流水线任务执行结果。 图9 查看执行结果 流水线日志如下所示,可以看出先升级componentA,再并行升级componentB和componentC,最后升级componentD。 Started by user admin Running in Durability level: MAX_SURVIVABILITY [Pipeline] Start of Pipeline [Pipeline] node Running on Jenkins in /root/.jenkins/workspace/pipeline-arrange [Pipeline] { [Pipeline] sh + echo componentA,componentB,componentC,componentD + grep -w -o componentA [Pipeline] sh + echo componentA,componentB,componentC,componentD + grep -w -o componentD [Pipeline] sh + echo componentA,componentB,componentC,componentD + grep -w -o componentB [Pipeline] sh + echo componentA,componentB,componentC,componentD + grep -w -o componentC [Pipeline] withEnv [Pipeline] { [Pipeline] stage [Pipeline] { (Build componentA) [Pipeline] sh + echo 'start to build componentA' start to build componentA [Pipeline] script [Pipeline] { [Pipeline] build Scheduling project: componentA Starting building: componentA #13 [Pipeline] echo SUCCESS [Pipeline] } [Pipeline] // script [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (Build parallel jobs) [Pipeline] parallel [Pipeline] { (Branch: Build componentB) [Pipeline] { (Branch: Build componentC) [Pipeline] stage [Pipeline] { (Build componentB) [Pipeline] stage [Pipeline] { (Build componentC) [Pipeline] sh [Pipeline] sh + echo 'start to build componentB' start to build componentB [Pipeline] script + echo 'start to build componentC' start to build componentC [Pipeline] { [Pipeline] script [Pipeline] { [Pipeline] build Scheduling project: componentB [Pipeline] build Scheduling project: componentC Starting building: componentB #12 Starting building: componentC #12 [Pipeline] echo SUCCESS [Pipeline] } [Pipeline] // script [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] echo SUCCESS [Pipeline] } [Pipeline] // script [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // parallel [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (Build componentD) [Pipeline] sh + echo 'start to build componentD' start to build componentD [Pipeline] script [Pipeline] { [Pipeline] build Scheduling project: componentD Starting building: componentD #10 [Pipeline] echo SUCCESS [Pipeline] } [Pipeline] // script [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // withEnv [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS 登录CAE控制台查看组件状态,“最近一次变更状态/时间”列显示状态为“升级成功”,表示组件升级成功。 图10 查看组件
  • Nginx默认配置 查询nginx默认配置方法: Nginx默认配置如图3所示。 此版本的Nginx配置文件(nginx.conf)地址为“/etc/nginx/nginx.conf”。 图3 nginx.conf Nginx默认的default.conf如图4所示。“/usr/share/nginx/html”为静态文件存放的路径,该路径下存在两个默认文件分别为“50x.html”和“index.html”。 图4 default.conf 如需替换页面显示,则将需替换的html文件放入“/usr/share/nginx/html”目录下。替换的html文件可以通过获取静态文件提供的链接中直接下载。
  • 解决方案 新建一条jenkins流水线来编排多个组件,自动按照依赖顺序构建升级,并使用参数化构建的方式,同时支持单个或多个组件的升级。 下面以一个示例说明流水线执行流程。 有4个组件分别是componentA、componentB、componentC和componentD,其中componentD依赖componentB和componentC,componentB和componentC依赖componentA。 流水线执行流程:
  • 操作步骤 登录CAE控制台。选择“组件配置”。 在“组件配置”页面上方的下拉框中选择待操作的组件。 图1 选择待操作的组件 如图2所示配置就绪探针,并生效配置,具体操作步骤请参考配置健康检查。 图2 配置就绪探针 对组件进行升级操作,具体操作请参考升级组件。 升级时,在左侧导航栏中选择“组件列表”,进入“组件列表”页面,单击对应组件“访问地址”列的ip地址,查看应用页面。如图3所示服务并无中断。 图3 访问应用页面 在“组件事件”页面,查看组件事件,可以看到实例存在不健康的请求,此时检测到新实例还未准备好进行流量切换,则继续使用旧实例提供服务。 图4 查看组件事件
  • 脚本参数说明 表1 脚本参数说明 参数 是否必须 参数类型 描述 region 是 String 项目名称。 project_id 是 String 项目id。 environment_name 是 String 组件的环境名称。 application_name 是 String 组件的应用名称。 component_name 是 String 组件名称。 deploy_type 是 String 部署类型: software或image。 software表示软件包部署。 image表示镜像部署。 obsutil 否 String 当使用软件包部署如jar包部署时为必须参数。上传jar包到obs的工具安装的绝对路径。 示例:/root/tools/obsutil/obsutil_linux_amd64_5.4.6/obsutil。 bucket_name 否 String 当使用软件包部署时为必须参数。存放软件包的obs桶名称。 bucket_dir 否 String 当使用软件包部署时为必须参数。 软件包在obs桶中的存放目录,默认是根目录,目录需要以/结尾,如果obs桶中没有这个目录,会自动创建出该目录。如根目录“/”,根目录下面的test目录“/test/”。 swr_organization 否 String 当使用镜像部署时为必须参数。上传到swr的组织名称。 AK 否 String 当使用镜像部署时为必须参数。创建永久AK、SK中的AK参数,用于登录swr镜像仓库。 login_secret 否 String 当使用镜像部署时为必须参数。swr的登录密钥,用于登录swr镜像仓库。通过创建永久AK、SK获取的AK/SK,执行如下命令,返回的结果就是登录密钥: printf "$AK" | openssl dgst -binary -sha256 -hmac "$SK" | od -An -vtx1 | sed 's/[ \n]//g' | sed 'N;s/\n//'
  • 参数值获取 获取region、project_id值: 登录CAE控制台,在右上角个人账号上,单击“我的凭证”,查看所属区域的项目和项目ID,即为对应的region和project_id值。 图1 我的凭证 图2 项目列表 获取组件所在的环境名称environment_name,应用名称application_name和组件名称component_name: 登录CAE控制台,单击“组件列表”,找到目标组件,例如image组件,如图3所示。 图3 查看组件信息
  • Dockerfile解析 示例仓库中的Dockerfile文件。 # 指定基础镜像为mcr.microsoft.com/dotnet/sdk:7.0,该基础镜像作为ASP.NET Core项目的构建环境 FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build # 指定工作目录 WORKDIR /source # 从构建主机上复制源码到基础镜像,并指定工作目录和构建命令 COPY . ./dotnetcore-docs-hello-world/ WORKDIR /source/dotnetcore-docs-hello-world RUN dotnet publish -c release -o /app # 指定新的基础镜像为mcr.microsoft.com/dotnet/aspnet:7.0,并将第二步生成的构建产物复制到新的基础镜像中 FROM mcr.microsoft.com/dotnet/aspnet:7.0 WORKDIR /app COPY --from=build /app ./ # 设置环境变量PORT,并声明容器端口为80 ENV PORT 80 EXPOSE 80 # 指定容器启动命令 ENTRYPOINT ["dotnet", "dotnetcoresample.dll"]
  • 设置GitHub仓库授权 设置GitHub仓库授权,使构建工程、应用组件等可以使用授权信息访问GitHub源码仓库。 登录CAE控制台。 在左侧导航栏中选择“系统设置”。 单击“源码仓库授权”模块中的“编辑”,进入“已授权源码仓库”页面。 单击“新增授权”,参考表1选择需要的源码仓库,并配置参数。 表1 授权参数说明 参数 说明 授权名称 授权名称,创建之后不可更改 仓库类型 支持以下官方仓库类型: 选择GitHub代码仓库。 选择“授权方式”。 OAuth:请单击“使用OAuth授权”,根据页面提示完成授权创建。 私人令牌:输入已获取到的私人令牌。 单击“确认”,完成GitHub代码仓库授权。 图1 授权GitHub代码仓库
  • 示例 在GaussDB(DWS)数据库中,创建一个外表。参数信息如下所示: 数据格式参数访问密钥(AK和SK) 用户获取OBS访问协议对应的AK值(access_key)。 用户获取OBS访问协议对应的SK值 (secret_access_key)。 请根据用户实际获取的access_key和secret_access_key的密钥替换示例中的对应内容。 设置数据格式参数 数据源文件格式(format)为CSV。 编码格式(encoding)为UTF-8。 是否使用加密(encrypt),默认为 “off”。 字段分隔符(delimiter)为“,”。 引号字符(quote)使用默认值双引号。 null(数据文件中空值的表示)为“一个没有引号的空字符串”。 header(指定导出数据文件是否包含标题行)为false,当数据文件第一行不是标题行(即表头),不需要设置。 OBS导出数据时不支持该参数为true,使用缺省值false。 设置导入时的容错性参数 PER NODE REJECT LIMIT 'value' 为unlimited,即接受导入过程中所有数据格式错误。 LOG INTO error_table_name指定为product_info_err,将数据导入过程中出现的数据格式错误信息写入表product_info_err。 fill_missing_fields为true,即当数据加载时,若数据源文件中一行数据的最后一个字段缺失,则把最后一个字段的值设置为NULL,不报错。 ignore_extra_data为true,当数据加载时,若数据源文件比外表定义列数多,则忽略行尾多出来的列,不报错。 根据以上信息,创建的外表如下所示: 认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 DROP FOREIGN TABLE product_info_ext; CREATE FOREIGN TABLE product_info_ext ( product_price integer not null, product_id char(30) not null, product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt integer , product_comment_time date , product_comment_num integer , product_comment_content varchar(200) ) SERVER gsmpp_server OPTIONS( LOCATION 'obs://mybucket/input_data/product_info | obs://mybucket02/input_data/product_info', FORMAT 'CSV' , DELIMITER ',', encoding 'utf8', header 'false', ACCESS_KEY 'access_key_value_to_be_replaced', SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced', fill_missing_fields 'true', ignore_extra_data 'true' ) READ ONLY LOG INTO product_info_err PER NODE REJECT LIMIT 'unlimited'; 返回如下信息表示创建成功: 1 CREATE FOREIGN TABLE
  • 操作步骤 根据上传数据到OBS中规划的路径,由此确定创建外表时使用的参数loaction的值。 用户获取OBS访问协议对应的AK值和SK值。获取访问密钥,请登录管理控制台,单击右上角的用户名并选择菜单“我的凭证”,然后在左侧导航树单击“访问密钥”。在访问密钥页面,可以查看已有的访问密钥ID(即AK),如果要同时获取AK和SK,可以单击“新增访问密钥”创建并下载访问密钥。 梳理待导入数据的格式信息,确定创建外表时使用的数据格式参数的值。需要收集的主要数据源格式信息如下: format:外表中数据源文件的格式。OBS外表导入支持CSV、TEXT格式。缺省值为TEXT。 header:指定导出数据文件是否包含标题行,header只能用于CSV格式的文件中。 delimiter:指定数据文件行数据的字段分隔符,不指定则使用默认分隔符。 外表可以识别的更多参数,详细使用请参见数据格式参数 。 规划并行导入容错性,以控制导入过程中处理错误的方式。 fill_missing_fields:数据入库时,数据源文件中某行的最后一个字段缺失时,请选择是直接将字段设为Null,还是在错误表中报错提示。 取值范围:true/on,false/off。 参数为true/on,当数据导入时,若数据源文件中一行数据的最后一个字段缺失,则把最后一个字段的值设置为NULL,不报错。 参数为false/off,如果最后一个字段缺失会显示如下错误信息。 missing data for column "tt" 缺省值:false/off。 ignore_extra_data:数据源文件中的字段比外表定义列数多时,请选择是忽略多出的列,还是在错误表中报错提示。 取值范围:true/on、false/off。 参数为true/on,若数据源文件比外表定义列数多,则忽略行尾多出来的列。 参数为false/off,若数据源文件比外表定义列数多,会显示如下错误信息。 1 extra data after last expected column 缺省值:false/off。 per node reject limit:本次数据导入过程中每个DN实例上允许出现的数据格式错误的数量。如果有一个DN实例上录入错误表中的错误数量超过设定值时,本次导入失败,报错退出。可以选择不做限制,也可以根据所能容忍的错误数量选择一个上限值。 compatible_illegal_chars:导入时遇到非法字符,选择如何处理。是将非法字符按照转换规则转换后入库,还是报错中止导入。 取值范围:true/on,false/off。 参数为true/on,则导入时遇到非法字符进行容错处理,非法字符转换后入库,不报错,不中断导入。 参数为false/off,导入时遇到非法字符进行报错,中断导入。 缺省值:false/off。 非法字符容错转换规则如下: 对于'\0',容错后转换为空格。 对于其他非法字符,容错后转换为问号。 对非法字符进行容错转换时,如遇NULL、DELIMITER、QUOTE、ESCAPE也设置成了空格或问号,GaussDB(DWS)会通过如“illegal chars conversion may confuse COPY escape 0x20”等报错信息提示用户修改可能引起混淆的参数以避免导入错误。 error_table_name:用于记录数据格式错误信息的错误表表名。并行导入结束后查询此错误信息表,能够获取详细的错误信息。 更多参数,详细使用请参见容错性参数。 根据前面步骤确定的参数,创建OBS外表。外表的创建语法以及详细使用,请参考CREATE FOREIGN TABLE (OBS导入导出)。
共100000条