容器健康检查代表了容器的健康状态,当容器平台判断容器健康检查失败后,会自动重启容器,直到健康检查成功为止。容器重启次数可以在“环境管理->管理资源”看到。
因此,配置正确的健康检查配置至关重要。
容器健康检查配置入口如上图所示,主要有两种健康检查类型:
1)http get:系统会定时通过http请求用户配置的URL,注意URL不能包含host字段。例如URL配置为“/checkpreload.htm”,端口配置为"8080",则系统会定时执行检查"curl http://localhost:8080/checkpreload.htm",并判断http的返回码是否为200。若http get返回200,则认为健康检查成功,反之认为健康检查失败。
2)shell script:系统会定时执行脚本内容,若脚本执行的返回值为0(类似 exit 0)则认为健康检查成功,否则认为失败。
在部署单详情页可以看到当前部署实例的日志。
点击查看日志可以看到当前容器的启动日志。
主要关注两个类型的日志:
1)[Event]类日志,如下图所示。尤其注意Event日志中的Warning,通常是导致部署不成功的原因所在。如下图所示就是健康检查配置错误导致的启动不成功。
2)应用自身的启动日志。这里根据每个应用的不同,需要开发者自行排查。
如果日志中无法定位到问题,请参照下面问题3进行排查
原因:容器自动退出, 或者健康检查失败导致容器被集群重启。
请检查:
1)应用的健康检查配置是否正确;
① 验证是否是健康检查配置错误:先修改健康检查配置为脚本检查 echo 'success',即健康检查永远返回成功,之后重新发布,如果能成功发布,说明之前就是健康检查失败的原因导致。发布成功后,环境管理-管理资源-远程登录,登录到容器内部进行确认,比如curl -v localhost:port/url(之前的健康检查配置),看是否返回200;
② 按照a中发布成功后,检查应用日志看报错信息,如java应用的catalina.log或application.log,日志默认在/acs/log路径下;
2)如果应用健康检查配置没有问题,就是应用自身不可用了,才会导致容器重启。(例如java OOM导致java进程被cgroup干掉);
3)检查java应用的部署配置,容器规格和环境变量中JVM的参数。有两个原则,① 容器内存规格要稍大于JVM堆;② JVM堆建议>=2G,不然容易出现jvm起来后因为内存不足被系统kill,导致健康检查失败,进而容器一直重启。验证方法,登录到ECS主机,执行dmesg | grep java,egrep -i -r 'killed process' /var/log等指令,可以验证是否有java进程被kill;
4)自定义镜像部署,请检查镜像entrypoint或cmd运行完是否会退出,详情见 镜像相关常见问题4。
可以在“环境管理->管理资源->远程登录”登录到对应的应用实例内,查看应用日志。
如果选择了官方镜像,官方镜像的应用日志通常在容器内/acs/log/目录下。
接入容器集群后,ECS上会额外部署一些管控使用的容器,因此会占用少量资源。但是总体占用资源并不会太大,如果出现容器可使用规格和ECS规格差距太大的情况,请联系技术支持同学。
发布记录中,查看发布列表,点击最新发布单的详情,看个示例:
1)创建发布单时,默认是分批发布,会根据总的容器数量自动定好每批发几个;
2)发布单提供暂停功能,默认第一批暂定,发完第一批后整个发布单处于“暂停”状态,如果需要继续发布,可以手动点击“恢复”;
3)如果发布失败,容器一直在发布中,请根据上面的问题3进程排查。如果想重新发布,则可以手动点击“关闭发布单”将该发布单进行关闭,然后创建新的发布单。
如问题6所述,当前环境下最新的发布单处于未关闭状态,可以点进去手动关闭掉,再创建新的。
购买ecs的时候可以不购买带宽,公网入方向的话可以通过公网SLB来,出方向通过NAT网关和弹性IP来解决。
这个程序包管理就是使用哪一个代码包发布,如果代码包有更新的话就是在发布管理里新建一个发布单。
如果提示Insufficient cpu, 则说明集群cpu核数不足以支撑本次发布; 如果提示Insufficient memory, 则说明集群内存资源不足以支撑本次发布; 即添加到集群的ECS上,没有可以调度给容器的资源了。具体剩余资源可以在集群详情-基本信息里看到。
解决方案:
1)添加其他ECS或者垂直升级ECS规格;
2)部署配置中,调小容器规格,然后重新提交一次发布单。
很多伙伴会有疑惑,为什么我一台或者两台 2核的机器,连1核的容器都部署不起来?
简而言之,机器太少了,资源太少了。由于集群自身需要占用资源,总的大概1.5vCPU 1.5G左右,如果你只有一台机器,那么资源都被集群占用了。后面新加机器就不会了,因为集群的占用基本是固定的。
具体计算规则见:创建集群文档的常见问题11。
1)应用发布时候,选择的环境要和集群环境一样。比如现在只有一个正式环境类型的集群,那么只能部署应用的正式环境;
2)集群内需要有ECS节点。
1)应用发布时候,选择的环境要和集群环境一样。比如现在只有一个正式环境类型的集群,那么只能部署应用的正式环境;
2)集群内需要有ECS节点。
详情见文档:https://www.yuque.com/fczggw/ec07di/dmvsw9。
集群中的ECS无法出公网,需要保证ECS能访问公网。
1.NAT网关SNAT条目是否正确,比如ECS所在的交换机,没有配置好相应的SNAT条目;NAT网关上绑定的EIP是否正常,是否欠费被锁定;
2.如果没有NAT网关,检查ECS是否有EIP或者公网IP
参考:NAT网关及其收费问题 文档中的解决方案。
环境管理->管理资源->远程登录;
首次登录时,需要设置免密登录账号密码,设置后之后登录就可以免密直接登录了。