容器健康检查代表了容器的健康状态,当容器平台判断容器健康检查失败后,会自动重启容器,直到健康检查成功为止。容器重启次数可以在“环境管理->管理资源”看到。
因此,配置正确的健康检查配置至关重要。
容器健康检查配置入口如上图所示,主要有两种健康检查类型:
在部署单详情页可以看到当前部署实例的日志。
点击查看日志可以看到当前容器的启动日志。
主要关注两个类型的日志:
如果日志中无法定位到问题,请参照下面问题3进行排查。
原因:容器自动退出, 或者健康检查失败导致容器被集群重启。
请检查:
(容器规格示例:)
以java为例:检查java应用的部署配置,容器规格和环境变量中JVM的参数。有两个原则,1)容器内存规格要稍大于JVM堆;2)JVM堆建议>=2G,不然容易出现jvm起来后因为内存不足被系统kill,导致健康检查失败,进而容器一直重启。验证方法,登录到ECS主机,执行dmesg | grep java,egrep -i -r 'killed process' /var/log等指令,可以验证是否有java进程被kill。注:例如Java应用。
可以在“环境管理->管理资源->远程登录”登录到对应的应用实例内,查看应用日志。
如果选择了官方镜像,官方镜像的应用日志通常在容器内/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左右,如果你只有一台机器,那么资源都被集群占用了。后面新加机器就不会了,因为集群的占用基本是固定的
具体计算规则见:
点击查看。
1)应用发布时候,选择的环境要和集群环境一样。比如现在只有一个正式环境类型的集群,那么只能部署应用的正式环境;
2)集群内需要有ECS节点。
1)应用发布时候,选择的环境要和集群环境一样。比如现在只有一个正式环境类型的集群,那么只能部署应用的正式环境;
集群中的ECS无法出公网,需要保证ECS能访问公网。
1.NAT网关SNAT条目是否正确,比如ECS所在的交换机,没有配置好相应的SNAT条目;NAT网关上绑定的EIP是否正常,是否欠费被锁定;
2.如果没有NAT网关,检查ECS是否有EIP或者公网IP
参考:点击查看 。
环境管理->管理资源->远程登录;
首次登录时,需要设置免密登录账号密码,设置后之后登录就可以免密直接登录了.
如果应用类型是“有状态”,暂时只支持Yaml类型的部署配置。
1)如果是Yaml类型的部署配置,请检查Yaml的格式以及是否遵守相关CRD资源的配置规则;
2)如果是普通类型的部署配置,请检查部署配置。
请确定部署配置中,标签Key已经添加了`label.jst.com/`前缀。
为了避免和集群内的节点系统标签冲突,聚石塔会默认在节点标签前加label.jst.com/前缀,且这个前缀在产品化的节点打标界面没有展示。请使用Yaml部署配置的开发者自己在nodeSelector等其他需要节点标签的位置自己添加该前缀标签。
对于Deployment类型的配置,metadata中只允许labels,其他暂时都不允许.
对于StatefulSet类型的配置,metadata中只允许labels和name,其他暂时都不允许。
不能在ECS直接操作容器,需要在应用发布页面中,将相应的环境缩容;例如想将容器全部下掉,将实例数设置为0。
可以通过将部署配置保存为模板和加载模板解决。
1.集群刚创建还在初始化,请稍等几分钟再试。
参考nas文档,可以在ECS上执行文档给出的命令或者在容器启动前执行给出的命令。若使用的是自定义镜像,则可以执行完命令后,重新打一个镜像。
当成功发布后,可以使用扩缩容功能。如果之前没有发布成功过,那么认为当前环境没有基线,请重新提交发布单。特别地,如果是想调整实例数量(比如把容器数量设置为0),先编辑环境,调整实例个数,之后再提交发布单。
1)对于已经成功发布过的环境,直接调整实例数量.
2)对于没有成功发布过的,修改环境的实例数量,重新提交发布单进行发布。
原因是无法与集群通信。检查下SLB是否状态异常,看下是否是账号欠费导致。
1)新的应用视图增加了"只看当前环境"选项,默认选中;
a) 因之前程序包是多环境共享,并没有标记到具体环境,所以应用视图升级后,首次使用时看不到代码包,发布后即可看到新上传的代码包;
b) 如果要使用之前的代码包,请取消选中"只看当前环境",即可看到所有的代码包;
2)代码包只保留最近的20次发布,历史的不再保留。
解决方案:
这种情况需要重新上传代码包发布一次 或者 在【程序包管理】中选择历史代码包重新发布一次。
原因:
聚石塔代码包下载地址的最长有效时长为90天,因此,403错误一般是发生在应用扩容时或容器漂移时,并且距离上次发布成功已经超过了90天导致。
首先,云原生容器集群下,云应用的容器由集群调度,调度算法比较复杂,简单来说就是会根据一定的策略判断选择出最适合的宿主机,在上面创建容器。容器重新创建(IP变化)的场景有:
1)应用发布,新容器会替代老容器;
2)被集群驱逐出当前宿主机;
注:这里说明下集群驱逐的情况,驱逐原理,当宿主机上的资源使用超过一定阈值时,集群为了保证稳定性,认为当前节点不适合运行这么多容器,会产生驱逐机制,将当前节点上的容器进行销毁,并且将容器重新调度到其他节点。其中,最常见的原因是磁盘空间不足导致的,可以直接升级下系统盘或者减少磁盘占用 (参考这个解决方案:点击查看)
综上,基于这个集群调度逻辑,云原生场景下,不建议容器依赖具体某个宿主机的数据(即容器只有在某台机器上启动才能正常运行,这显然是不合理的),因为如果发生上述应用发布和集群驱逐的场景,就可能导致业务问题。容器是可移植可弹性的最小单位,充分发挥其弹性能力,从1个实例到N个实例,直接修改实例个数就行,集群帮你自动调度,对于集群来说,这些容器应该提供无差别的服务,不能说一台机器上的容器就正常,运行在另外一台机器上的就无法正常工作。
对于依赖了宿主机目录数据的,有两个方案。
1.使用节点标签功能,让云应用的容器固定调度到某一台ECS (点击查看);
2.使用NAS共享存储,不直接依赖ECS上的数据,容器不管调度到哪台ECS,使用的都是同一份数据(点击查看);
1)排查是否是上传部署使用的代码包损坏的原因
可以在本地执行unzip解压代码包(从服务列表-历史版本部署下载最新上传的代码包)看下结果,含有"attemption to process anyway"提示的均是代码包异常
2)如果是代码包异常,请重新打包上传
1) 请确认当前容器所在的ECS是否过期 或 欠费停机
2) 如果ECS状态正常,请执行以下操作
a) 执行 ps -ef | grep acsagent 找到acsagent的进程id
b) kill -9 <pid> (<pid>为上面找到的进程id)
c) 等待acsagent进程重新自动拉起后,再次发布重试
d) 如果仍未成功,请重启ECS