我有一个看起来像这样的Kubernetes部署(用'....'替换名称和其他东西):
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "3"
kubernetes.io/change-cause: kubectl replace deployment ....
-f - --record
creationTimestamp: 2016-08-20T03:46:28Z
generation: 8
labels:
app: ....
name: ....
namespace: default
resourceVersion: "369219"
selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/....
uid: aceb2a9e-6688-11e6-b5fc-42010af000c1
spec:
replicas: 2
selector:
matchLabels:
app: …Run Code Online (Sandbox Code Playgroud) 我正在努力将我的应用程序迁移到 Kubernetes。我正在使用 EKS。
我想将我的 Pod 分布到不同的节点,以避免出现单点故障。我读到了pod-affinityandanti-affinity和requiredandpreferred模式。
这个答案提供了一个非常好的方法来实现这一点。
但我的疑问是,假设我有 3 个节点,其中 2 个节点已满(资源方面)。如果我使用requiredDuringSchedulingIgnoredDuringExecution,k8s 将启动新节点并将 Pod 分发到每个节点。如果我使用preferredDuringSchedulingIgnoredDuringExecution,它将检查首选节点,并且不会找到不同的节点,只会将所有 Pod 部署在第三个节点上。在这种情况下,它将再次成为单点故障。
我该如何解决这种情况?
我能想到的一种方法是拥有一个超额配置的集群,这样总会有一些额外的节点。
第二种方法,我不知道如何做到这一点,但我认为应该有一种同时使用requiredDuringSchedulingIgnoredDuringExecution和 的方法preferredDuringSchedulingIgnoredDuringExecution。
谁能帮我这个?我错过了什么吗?在这种情况下人们如何工作?
我是 Kubernetes 的新手,所以如果我错了或者遗漏了什么,请随时纠正我。
提前致谢
笔记:
我在同一节点上运行几个类似的 pod 没有问题,只是不希望所有 pod 都在同一节点上运行,因为只有一个节点可供部署。