具有 PodAffinity 的 Kubernetes StatefulSet

具有 PodAffinity 的 Kubernetes StatefulSet

我有一个 k8s 集群,存在以下问题:我们有一个带有 filebeat 的状态集,它通过卷在节点上本地收集我们的微服务日志并将它们推送到我们的开放搜索。问题是并非所有服务都会写入这些日志,更准确地说,只有带有 pod 标签类型的服务才会写入这些日志:microservice。因此,filebeat pod 在许多节点上完全毫无意义地运行。我的想法是限制 Deamon Set,以便 pod 仅在至少有一个带有标签类型的 pod 正在运行的节点上启动:microservice。我遇到了 podAffinity,但整个事情对于 Deamon Sets 的记录非常少,我甚至不确定它是否可行。

到目前为止,我已经构建了这个 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

但是,它继续创建与我的节点数量一样多的 pod,但即使标签合适,也没有一个 pod 被分配给节点。有人能帮我吗,还是这根本是不可能的。

相关内容