在多集群kubernetes环境中,是否可以为特定节点挂载卷,例如具有特定标签的节点?

zpgglvta  于 2023-04-05  发布在  Kubernetes
关注(0)|答案(1)|浏览(154)

我们为不同的应用程序提供了多个集群。有一个代理,它在不同的命名空间中作为独立的pod运行,它从每个群集上的每个节点读取具有hostpath的特定卷。代理使用这些卷来读取数据。但是,某些卷并未装载在所有节点上。是否有一种方法可以告诉代理从具有特定标签的节点读取卷,或者在特定pod正在运行的情况下使用某种关联规则?亲和规则只对pod有效。2任何建议都将非常感激。3 TIA。
已尝试关联规则,但由于它们仅在pod级别工作,因此代理在跨节点部署时受到限制。

f0ofjuux

f0ofjuux1#

需要“从每个节点上的hostPath读取”的设置最适合Kubernetes DaemonSet,它在每个节点上创建一个新的Pod。(DaemonSet几乎是您应该考虑hostPath类型卷的唯一地方,“作为管理代理”是一个非常典型的用途。)
此外,DaemonSet支持节点选择器仅在特定节点上运行。
你可以把这些放在一起,得到一个像这样的设置:

apiVersion: apps/v1
kind: DaemonSet          # <--
metadata: { ... }
spec:
  selector: { ... }
  template:
    metadata: { ... }
    spec:
      nodeSelector:      # <--
        labelKey: value  # matches Node's `metadata: { labels: }`
      volumes:
        - name: agentdata
          hostPath:
            path: /var/log/agent
      containers:
        - name: agent
          image: registry.example.com/agent:20230329
          volumeMounts:
            - name: agentdata
              mountPath: /agent/data

这将在每个节点上运行一个单独的Pod。如果您需要聚合数据,您可以在自己的容器中启动某种消息队列系统,如Kafka或RabbitMQ(使用StatefulSet/Service),并让收集器将数据发送到那里,然后在自己的Deployment中运行一个聚合器,读取数据。

相关问题