Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何联系kubernetes中同一节点中一个服务的随机pod(同一pod的多个实例)_Kubernetes_Networking_Devops_Kubernetes Ingress_Kubernetes Pod - Fatal编程技术网

如何联系kubernetes中同一节点中一个服务的随机pod(同一pod的多个实例)

如何联系kubernetes中同一节点中一个服务的随机pod(同一pod的多个实例),kubernetes,networking,devops,kubernetes-ingress,kubernetes-pod,Kubernetes,Networking,Devops,Kubernetes Ingress,Kubernetes Pod,我只有一个节点。在这个节点上,我有2个多实例应用程序(每个3个pod) 应用程序A需要联系应用程序B 我的问题是:应用程序A始终与应用程序B的同一个pod联系。 我想要备用pod(例如循环中的负载平衡) 例如: 第一个请求:AppPod3响应 第二个请求:AppPod1响应 第三个请求:AppPod2响应 我怎么能做到 非常感谢你的帮助。。。 你可以在下面看到我的应用程序B配置 我试图为sessionaffinity设置timeoutSeconds,但它不起作用 kind: Deployment

我只有一个节点。在这个节点上,我有2个多实例应用程序(每个3个pod)

应用程序A需要联系应用程序B

我的问题是:应用程序A始终与应用程序B的同一个pod联系。 我想要备用pod(例如循环中的负载平衡) 例如: 第一个请求:AppPod3响应 第二个请求:AppPod1响应 第三个请求:AppPod2响应

我怎么能做到

非常感谢你的帮助。。。 你可以在下面看到我的应用程序B配置 我试图为sessionaffinity设置timeoutSeconds,但它不起作用

kind: Deployment
metadata:
  name: AppB
spec:
  selector:
    matchLabels:
      app: AppB
  replicas: 3
  template:
    metadata:
      labels:
        app: AppB
    spec:
      containers:
      - name: AppB-container
        image: image
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: AppB
  labels:
    app: svc-AppB
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: AppB
  sessionAffinity: ClientIP
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 1```

@user3683760您必须在部署中应用负载平衡策略。Kube有很多选择来平衡服务之间的流量。我建议大家尽量少用一些模式,看看什么最适合你的需要。

默认情况下,该服务应该以循环方式使用后端播客。如果POD是无状态的,则不需要sessionAffinity设置;否则,您将根据源ID重定向到同一pod

也许您可以将日志添加到pod中,并观察它们何时被访问。对服务的后续调用应以循环方式重定向到POD,并使用最少的服务配置

更新:这是我正在使用的部署。它按照预期平衡豆荚;发送到服务clustrip:port的每个curl请求都在不同的pod上结束。我的k8s安装是本地的,v1.18.3

apiVersion: apps/v1
kind: Deployment
metadata:
  name: baseDeployment
  labels:
    app: baseApp
  namespace: nm-app1
spec:
  replicas: 2
  selector:
    matchLabels:
      app: baseApp
  template:
    metadata:
      labels:
        app: baseApp
    spec:
      containers:
      - name: baseApp
        image: local-registry:5000/baseApp
        ports:
        - containerPort: 8080
---
kind: Service
apiVersion: v1
metadata:
  name: baseService
  namespace: nm-app1
spec:
  selector:
    app: baseApp 
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

谢谢你的回答,但我已经准备好尝试这个,但它不是那样工作。我在应用程序B上安装了记录器,在通话间隔1秒时启动了40个请求(从应用程序A到应用程序B)。我有来自应用程序B同一个pod的所有时间记录器我使用GRPC流,但是,我创建了40个新的GRPC流你的url是什么?或者?它是baseService的集群。在我的例子中,
kubectl get svc-n nm-app1
将在nm-app1名称空间中列出所有具有集群的服务。我已经尝试了你的答案,它是有效的。事实上,在我的例子中,appa是一个控制台应用程序,它使用AppB(python)打开一个GRPC流。这种联系保持了几分钟。如果我用AppB启动另一个流(新的)GRPC,它始终是AppA联系的同一个pod。我如何联系其他pod?因为如果我理解的话,AppA总是联系AppB的同一个pod,因为他在这个pod上有一些GRPC流活动..查看这篇关于GRPC负载平衡的博文:这回答了你的问题吗?