云服务器内容精选

  • Helm3部署示例的环境准备 本节作为后续三个示例的环境准备,以环境准备中的chart目录为例,将使用如下模板,对CCE集群进行部署,在代码托管代码仓中,创建如下目录。 configmap.yaml部分片段: metadata: name: {{ .Values.configmapname }} deployment.yaml部分片段: spec: template: spec: containers: - image: '{{ .Values.imagename }}:{{ .Values.imagetag }}' values.yaml部分片段: configmapname: valuesfromfile imagename: httpd imagetag: latest {{ .Values.xxxx }} 对应Chart内values.yaml定义的变量。 以下三个示例,是在本节基础上进行的。 参考:Values文件使用说明。 示例1:使用Chart包或Chart文件结构目录部署 如果Chart中已有缺省values文件,则不需要指定制品仓库values文件,可直接部署。 其部署结果为: 对应CCE生成的configMap为: 对应CCE生成的deployment为: 示例2:通过指定制品仓库中的Values文件部署 本示例将演示,指定制品仓库中的Values文件进行部署。 外部values文件中定义的值将会覆盖Chart中values文件定义值。 外部Values的片段,本示例命名为values123.yaml: configmapname: valuesfile-releasenman imagename: nginx imagetag: stable 如下图,在“选择Values文件”中,选择制品仓库中的Values文件: 其部署结果为: 对应CCE控制台的configMap为: 对应CCE控制台的deployment为: 示例3:通过设置Values值进行部署 当设置了Values的值,其优先级会是最高的,会覆盖Chart内values文件设置值以及外部values文件内的设置值。 下面将以设置镜像版本的操作为例: Chart内values文件片段: imagetag: latest 制品仓库values文件片段: imagetag: stable 在设置values,填入: imagetag=perl 其部署结果为: 对应CCE控制台的deployment为:
  • Linux系统主机配置 为确保Linux系统主机连通性验证成功,Linux主机需确保安装Python并开启SELinux机制,目标主机需要满足以下条件。 目标主机安装Python: 需安装Python2.6及以上版本,如果已安装Python2.6以下版本,需要在主机上安装以下模块,各系统安装命令如下: Ubuntu系统 sudo apt install python-minimal python-simplejson Centos或Euler系统 sudo yum install python-minimal python-simplejson ln -s /usr/bin/python2 /usr/bin/python 采用Apt或者Yum安装工具时,请确保已配置可用的源。 主机开启SELinux机制并安装“libselinux-python”模块: 查看SELinux状态,命令如下: /usr/sbin/sestatus “SELinux”状态参数值所对应的模式: SELinux=disabled:未开启。 SELinux=enforcing:强制模式,表示所有违反安全策略的行为都将被禁止。 SELinux=permissive:宽容模式,表示所有违反安全策略的行为不被禁止,但是会在日志中作记录。 若SELinux=disabled,则主机未开启该机制,需修改SELinux状态,步骤如下: 编辑SELinux的config文件,执行命令: vi /etc/selinux/config 根据实际情况选择修改SELinux参数为参数: SELinux=enforcing:强制模式,表示所有违反安全策略的行为都将被禁止。 SELinux=permissive:宽容模式,表示所有违反安全策略的行为不被禁止,但是会在日志中作记录。 修改完成按键盘“Esc键”,退出编辑模式,执行下面的命令,保存并退出文件。 wq 在根目录下创建隐藏文件.autorelabel,执行下面的命令后,重启Linux主机。 touch /.autorelabel 在主机上安装“libselinux-python”模块,各系统安装命令如下: Ubuntu系统 sudo apt install libselinux-python Centos或Euler系统 sudo yum install libselinux-python
  • Windows系统代理机配置 所需资源 已有Windows机器。 代理机和主机网络连通正常。 操作步骤 进入代理机,打开powershell窗口,执行netsh命令,注意按参数说明替换参数: netsh interface portproxy add v4tov4 listenaddress=${proxy_ip} listenport=${proxy_port} connectaddress=${host_ip} connectport=${host_port} 表2 参数说明 参数 参数释义 ${proxy_ip} 代理机私网IP ${proxy_port} 代理机监听端口,如54 ${host_ip} 主机私网IP ${host_port} 主机端口,一般为5986 进行安全配置,需要开通代理监听端口,即上述指令中的${proxy_port}。
  • 方案架构 系统升级时,若采用蓝绿部署方式,开发人员需进行如下操作: 先将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; } } }
  • 处理方法 win+R打开运行窗口,输入“regedit”打开Windows的注册表编辑器,定位到以下路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 在右侧窗口中,找到名为TcpTimedWaitDelay的DWORD值。如果该值不存在,则需要手动创建。 修改TcpTimedWaitDelay参数数值为需要设置的值(以毫秒为单位),例如,将TcpTimedWaitDelay设置为1分钟(60000毫秒)。 重启计算机使配置生效。 修改TcpTimedWaitDelay的值可能会影响网络性能和安全性,请根据业务需要自行评估。单环境中包含多台Windows目标主机执行部署时,建议采用分批部署方式,避免修改TcpTimedWaitDelay值造成未知影响。
  • 部署应用时错误信息的说明有哪些? 在部署应用过程中,部署失败后日志中提示错误信息及说明,如下表所示: 错误信息 错误信息说明 The host ip is invalid, Please check 主机不可用,主机ip不能是127.0.0.1或者localhost [group_vars/all] is not found, Please check [group_vars/all]文件未找到,请确认入口文件所在目录下是否包含[group_vars/all]文件 The parameter value is invalid, Please check! 参数值存在不识别的字符,参数值仅支持ASCII(除“{{”,“{%”,“{#”) The parameter value is invalid, Please check! 参数名称中存在不识别的字符,参数只能包含_、数字与大小写字母 父主题: 应用部署
  • 查看本机器是否有IIS功能 请根据下面的步骤查看机器版本是否有iis功能。 以“Windows Server 2012 R2英文版操作系统”为例: 打开计算机,单击“卸载或更改程序”如下图所示 图1 卸载或更改程序 然后单击“启用或关闭Windows功能”如下图所示。 图2 启用或关闭Windows功能 在打开的页面中单击“Next” 如下两张图所示进行操作。 图3 操作示意 图4 操作示意 在打开的页面中查找“Web Server(IIS)” 如下图所示,如若不存在,则该版本不支持IIS功能。 图5 操作示意 父主题: 新建IIS站点
  • 问题现象 日志提示如下信息: "msg": "Failed to find handler for \"usr/local/python/Python-3.5.4.tgz\". Make sure the required command to extract the file is installed. Command \"/usr/bin/unzip\" could not handle archive. Command \"/usr/bin/gtar\" could not handle archive."}
  • 解决方法 使用命令 “ping $domainName”(其中$domainName为apt源链接对应的 域名 ),检查网络连通性,如果网络连通正常请检查防火墙和安全组(如下2、3),否则请联系相关网络管理员打通网络。 对于防火墙限制出方向: 执行命令“iptables -nL”,查看防火墙出方向限制清单是否包含80端口。 对于云主机安全组出方向规则策略限制: 联系相关网络管理员设置安全组出方向规则策略。
  • 处理方法 使用命令 “ping $domainName”(其中$domainName为yum源链接对应的域名),检查网络连通性,如果网络连通正常请检查防火墙和安全组(如下2、3),否则请联系相关网络管理员打通网络。 对于防火墙限制出方向: 执行命令“iptables -nL”,查看防火墙出方向限制清单是否包含80端口。 对于云主机安全组出方向规则策略限制: 联系相关网络管理员设置安全组出方向规则策略。
  • 问题现象 当部署主机相关的应用时,出现如下日志: 以路径为例,有以下几种常见现象: 输入的路径参数有“\b”特殊字符导致部署报错,如下图所示。 图1 日志信息 输入的路径参数有“\f”特殊字符导致部署报错,如下图所示。 图2 日志信息 输入的路径参数有“\r”特殊字符导致部署报错,如下图所示。 图3 日志信息 输入的路径参数有“\t”特殊字符导致部署报错,如下图所示。 图4 日志信息 输入的路径参数有“\n”特殊字符导致部署报错,如下图所示。 图5 日志信息
  • 问题现象 日志提示如下信息: "msg": "Failed to find handler for \"usr/local/python/Python-3.5.4.tgz\". Make sure the required command to extract the file is installed. Command \"/usr/bin/unzip\" could not handle archive. Command \"/usr/bin/gtar\" could not handle archive."}
  • 解决方法 使用命令 “ping $domainName”(其中$domainName为apt源链接对应的域名),检查网络连通性,如果网络连通正常请检查防火墙和安全组(如下2、3),否则请联系相关网络管理员打通网络。 对于防火墙限制出方向: 执行命令“iptables -nL”,查看防火墙出方向限制清单是否包含80端口。 对于云主机安全组出方向规则策略限制: 联系相关网络管理员设置安全组出方向规则策略。
  • 处理方法 使用命令 “ping $domainName”(其中$domainName为yum源链接对应的域名),检查网络连通性,如果网络连通正常请检查防火墙和安全组(如下2、3),否则请联系相关网络管理员打通网络。 对于防火墙限制出方向: 执行命令“iptables -nL”,查看防火墙出方向限制清单是否包含80端口。 对于云主机安全组出方向规则策略限制: 联系相关网络管理员设置安全组出方向规则策略。