我想在某些特定Pod/Service所在的特定节点上调度DaemonSet。我的想法是,我可以在Pod上标记特定的标签'app.type=with-aemon',然后我可以在daemoSet中指定PodAffinity,如下所示:
spec:
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app.type
operator: In
values:
- with-daemon
topologyKey: "kubernetes.io/hostname"
我确实看到DaemonSet Pod在特定节点中运行,但我也看到k8尝试在所有其他节点中调度DaemonSet Pod,因此这些Pod状态始终为Pending。
所以我的问题是:k8s支持用podAffinity调度DaemonSet吗?我的上述用法是一种常见用法吗?
2条答案
按热度按时间cyvaqqii1#
通常,守护程序设置默认行为是在所有可用节点上进行调度,但设置了污点的节点除外。
我正在使用污点+节点亲和性在特定节点类型上调度POD,但在这种情况下使用部署比使用Daemonset更好。
在您的用例中,您可以使用Pod affinity或Anti-affinity,如果希望特定的POD与特定类型的POD一起运行。
例如:如果你想在节点上分散POD,并在连接了GPU的节点上运行,那么你可以使用节点亲和度+污点+ POD反亲和度的多个选项。
但是使用Daemonset将是一个坏主意,除非您需要在所有可用节点上运行或在扩展期间加入新节点。
sc4hvdpw2#
一个DaemonSet,就其本质而言,被调度到每个节点上(除了有污点的地方,在这种情况下,你需要有一个宽容来覆盖它)
如果您希望这些pod位于特定节点上,DaemonSet不是要使用的正确资源,您需要Deployment或StatefulSet。