我想在节点上部署一个Pod来承载我的服务(例如本示例中的GitLab)。问题是:在节点故障(如重新启动)之后,将不会重新创建Pod。解决方案:使用StatefulSet,ReplicaSet或DaemonSet确保在节点故障后创建Pod。但是这种情况下最好的是什么?
此Pod是有状态的(我正在使用卷hostPath
保留数据),并使用nodeSelector
进行了部署,以使其始终位于同一节点上。
以下是示例的简单YAML文件:https://pastebin.com/WNDYTqSG
它将创建3个Pod(每个Set
一个Pod),该Pod具有一定的容量以有状态地保留数据。实际上,所有这些解决方案都可以满足我的需求,但是我不知道这种情况下是否有最佳实践。
能否请我在这些解决方案之间进行选择,以部署单个有状态Pod?
答案 0 :(得分:3)
部署是管理Pod或Pod组的最常见选项。通常使用它们代替ReplicaSet,因为它们更加灵活,并在ReplicaSet中创建部署结果-请参见https://www.mirantis.com/blog/kubernetes-replication-controller-replica-set-and-deployments-understanding-replication-options/
如果您有多个Pod,并且每个Pod需要专用的持久性,或者您有多个Pod,并且Pod需要单独的名称,因为它们彼此相关(例如,一个是领导者),则只需要一个StatefulSet-https://stackoverflow.com/a/48006210/9705485
当您希望每个节点一个Pod /副本时,将使用DaemonSet