云服务器内容精选

  • 服务概述 部署(CodeArts Deploy)提供可视化、自动化部署服务。提供丰富的部署步骤,有助于用户制定标准的部署流程,降低部署成本,提升发布效率。 部署服务具有以下特性: 支持主机(物理机、虚拟机)部署和容器部署。 预置Tomcat、SpringBoot、Django等系统模板快速新建应用,提供丰富的原子步骤,支持拖拉拽方式自由编排组装应用。 主机部署场景以环境为粒度,支持多台主机同时部署。 基于云容器引擎服务(CCE),实现容器部署。 基于应用管理与运维平台服务(ServiceStage),实现微服务应用部署。 支持保存自定义模板,通过模板一键创建应用。 支持参数化配置,提供文本、环境、枚举等参数类型,部署应用时支持参数的动态替换。 与流水线服务无缝集成,支持业务持续发布。 原子步骤独立输出部署日志,提供关键字匹配FAQ,部署失败能够快速定位原因并提供解决方案。
  • 使用部署服务可以做什么? 部署服务提供的功能如下表所示。 表1 功能列表 特性 描述 基础资源管理 可以添加一个或多个主机并进行连通性验证;可以新建主机集群对多个主机统一操作;通过搜索主机名或IP地址查找某主机;主机和主机集群可以修改和删除。 应用管理 可以创建一个或多个应用,应用可以通过预定义模板或者自由编排步骤创建;支持按照名字查找和过滤应用;可以修改和删除应用。 参数设置 应用的步骤支持参数引用,在部署时由您指定参数值,应用支持指定值替换相应参数部署。 动态执行参数 应用支持动态执行参数,在部署时动态输入参数无需修改应用,增强应用的重用性和灵活性。 选择应用包 支持从制品仓库选择应用包。应用包可以在编译构建中自动归档到制品仓库中。 上传应用包 支持从本地上传应用包到制品仓库。 部署动态 应用部署产生的服务动态消息,包括部署成功、部署失败和应用更新和删除消息。 并行部署 可以在一个应用中选择多个主机和多个环境,实现多主机并行部署。 部署详情 可以查看部署详情,可视化显示部署进程、当前部署应用信息。 部署日志 部署详情页面可以查看部署日志,多主机并行部署支持分主机日志查看。 流水线集成 可以在流水线集成应用,编排应用并行或者串行执行;支持流水线参数。
  • 责任共担 华为云秉承“将公司对网络和业务安全性保障的责任置于公司的商业利益之上”。针对层出不穷的云安全挑战和无孔不入的云安全威胁与攻击,华为云在遵从法律法规业界标准的基础上,以安全生态圈为护城河,依托华为独有的软硬件优势,构建面向不同区域和行业的完善云服务安全保障体系。 安全性是华为云与您的共同责任,如图1所示。 华为云:负责云服务自身的安全,提供安全的云。华为云的安全责任在于保障其所提供的 IaaS、PaaS 和 SaaS 类云服务自身的安全,涵盖华为云数据中心的物理环境设施和运行其上的基础服务、平台服务、应用服务等。这不仅包括华为云基础设施和各项云服务技术的安全功能和性能本身,也包括运维运营安全,以及更广义的安全合规遵从。 租户:负责云服务内部的安全,安全地使用云。华为云租户的安全责任在于对使用的 IaaS、PaaS 和 SaaS 类云服务内部的安全以及对租户定制配置进行安全有效的管理,包括但不限于虚拟网络、虚拟主机和访客虚拟机的操作系统,虚拟防火墙、API 网关和高级安全服务,各项云服务,租户数据,以及身份账号和密钥管理等方面的安全配置。 《华为云安全白皮书》详细介绍华为云安全性的构建思路与措施,包括云安全战略、责任共担模型、合规与隐私、安全组织与人员、基础设施安全、租户服务与租户安全、工程安全、运维运营安全、生态安全。 图1 华为云安全责任共担模型 父主题: 安全
  • 计费相关 部署服务不支持单独购买,开通CodeArts即可使用部署服务。 部署服务免费使用,不涉及计费项。 用户部署的应用所使用的资源、以及部署依赖的服务所使用的资源(弹性云主机、弹性IP、流量等)由所使用的服务收费。 由于部署服务本身免费使用,因而当账户欠费时,部署服务各项操作仍可以正常进行,但若部署服务所使用的资源(弹性云主机、弹性IP、流量等)在账户欠费时不可用,那么相应的应用可能会部署失败。
  • 购买并配置云容器引擎 本文档中使用的是云容器引擎CCE。 通过控制台可购买CCE集群。 其中集群及节点的必要配置建议参照表1与表2,表中未涉及的可根据实际情况选择。 表1 CCE集群购买配置 配置分类 配置项 配置建议 基础配置 计费模式 选择“按需计费”。 集群版本 根据需要选择,建议选择最新版本。 网络配置 网络模型 选择“容器隧道网络”。 虚拟私有云 选择已有的虚拟私有云,如果列表中没有合适的选项,单击“新建虚拟私有云”完成创建。 控制节点子网 选择已有的子网,如果列表中合适的选项,单击“新建子网”完成创建。 容器网段 勾选“自动设置网段”。 表2 节点配置 配置分类 配置项 配置建议 计算配置 计费模式 选择“按需计费”。 节点类型 选择“弹性云服务器-虚拟机”。 节点规格 选择“通用型”、2核8G及以上规格即可。 操作系统 选择公共镜像中的Euler镜像。 节点名称 输入自定义名称 。 登录方式 选择“密码”。 密码 输入自定义密码 。 网络配置 节点IP 选择“自动分配”。 弹性公网IP 选择“自动创建”。
  • 方案架构 系统升级时,若采用蓝绿部署方式,开发人员先将A边服务器(原蓝环境)下线,同时访问流量将全部切分到B边服务器,此时对A边服务器进行升级操作。A边服务器升级完毕后,将A边服务器设为灰度测试环境,由测试人员对A边服务器进行灰度验证。灰度验证完毕且功能正常后,A边业务服务器(绿环境)正式上线,并将所有流量切分到A边业务服务器,此时蓝绿部署完毕。在服务运行过程中,如果A边服务器出现紧急情况,执行蓝绿倒换实现业务快速恢复。 图1 灰度发布原理 若采用金丝雀灰度部署方式,再重复前面的操作,将B边服务器进行升级,并完成灰度测试及正式上线,此时就完成新系统的灰度发布。
  • 附录 A边节点下线-代码示例 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$time_local|$remote_addr[$remote_port]|$request|$request_method|$content_length|' '$content_type|$http_referer|$host|$http_x_forwarded_for|' '$http_true_client_ip|$server_name|$request_uri|$server_addr|$server_port|' '$status|$request_time|$upstream_addr|$upstream_response_time|$cookie_domain_tag'; access_log logs/access.log main; #访问日志:存放路径,日志级别。 error_log logs/error.log; #错误日志:存放路径。 sendfile on; keepalive_timeout 65; upstream portal { # 下面填入A主机IP及应用服务端口 #server X.X.X.X:X; #A节点下线 # 下面填入B主机IP及应用服务端口 server X.X.X.X:X; } upstream portal_test { # 下面填入A主机IP及应用服务端口 server X.X.X.X:X; # 下面填入B主机IP及应用服务端口 server X.X.X.X:X; } server { listen XXX;#填入Nginx端口 server_name localhost; location / { set $backend portal; set $test portal_test; #下面填入灰度验证机器IP #if ( $remote_addr ~* "X.X.X.X") { # set $backend $test; #} proxy_pass https://$backend; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } 部署节点 # 获取应用进程id pid=`ps -ef | grep app_name | grep -v grep | awk '{print $2}'` if [ -z "$pid" ]; then echo "[app_name pid is not exist.]" else echo "app_name pid: $pid " # 停止该进程 kill -15 $pid fi # 重新启动应用,可通过执行部署脚本和部署命令两种方式启动应用,如下: # 方式一:通过执行部署脚本启动应用 # sh startup.sh # 方式二:通过执行命令启动应用,建议采用nohup后台启动方式 # nohup java -jar /usr/local/app/SpringbootDemo.jar & A边节点灰度上线-代码示例 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$time_local|$remote_addr[$remote_port]|$request|$request_method|$content_length|' '$content_type|$http_referer|$host|$http_x_forwarded_for|' '$http_true_client_ip|$server_name|$request_uri|$server_addr|$server_port|' '$status|$request_time|$upstream_addr|$upstream_response_time|$cookie_domain_tag'; access_log logs/access.log main; #访问日志:存放路径,日志级别。 error_log logs/error.log; #错误日志:存放路径。 sendfile on; keepalive_timeout 65; upstream portal { # 下面填入A主机IP及应用服务端口 #server X.X.X.X:X; #A节点下线 # 下面填入B主机IP及应用服务端口 server X.X.X.X:X; } upstream portal_test { # 下面填入A主机IP及应用服务端口 server X.X.X.X:X; #A节点灰度上线 # 下面填入B主机IP及应用服务端口 #server X.X.X.X:X; } server { listen XXX;#填入Nginx端口 server_name localhost; location / { set $backend portal; set $test portal_test; #下面填入灰度验证机器IP if ( $remote_addr ~* "X.X.X.X") { set $backend $test; } proxy_pass https://$backend; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } B边节点下线-代码示例 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$time_local|$remote_addr[$remote_port]|$request|$request_method|$content_length|' '$content_type|$http_referer|$host|$http_x_forwarded_for|' '$http_true_client_ip|$server_name|$request_uri|$server_addr|$server_port|' '$status|$request_time|$upstream_addr|$upstream_response_time|$cookie_domain_tag'; access_log logs/access.log main; #访问日志:存放路径,日志级别。 error_log logs/error.log; #错误日志:存放路径。 sendfile on; keepalive_timeout 65; upstream portal { # 下面填入A主机IP及应用服务端口 server X.X.X.X:X; # 下面填入B主机IP及应用服务端口 #server X.X.X.X:X; #B节点下线 } upstream portal_test { # 下面填入A主机IP及应用服务端口 server X.X.X.X:X; # 下面填入B主机IP及应用服务端口 server X.X.X.X:X; } server { listen XXX;#填入Nginx端口 server_name localhost; location / { set $backend portal; set $test portal_test; #下面填入灰度验证机器IP #if ( $remote_addr ~* "X.X.X.X") { # set $backend $test; #} proxy_pass https://$backend; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } B边节点灰度上线-代码示例 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$time_local|$remote_addr[$remote_port]|$request|$request_method|$content_length|' '$content_type|$http_referer|$host|$http_x_forwarded_for|' '$http_true_client_ip|$server_name|$request_uri|$server_addr|$server_port|' '$status|$request_time|$upstream_addr|$upstream_response_time|$cookie_domain_tag'; access_log logs/access.log main; #访问日志:存放路径,日志级别。 error_log logs/error.log; #错误日志:存放路径。 sendfile on; keepalive_timeout 65; upstream portal { # 下面填入A主机IP及应用服务端口 server X.X.X.X:X; # 下面填入B主机IP及应用服务端口 #server X.X.X.X:X; #B节点下线 } upstream portal_test { # 下面填入A主机IP及应用服务端口 #server X.X.X.X:X; # 下面填入B主机IP及应用服务端口 server X.X.X.X:X; #B节点灰度上线 } server { listen XXX;#填入Nginx端口 server_name localhost; location / { set $backend portal; set $test portal_test; #下面填入灰度验证机器IP if ( $remote_addr ~* "X.X.X.X") { set $backend $test; } proxy_pass https://$backend; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } 节点上线-代码示例 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$time_local|$remote_addr[$remote_port]|$request|$request_method|$content_length|' '$content_type|$http_referer|$host|$http_x_forwarded_for|' '$http_true_client_ip|$server_name|$request_uri|$server_addr|$server_port|' '$status|$request_time|$upstream_addr|$upstream_response_time|$cookie_domain_tag'; access_log logs/access.log main; #访问日志:存放路径,日志级别。 error_log logs/error.log; #错误日志:存放路径。 sendfile on; keepalive_timeout 65; upstream portal { # 下面填入A主机IP及应用服务端口 server X.X.X.X:X; # 下面填入B主机IP及应用服务端口 server X.X.X.X:X; } upstream portal_test { # 下面填入A主机IP及应用服务端口 server X.X.X.X:X; # 下面填入B主机IP及应用服务端口 server X.X.X.X:X; } server { listen XXX;#填入Nginx端口 server_name localhost; location / { set $backend portal; set $test portal_test; #下面填入灰度验证机器IP #if ( $remote_addr ~* "X.X.X.X") { # set $backend $test; #} proxy_pass https://$backend; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
  • 方案架构 系统升级时,开发人员第一次部署应用会创建出一组灰度负载,此时灰度负载中的系统版本为新版本,此时Service将部分流量转发至灰度负载上,由测试人员在灰度负载中进行版本验证。版本验证结束后,开发人员开始第二次部署应用升级现网服务,此时Service将全部流量转发至灰度负载上并升级现网服务,现网服务升级到最新版本后,Service将全部流量转发回现网负载并释放灰度负载,完成新系统的发布。 图1 灰度发布原理
  • Linux机器问题排查 检查IP、用户名及密码是否正确。 检查目标主机开放的端口是否为SSH协议端口(默认端口为22)。 开启方法: 开启防火墙。 systemctl start firewalld.service systemctl stop firewalld.service #关闭防火墙命令 开启端口。 firewall-cmd --zone=public --add-port=22/tcp --permanent --zone #作用域。 --add-port=22/tcp #端口,格式为:端口/通讯协议。 --permanent #永久生效,没有此参数重启后失效。 重启防火墙。 firewall-cmd --reload 检查当前网络状态。 使用“tcpdump”命令查看当前网络连接状态,命令如下: tcpdump -n "tcp port 22 and host xxx.xxx.xxx.xxx" #该命令执行在本地PC端,其中xxx.xxx.xxx.xxx为部署服务对外IP,目的是验证部署服务执行主机的网络是否畅通。 #或者: tcpdump -n "tcp port 22" | grep -v "xxx.xxx.xxx.xxx" #该命令执行在本地PC端,其中xxx.xxx.xxx.xxx为被部署的目标主机IP,目的是验证部署主机的网络是否畅通。 如下图所示,无回显信息说明网络已畅通。 部署服务对外IP如下。 中国站: 49.4.3.11 139.159.226.153 在主机列表对目标主机做连通性验证,观察部署服务端是否对目标主机做了SSH协议连接,出现如下图所示,说明部署服务对目标主机做了SSH协议连接。 原因分析: 服务端对目标主机存在SSH连接 如果服务端存在SSH连接,说明是目标主机本身配置问题。 如果已经定位出是目标主机配置问题,或者未安装Tcpdump,都需要检查目标主机本身配置来排查: 参考《用户指南》“配置黑/白名单”章节。 查看是否有防火墙配置,以iptables为例,命令如下: iptables -L 服务端对目标主机不存在SSH连接 如果服务端对目标主机不存在SSH连接,说明目标主机网络不可达,其所在的网络环境可能存在访问限制。 请查看硬件防火墙等相关网络配置,是否有限制源IP、目标IP、SSH协议配置的安全策略。 查看ssh密钥文件权限。 root账户登录机器,依次执行以下命令查看ssh密钥文件权限。 cd /root/.ssh ll 如图所示,查看文件权限是否为“rw”。 若文件权限不正确,执行以下命令完成修改。 chmod 600 文件名 主机连通性验证的用户对${HOME}目录操作失败。 检查主机${HOME}目录所在磁盘是否已满。 排查${HOME}目录所在磁盘是否已满,参考命令df -h 。 查看用户${HOME}目录的权限设置及目录隐藏属性等信息:ll -ld ${HOME},lsattr -d ${HOME}。 检查用户对${HOME}目录是否有读写权限。 修改${HOME}目录权限,为用户增加读写权限:参考命令 chmod ,chattr 。 检查用户默认shell设置是否为nologin。 查看用户默认shell设置是否为nologin模式,参考命令: cat /etc/passwd |grep $username ,其中$username为用户名。 (代理主机)如果已关联主机的代理主机连通性失败或者界面提示“主机连接超时,请查看解决方案”,请按如下方式进行排查: 测试代理主机的连通性。 检查代理主机上SSH配置AllowTcpForwarding是开启,命令如下: grep "AllowTcpForwarding" /etc/ssh/sshd_config 如果该属性值为no,则设置为yes,并重新启动sshd服务,命令如下: service sshd restart
  • 处理方法 构建任务使用如下脚本进行构建打包: 1 2 3 4 5 nuget restore msbuild /p:OutputPath=../buildResult/Release/bin powershell Invoke-WebRequest -UseBasicParsing https://www.7-zip.org/a/7z1900-x64.exe -OutFile ./7zip.exe 7zip.exe /S "C:/Program Files/7-Zip/7z.exe" a ./archive.zip ./buildResult/Release/bin/* 自定义打包请使用7-Zip打包工具进行打包。
  • 处理方法 若未安装Go,可通过“安装Go语言 ”部署步骤进行安装。 正确配置相关环境变量。 由于当前启动/停止操作为“no_login”方式,若系统为Linux系统,Go语言为手动安装,还需在以下文件中增加环境变量: Ubuntu: ~/.bashrc 和 ~/.profile Centos: ~/.bashrc 和 ~/.bash_profile 所需环境变量配置示例如下: export GOROOT=/usr/local/go/go_install_dir/go export GOPATH=/usr/local/go/go_workpath export PATH= $GOROOT/bin:$PATH
  • 部署服务相关权限说明 部署服务各维度的操作权限说明如下表所示。 应用默认权限说明 角色/动作 默认权限 创建 查看 修改 删除 执行 复制 禁用 新建环境 权限管理 应用创建者 - 有权限且不可修改 有权限且不可修改 有权限且不可修改 有权限且不可修改 有权限且不可修改 有权限且不可修改 有权限且不可修改 有权限且不可修改 项目管理员 有权限且不可修改 有权限且不可修改 有权限且不可修改 有权限且不可修改 有权限且不可修改 有权限且不可修改 有权限且不可修改 有权限且不可修改 有权限且不可修改 项目经理 有权限 有权限 有权限 有权限 有权限 有权限 有权限 有权限 有权限 产品经理 有权限 有权限 无权限 无权限 无权限 无权限 无权限 无权限 无权限 测试经理 无权限 有权限 无权限 无权限 无权限 无权限 无权限 无权限 无权限 运维经理 无权限 有权限 无权限 无权限 无权限 无权限 无权限 有权限 无权限 系统工程师 有权限 有权限 有权限 有权限 有权限 有权限 有权限 无权限 无权限 Committer 有权限 有权限 有权限 有权限 有权限 有权限 无权限 无权限 无权限 开发人员 有权限 有权限 有权限 有权限 有权限 有权限 无权限 无权限 无权限 测试人员 无权限 有权限 无权限 无权限 无权限 无权限 无权限 无权限 无权限 参与者 无权限 有权限 无权限 无权限 无权限 无权限 无权限 无权限 无权限 浏览者 无权限 有权限 无权限 无权限 无权限 无权限 无权限 无权限 无权限 主机集群默认权限说明 角色/权限 查看 编辑 删除 添加主机 复制主机 权限管理 主机集群创建者 有权限且不可修改 有权限且不可修改 有权限且不可修改 有权限且不可修改 有权限且不可修改 有权限且不可修改 项目创建者 有权限且不可修改 有权限且不可修改 有权限且不可修改 有权限且不可修改 有权限且不可修改 有权限且不可修改 项目经理 有权限 有权限 有权限 有权限 有权限 有权限 产品经理 有权限 无权限 无权限 无权限 无权限 无权限 测试经理 有权限 无权限 无权限 无权限 有权限 无权限 运维经理 有权限 无权限 无权限 无权限 有权限 无权限 系统工程师 有权限 无权限 无权限 无权限 无权限 无权限 Committer 有权限 无权限 无权限 无权限 无权限 无权限 开发人员 有权限 有权限 有权限 有权限 有权限 无权限 测试人员 有权限 无权限 无权限 无权限 有权限 无权限 参与者 有权限 无权限 无权限 无权限 有权限 无权限 浏览者 有权限 无权限 无权限 无权限 有权限 无权限 部署模板 操作 权限设定 系统模板 自定义模板 查看 所有用户 同租户下用户创建的 创建 所有用户都没权限 项目创建者、项目经理、开发人员 修改 所有用户都没权限 模板创建者、租户管理员 删除 所有用户都没权限 模板创建者、租户管理员
  • 规则详情 表1 规则详情 参数 说明 规则名称 codeartsdeploy-host-cluster-resource-status 规则展示名 CodeArts项目下的主机集群为可用状态 规则描述 codearts项目下的主机集群如果状态不可用,则该主机集群视为“不合规”。 标签 codeartsdeploy 规则触发方式 配置变更 规则评估的资源类型 codeartsdeploy.host-cluster 规则参数 无
  • 基本概念 账号 用户注册华为云时的账号,账号对其所拥有的资源及云服务具有完全的访问权限,可以重置用户密码、分配用户权限等。由于账号是付费主体,为了确保账号安全,建议您不要直接使用账号进行日常管理工作,而是创建用户并使用他们进行日常管理工作。 用户 由账号在IAM中创建的用户,是云服务的使用人员,具有身份凭证(密码和访问密钥)。 在我的凭证下,您可以查看账号ID和用户ID。通常在调用API的鉴权过程中,您需要用到账号、用户和密码等信息。 区域(Region) 从地理位置和网络时延维度划分,同一个Region内共享弹性计算、块存储、对象存储、VPC网络、弹性公网IP、镜像等公共服务。Region分为通用Region和专属Region,通用Region指面向公共租户提供通用云服务的Region;专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用Region。 详情请参见区域和可用区。 可用区(AZ,Availability Zone) 一个AZ是一个或多个物理数据中心的集合,有独立的风火水电,AZ内逻辑上再将计算、网络、存储等资源划分成多个集群。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。 项目 华为云的区域默认对应一个项目,这个项目由系统预置,用来隔离物理区域间的资源(计算资源、存储资源和网络资源),以默认项目为单位进行授权,用户可以访问您账号中该区域的所有资源。如果您希望进行更加精细的权限控制,可以在区域默认的项目中创建子项目,并在子项目中购买资源,然后以子项目为单位进行授权,使得用户仅能访问特定子项目中资源,使得资源的权限控制更加精确。 图1 项目隔离模型 同样在我的凭证下,您可以查看项目ID。 父主题: 使用前必读
  • 请求示例 https://{endpoint}/v1/applications/43943381f7764c52baae8e697720873f/environments { "project_id" : "55837d272adf4eee90319800e2da6961", "name" : "Environment name", "deploy_type" : 0, "description" : "Environment Description", "os" : "linux" }