我需要以“最多一次”语义运行我的应用程序。在任何给定时间只运行我的应用程序的一个实例或根本不运行,这绝对是至关重要的
起初我使用具有单个副本的资源类型“部署”,但后来我意识到在网络分区期间,我们可能无意中运行了多个实例。
当我在 kubernetes 中搜索最常用的语义时,我偶然发现了“有状态集”。进一步阅读,这些示例处理了容器需要持久卷并且通常这些容器运行多个副本的情况。我的应用程序甚至没有使用任何卷。
如果节点无法访问,我还阅读了关于杀死 pod 的容忍度。鉴于容忍可以处理 pod 无法访问的情况,有状态设置对我的用例来说是否过度杀伤?
我正在证明使用有状态集是合理的——因为即使在那个时候节点变得无法访问并且达到了容忍秒数,并且 kubelet 意识到它已与网络断开并杀死进程,kubernetes 可以启动另一个实例。而且我相信有状态的集合也可以防止这种极端情况。
我对吗?有没有其他方法可以实现这一目标?