我在Kubernetes中运行MongoDB作为StatefulSet。
我正在尝试使用启动/活动探测器,我注意到一些helm chart使用MongoDB“ping”命令。
正如the documentation所说,
ping命令是一个无操作命令,用于测试服务器是否响应命令。即使服务器被写锁定,此命令也会立即返回:
这是什么意思?当服务器正在启动或处于初始同步过程中时,该命令将返回什么?
我在Kubernetes中运行MongoDB作为StatefulSet。
我正在尝试使用启动/活动探测器,我注意到一些helm chart使用MongoDB“ping”命令。
正如the documentation所说,
ping命令是一个无操作命令,用于测试服务器是否响应命令。即使服务器被写锁定,此命令也会立即返回:
这是什么意思?当服务器正在启动或处于初始同步过程中时,该命令将返回什么?
1条答案
按热度按时间4szc88ey1#
我不确定Ping是否是一个好主意。您不关心服务器的一般状态;你关心它是否能接收连接。
活动探测器有一个超时,所以将来当您启动一个新的副本时,有状态集中的新pod可能会在等待复制结束时失败。
您应该使用rs.status()并获取“myState”字段。
如果由于某种原因,rs.status() 命令失败,这意味着ping也会失败。
然而,成功的ping并不意味着服务器已经准备好接收连接和提供数据,这才是您真正关心的。
探针
启动探针,myState等于1或2
这意味着启动探测器将耐心等待,直到服务器准备就绪,无论它是主服务器还是副本服务器。
就绪探测,myState等于1或2
这意味着,无论何时副本需要回滚或正在恢复,或者无论 mongod 决定它还没有准备好接受连接或提供数据,这都会让Kubernetes知道这个pod还没有准备好,并将请求路由到sts中的其他pod。
Livenes probe,myState不等于6、8或10
这意味着,除非服务器状态为UNKOWN、DOWN或REMOVED,否则Kubernetes将假定此服务器处于活动状态。
让我们测试一个场景!
All good:)