【发布时间】:2021-03-02 16:48:14
【问题描述】:
我使用 Minikube 进行 kubernetes 部署,我使用的操作系统是 Ubuntu 18.04
我有一个包含 3 个副本的应用程序部署。因此,当我部署 3 个 pod 时,就会部署。 当我增加 http 请求的数量时,所有请求都被转发到单个 pod,而其他两个副本中没有记录日志。
关于负载如何分布到所有 pod 的任何想法。
我在下面有 deployment.yaml 和相应的 service.yaml 文件
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: master
labels:
app: master-container
spec:
selector:
matchLabels:
app: master-container
replicas: 3
template:
metadata:
labels:
app: master-container
spec:
volumes:
- name: logs-dir
hostPath:
path: /data/logs/
type: DirectoryOrCreate
containers:
- name: master-container
image: image:1
volumeMounts:
- mountPath: /data/workspace/logs/
name: logs-dir
service.yaml
apiVersion: v1
kind: Service
metadata:
name: master-container
labels:
app: master-container
spec:
selector:
app: master-container
ports:
- port: 2000
protocol: TCP
targetPort: 2000
name: can-port
nodePort: 32000
- port: 2002
protocol: TCP
targetPort: 2002
name: can-ajp-port
nodePort: 32002
- port: 2003
protocol: TCP
targetPort: 2003
name: cas-port
nodePort: 32003
- port: 2005
protocol: TCP
targetPort: 2005
name: cas-ajp-port
nodePort: 32005
- port: 31900
protocol: TCP
targetPort: 31900
name: cas-master-port
nodePort: 31900
type: NodePort
看看下图,这是命令的输出
kubectl 描述 svc canmastercontainer
我们可以看到服务已经启动并且所有端口都可以访问。我面临的唯一问题是负载分布没有跨 pod 发生
我尝试将类型指定为 NodePort 、 LoadBalancer 和 ClusterIp ,这三个都没有成功。 所有的 http 请求都被转移到单个 pod 中。
如有任何解决方案,谢谢
【问题讨论】:
-
您是否确认所有选定的 pod 都工作正常?
-
您能提供一个测试场景的信息吗?您的清单包括
app: master-container,但在屏幕选择器和标签中是app: canmasterconainer。屏幕和清单之间的类型也不同。您是否使用 helm 部署此应用程序(看到 Helm 注释),如果是,您可以分享图表吗?您是否考虑过使用Nginx Ingress Patch Matching?您能在 pod 日志中看到任何问题吗? -
@slashpai 所有 pod 都工作正常,pod 日志中没有问题。这里唯一的问题是每当我从浏览器发出请求时,请求都会转移到单个 pod 中,而其他两个 pod 中没有生成日志。
-
@PjoterS :在我的部署中匹配的所有选择器和所有 pod 都在运行。对于 helm 部分,我使用 helm 进行部署,上述文件是我一直用于部署的文件。我在这里面临的问题是,即使我有多个 pod 副本,也不会在 pod 上发生负载分布。当我从浏览器发出 http 请求时,所有请求都会转移到单个 pod,而 pod 的其他副本保持空闲,即请求没有命中这些 pod。我想知道负载分配是如何工作的。
-
你能确保
kube-proxy对iptables设置适当的规则吗?还要检查 `iptables 规则是否按预期工作?您是否考虑过使用 Ingress?
标签: kubernetes load-balancing minikube kubernetes-pod kubernetes-service