我正在尝试使用Kubernetes来管理需要运行一个应用程序的多个实例(即多个Pod)的场景。这些是我的要求:
到目前为止,我已经使用此幼稚的解决方案来完成上述所有操作:每次需要创建应用程序的新实例时,我都会创建一个新的Deployment(具有一个副本)和一个PersistentVolumeClaim。因此,例如,如果我需要应用程序的五个实例,那么我需要五个部署。但是,该解决方案不是很可扩展,并且没有充分利用Kubernetes的潜力。
我认为对所有Pod使用一个模板会更明智,但是我不确定应该使用Deployment还是Statefulset。
我一直在尝试使用标签和节点亲和力,发现我可以满足要求1,但是我不能以此方式满足要求2。为了满足要求2,是否可以通过编写自己的自定义调度程序来删除特定的Pod?
我不了解Kubernetes如何决定将特定的PersistentVolume绑定到特定的PersistentVolumeClaim。 是否存在一种卷调度程序?我可以以某种方式自定义它吗?这样,每次创建新的Pod时,我都可以将其绑定到特定的卷。
答案 0 :(得分:1)
可能有这些要求的充分理由,所以我不会试图说服您,为此使用Kubernetes可能不是一个好主意...
是-通过使用带有标签,node affinity和anti-affinity规则的nodeSelector,可以在“适当”的节点上调度pod。
Static Pods可能与您要寻找的东西很接近。我从来没有在Kubernetes上使用过静态Pod / Bare Pod ...他们并没有(从问题中引用一些东西)“ ...挖掘Kubernetes的全部潜力”;-)
否则,这是我认为可以用于以下四个需求的即用型构造:
像以前一样使用部署-这将给您带来#1和#2要求。我不认为StatefulSet可以满足要求2(实际上也不是1)。都没有ReplicaSet。
使用静态配置的PV和selector(s)来(引用)“ ...将特定的PersistentVolume与特定的PersistentVolumeClaim关联”。
那么第4条要求将成为可能-只需确保PV使用正确的reclaim policy。