【发布时间】:2018-11-12 10:05:41
【问题描述】:
我正在尝试使用 Kubernetes 来管理需要运行多个应用程序实例(即多个 Pod)的场景。这些是我的要求:
- 当我需要扩展我的应用程序时,我想在特定节点(不是随机节点)上部署一个 Pod。
- 当我需要缩减应用程序时,我想从特定节点(不是随机节点)中删除特定 Pod。
- 部署新 Pod 时,我希望它挂载我手动配置的特定 PersistentVolume(不是随机的)。
- 删除 Pod 后,我希望其 PersistentVolume 可被其他 Pod 重用。
到目前为止,我使用这个简单的解决方案来完成上述所有工作:每次需要创建应用程序的新实例时,我都会创建一个新的 Deployment(只有一个副本)和一个 PersistentVolumeClaim。例如,如果我需要五个应用程序实例,那么我需要五个部署。不过,这种解决方案的可扩展性不是很好,也没有充分发挥 Kubernetes 的潜力。
我认为为所有 Pod 使用一个模板会更聪明,但我不确定我应该使用 Deployment 还是 Statefulset。
我一直在试验标签和节点亲和力,我发现我可以满足要求 1,但我无法通过这种方式满足要求 2。为了满足要求 2,是否可以通过编写我自己的自定义调度程序来删除特定的 Pod?
我不明白 Kubernetes 是如何决定将特定 PersistentVolume 绑定到特定 PersistentVolumeClaim 的。 是否有某种卷调度程序?我可以以某种方式对其进行自定义吗?这样,每次创建新 Pod 时,我都可以将其绑定到特定的卷。
【问题讨论】:
标签: kubernetes scheduling volume persistent