繁体   English   中英

K8s Daemonset Pod 放置

[英]K8s Daemonset Pod Placement

我们有 4 个节点的 EKS 集群。 我们有一些 pod(Daemonset 的一部分)处于挂起状态,因为节点已满并且节点中没有容量来运行 pod。 问题是我们是否需要手动重新调整工作负载以使 Daemonset pod 在这种情况下运行,或者是否有任何配置可以自动解决这个问题?

注意:我们还安装了 Cluster Autoscaler,它非常适合部署。

先感谢您。

Kube.netes 有 pod 优先级和抢占这个特定目的。

Pod 可以有优先权。 优先级表示一个 Pod 相对于其他 Pod 的重要性。 如果无法调度 Pod,调度程序会尝试抢占(驱逐)优先级较低的 Pod,以便调度待处理的 Pod。
参考: https://kube.netes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/

如果 EKS 没有预先配置的优先级,您可以自己创建一个。 例如,文档中的那个是抢占式的:

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-priority
value: 1000000
globalDefault: false
description: "This priority class should be used for XYZ service pods only."

然后你在你的守护进程集上使用那个 class

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  priorityClassName: high-priority # this is important

请注意,这只是从链接文档中复制的一个小示例,您应该仔细阅读文档,或许还应查看这将如何与 pod 中断预算相互作用。

另请注意,这可能会导致其他部署中断,具体取决于更新策略等各种因素。 所以,要小心。

由于这些 pod 是 Daemonset 的一部分,它们应该被安排在连接到集群的每个节点上,这意味着您必须为它们失败的节点上的 pod 腾出空间。

如果您自己编写了该 daemonset,则可以指定.spec.template.spec.nodeSelector ,然后 DaemonSet controller 将在与该节点选择器匹配的节点上创建 Pod。 同样,如果您指定.spec.template.spec.affinity ,则 DaemonSet controller 将在与该节点亲和力匹配的节点上创建 Pod。 如果您不指定任何一个,则 DaemonSet controller 将按照官方文档在所有节点上创建 Pod。 或者,如果守护程序集(第三方编写的)已经支持任何调度,您可以利用。

您还可以考虑增加节点大小,也就是节点组的实例类型,但必须小心,因为节点是不可变的,必须用新的实例类型或新的节点组替换。 有关更新 Node 实例类型的完整答案,请参阅此处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM