我正在我的命名空间下部署我的服务。我们有一个工作节点群,我的服务将仅利用其节点的一小部分。
我想部署 cAdvisor 的 DaemontSet,但我只希望它们在与我的命名空间无关的节点中运行。如果可以的话,该怎么做?
谢谢!
ScheduleDaemonSetPods
是一项 kubernetes 功能,允许您使用默认调度程序而不是 DaemonSet 控制器来调度 DaemonSet,方法是将 NodeAffinity
项添加到 DaemonSet pod,而不是 .spec.nodeName
项。 Kubernetes 文档
例如,下面的 k8s 清单将在带有
type=target-host-name
的节点上创建 Pod:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: testdaemon
spec:
template:
metadata:
labels:
app: testdaemon
annotations:
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: type
operator: In
values:
- target-host-name
containers:
- name: testdaemon
image: nginx
DaemonSet 每个节点运行一个 pod。但是,您也可以控制它在选定的节点上运行。
如果指定 .spec.template.spec.nodeSelector,则 DaemonSet 控制器将在与该节点选择器匹配的节点上创建 Pod。
同样,如果您指定 .spec.template.spec.affinity,则 DaemonSet 控制器将在与该节点亲和力匹配的节点上创建 Pod。
如果您两者都不指定,则 DaemonSet 控制器将在所有节点上创建 Pod。