Kubernetes DaemonSet结合PodAffinity实现仅在运行指定标签Pod的节点调度的问题求助
Kubernetes DaemonSet结合PodAffinity实现仅在运行指定标签Pod的节点调度的问题求助
各位Kubernetes开发者好,我碰到了一个DaemonSet调度的困扰,想请大家帮忙分析下:
我所在的集群里,用StatefulSet部署了Filebeat,它通过节点本地卷收集微服务的日志,再推送到我们的OpenSearch。但现在的问题是,并不是所有节点上都有需要收集日志的服务——只有运行着带有type: microservice标签Pod的节点,才需要Filebeat工作,这就导致很多节点上的Filebeat Pod完全是闲置状态,纯粹浪费资源。
我的想法是限制DaemonSet的调度范围,让它只在至少有一个type: microservice标签Pod运行的节点上启动自己的Pod。我查到了podAffinity这个配置,但关于DaemonSet使用podAffinity的资料特别少,甚至不确定这种需求到底能不能实现。
我先写了一个测试用的YAML配置,内容如下:
apiVersion: apps/v1 kind: DaemonSet metadata: name: my-daemonset namespace: default spec: selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: type operator: In values: - microservice topologyKey: "kubernetes.io/hostname" containers: - name: my-container image: test-image
但运行之后的结果并不符合预期:DaemonSet依然创建了和集群节点数一样多的Pod,而且这些Pod都无法被分配到任何节点上——哪怕有的节点明明运行着带有type: microservice标签的Pod。
想请教下大家,是我的配置哪里写错了?还是这种“让DaemonSet仅在存在特定Pod的节点上调度”的需求本身就无法实现?
备注:内容来源于stack exchange,提问作者Tamino Elgert
相关产品推荐
相关产品推荐

