首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes POD故障切换

Kubernetes POD故障切换
EN

Stack Overflow用户
提问于 2019-09-25 04:45:46
回答 4查看 1.3K关注 0票数 0

我正在尝试使用Kubernetes,并已成功地将statefull应用程序(jenkins实例)部署到单个节点。它使用PVC来确保我可以持久化我的jenkins数据(作业、插件等)。

现在,我想尝试一下故障转移。

我的集群有2个数字海洋水滴。

目前,我的jenkins pod仅在一个节点上运行。当这种情况发生时,Jenkins就不能使用了。

我现在正在研究如何在某种意义上实现故障转移,即当jenkins pod在我的节点上关闭时,它将在另一个节点上启动。(因此,在此过程中短时间停机是可以的)。

当然,它必须使用相同的PVC,这样我的数据才能保持完好。

我相信,在阅读时,StatefulSet可以用来做这件事?

任何指针都是非常感谢的!

诚挚的问候

EN

回答 4

Stack Overflow用户

发布于 2019-09-25 05:05:54

Digital Ocean的Kubernetes服务仅支持PVC的ReadWriteOnce接入模式(参见here)。这意味着卷一次只能连接到一个节点。

我遇到了this blogpost,虽然它专注于Azure上的Jenkins,但也有同样的情况,只支持ReadWriteOnce。作者声明:

然而,对于我来说,

的缺点在于Azure Disk持久卷的访问模式是ReadWriteOnce。这意味着Azure磁盘一次只能连接到一个群集节点。在节点发生故障或更新的情况下,Azure磁盘可能需要1-5分钟才能分离并连接到下一个可用节点。

注意,Pod故障和节点故障是两回事。因为DO只支持ReadWriteOnce,所以在节点故障容错方面,尝试比现在更复杂的东西没有任何好处。因为它是ReadWriteOnce卷,所以需要从故障节点卸载卷并重新挂载到新节点,然后在新节点上调度一个新的Pod。Kubernetes将为您完成此操作,您无法对其进行优化。

对于Pod故障,您可以使用Deployment,因为您希望读取和写入相同的数据,您不希望将不同的PV连接到不同的副本。这样做的好处可能非常有限,因为您将在同一节点上运行Pod的多个副本,因此这取决于Jenkins进程如何扩展,以及它是否能够支持该类型的横向扩展模型,同时全部写入相同的卷(而不是简单地垂直扩展内存或CPU请求)。

如果你真的想在节点和/或Pod故障的情况下实现更高的可用性,并且你正在部署的Jenkins工作负载对本地卷有持久状态的严格要求,你将需要考虑一个替代的卷插件,比如NFS,或者移动到不同的云提供商,比如GKE。

票数 4
EN

Stack Overflow用户

发布于 2019-09-25 04:48:11

可以,您可以根据用例使用部署或StatefulSet。对于Jenkins来说,StatefulSet将是合适的。如果正在运行的pod变得不可用,StatefulSet控制器将看到它并产生一个新的pod。

票数 0
EN

Stack Overflow用户

发布于 2019-09-25 05:02:30

您所描述的是由控制器管理的Kubernetes for Pods的默认行为,例如部署。

您应该将任何应用程序部署为部署(或另一个控制器),即使它只包含一个Pod。您从未真正将Pod直接部署到Kubernetes。因此,在这种情况下,您无需执行任何特殊操作即可获得此行为。

当你的一个节点死了,Pod也死了。这是由部署控制器检测到的,它会创建一个新的Pod。这反过来由调度器检测,调度器将新的Pod分配给节点。由于其中一个节点已关闭,它会将Pod分配给另一个仍在运行的节点。Pod分配到该节点后,该节点的kubelet将在该节点上运行该Pod的容器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58087890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档