Kubernetes:自定义Pod调度和批量调度

时间:2018-11-11 21:59:17

标签: kubernetes scheduling volume persistent

我正在尝试使用Kubernetes来管理需要运行一个应用程序的多个实例(即多个Pod)的场景。这些是我的要求:

  1. 当我需要扩展应用程序时,我想在特定节点上部署一个Pod(而不是一个随机的Pod)。
  2. 当我需要按比例缩小我的应用程序时,我想从特定的Node(不是随机的)中删除特定的Pod。
  3. 部署新的Pod时,我希望它安装我手动配置的特定PersistentVolume(不是随机的)。
  4. 删除Pod后,我希望其PersistentVolume可被其他Pod重新使用。

到目前为止,我已经使用此幼稚的解决方案来完成上述所有操作:每次需要创建应用程序的新实例时,我都会创建一个新的Deployment(具有一个副本)和一个PersistentVolumeClaim。因此,例如,如果我需要应用程序的五个实例,那么我需要五个部署。但是,该解决方案不是很可扩展,并且没有充分利用Kubernetes的潜力。

我认为对所有Pod使用一个模板会更明智,但是我不确定应该使用Deployment还是Statefulset。

我一直在尝试使用标签和节点亲和力,发现我可以满足要求1,但是我不能以此方式满足要求2。为了满足要求2,是否可以通过编写自己的自定义调度程序来删除特定的Pod?

我不了解Kubernetes如何决定将特定的PersistentVolume绑定到特定的PersistentVolumeClaim。 是否存在一种卷调度程序?我可以以某种方式自定义它吗?这样,每次创建新的Pod时,我都可以将其绑定到特定的卷。

1 个答案:

答案 0 :(得分:1)

可能有这些要求的充分理由,所以我不会试图说服您,为此使用Kubernetes可能不是一个好主意...

是-通过使用带有标签,node affinityanti-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