Kubernetes 为同一守护程序K8s提供2个不同的服务

Kubernetes 为同一守护程序K8s提供2个不同的服务,kubernetes,service,openshift,daemonset,Kubernetes,Service,Openshift,Daemonset,我想知道是否有办法为特定节点上的pod创建服务。 例如: 假设我有一个包含4个工作节点的集群[compute-0…compute-3] 节点“compute-0”和“compute-1”有一个标签“app=firstApplication” 节点“compute-2”和“compute-3”具有不同的标签“app=secondApplication” 我有一个守护程序在所有4个节点上运行 我想创建两个服务,每对节点一个。 这有可能吗 谢谢 编辑 我们尝试这样做的原因是我们有一个Openshift

我想知道是否有办法为特定节点上的pod创建服务。 例如:

假设我有一个包含4个工作节点的集群[compute-0…compute-3]

节点“compute-0”和“compute-1”有一个标签“app=firstApplication”

节点“compute-2”和“compute-3”具有不同的标签“app=secondApplication”

我有一个守护程序在所有4个节点上运行

我想创建两个服务,每对节点一个。 这有可能吗

谢谢

编辑


我们尝试这样做的原因是我们有一个Openshift4.6集群,出于安全原因,我们在两组节点之间封锁了VXLAN端口。当POD尝试使用默认DNS服务(172.30.0.10)解析DNS查询时,有时它们会访问被阻止的节点上的DNS POD。

否-这是不可能的由于服务通过标签引用它们的pod,并且守护程序集中的所有pod都被标记为相同的,所以您不能这样做。当然,您可以在创建后为您的pod添加标签,但由于这会在重新创建守护程序后丢失,所以我不会走这条路

您可以将守护程序拆分为多个部分,并使用这些部分控制POD在节点上的分布

如果指定.spec.template.spec.nodeSelector,则守护程序控制器将在与该节点选择器匹配的节点上创建POD。同样,如果指定.spec.template.spec.affinity,则守护程序控制器将在与该节点affinity匹配的节点上创建pod


这样,每个守护程序都可以有自己的服务。

您只需要修补现有的pod。在你的豆荚中添加这些标签。可能你需要处理另一个操作员。操作员的工作是先拿到吊舱。然后检查欲望标签是否存在。如果不存在,则修补吊舱的标签。这就像是
kubectl
patch。在
kubeclient
的帮助下,如果POD中不存在标签,只需更新标签即可。做一些关于kubeclient的研究。kubernetes中还有一个示例示例控制器。以下是链接:

如果pod中有一些额外的标签,只需将它们添加到选择器中即可

---
kind: Service
apiVersion: v1
metadata:
  name: first-svc
  labels:
    app: firstApplication
spec:
  selector:
    app: firstApplication
  ports:
    - name: http 
      port: 8080
      targetPort: 8080

---
kind: Service
apiVersion: v1
metadata:
  name: second-svc
  labels:
    app: secondApplication
spec:
  selector:
    app: secondApplication
  ports:
    - name: http 
      port: 8080
      targetPort: 8080
---

我不明白
污染和容忍
是如何解决这个问题的。@Fritz我很震惊这可能是因为我们尝试这么做的原因是我们有一个Openshift4.6集群,出于安全原因,我们在两组节点之间封锁了VXLAN端口。当POD尝试使用默认DNS服务(172.30.0.10)解析DNS查询时,有时它们会访问被阻止节点上的DNS POD。有没有办法解决这个问题?我目前的想法是为DNS播客创建2个服务(每个节点组一个),并告诉播客通过特定的服务解决查询。@LinuxDevops在这种情况下,我建议您创建2个守护程序,并使用affinity->nodeAffinity->requiredDuringSchedulingIgnoredDuringExecution将它们的播客分配给您的节点。我已经相应地修改了我的答案。@KrishnaChaurasia想一想,节点选择器或亲和规则是更好的工具。我已经相应地修改了我的答案,谢谢!遗憾的是,这是不可能的,因为它是同一个守护程序,并且POD具有相同的标签。我想知道是否有办法绕过这个问题,但这不是不可能的。让我告诉你如何添加额外的标签。你只需要修补现有的吊舱。在你的豆荚中添加这些标签。可能你需要处理另一个操作员。做些调查。kubernetes中还有一个示例示例控制器。这里是链接:你可以从那里得到一些想法。你只需要付出一些努力。只需编写一个操作符来修补标签。有了kubeclient,我很确定您可以做到这一点。我们正在尝试使用k8s的功能,而不编写自定义操作符。我想这是不可能的