可用性问题

Pod如何做健康检测(liveness探针)

k8s提供了liveness probe功能,用于检测pod情况。

  • 通过命令检测
  • 通过HTTP请求检测(200 < code < 400即是成功)
  • 通过TCP检测(端口建立连接成功,即被认为健康)

如何知道Pod已就绪(readiness探针)

readiness探针与liveness探针一样,只是配置名字不同而已。
两者可以搭配一起使用,确保Pod容器是正常可以访问的。

Pod一直重启不起来会如何

需要分几种情况讨论:

  • Pod挂掉重启
    新Pod启动不起来,此时Deployment有可能处于Unavailable状态,但只要旧Pod还在,就可以继续服务。

  • 滚动部署(更改image版本)
    新的Pod无法启动成功,Deployment会使用旧的版本,可以回滚到原先正常的版本,或者部署新的正常版本

  • 新的Deployment
    deployment会一直处在不可用状态,因为Pod并没有启动起来

Pod挂掉会怎么样

首先说明,这种情况是Pod挂掉,而不是Pod里面的进程无法正常服务(比如服务并不正常,但是进程没有异常退出)。

k8s会启动新的Pod进行服务,移除旧的Pod。

集群Node挂掉,服务受到什么影响

目前来看,node挂掉,k8s检测到之后,需要持续一段时间不可用,才会把pod杀掉(此时请求并不能实际在node上生效,因为它已经挂掉),在其他node启动一个新的pod进行服务。

Traefik采用daemonset的形式部署,此时外部流量从nginx进来,nginx直接指向群集的traefik几个daemonset,会存在不可用的情况,这时候需要nginx的upsteam配置好对应策略,比如proxy_connect_timeout,默认为60s,那么在60s超时后才会尝试下一个upstream,此时会存在比较长时间不可用。

Node重启后,k8s控制器要求删除的pod会生效被删除,已经启动在其他node的pod照样运行,不会迁移回来。

Nodes | Kubernetes

Master挂掉,整个服务会怎么样

(Master单点情况下挂掉)现有服务不受影响,新调度无法进行。

Pod频繁挂掉,要怎么处理比较合适

服务k8s化

Pod挂掉,怎么查阅程序异常日志

参考

配置Pod的liveness和readiness探针