docker - Kubernetes:如何管理大量服务?将多个应用程序分组到一个服务中是一个坏主意吗?
问题描述
首先,我想说我是 Kubernetes 的新手,如果我想做的是一个坏主意,请原谅我 :)
这是我的背景:我有一个非常大的应用程序,它根据它们的域由许多微服务组成:
Domain 1
domain1-microservice1-app expose port 8080
domain1-microservice2-app expose port 8081
domain1-microservice3-app expose port 8082
Domain 2
domain2-microservice1-app expose port 9080
domain2-microservice2-app expose port 9081
domain2-microservice3-app expose port 9082
Domain 3
domain3-microservice1-app expose port 9180
domain3-microservice2-app expose port 9181
domain3-microservice3-app expose port 9182
... 等等。
因此,在我的示例中,我有 9 个应用程序。每个应用程序都使用kind:Deployment在 Kubernetes 中注册
现在我想选择管理服务的最佳方式。
第一个解决方案
每个部署都有自己的服务
=> 它有效,它似乎是 Kubernetes 中的经典做事方式。但实际上,我的应用程序远不止 9 个,所以我有很多服务
第二种解决方案
按域创建服务。每个服务都包含其所有相关的应用程序
=> 我已经尝试过了,它似乎可以工作(据我可以在本地开发环境中测试)
我想知道您对我的第二个解决方案有何看法,它可能有什么警告?
我也接受你关于什么是最好的 Kubernetes 结构的所有建议。
非常感谢,
朱利安
编辑:为方法 2 添加示例配置文件
domain1 的 microservice1 的部署文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: domain1-app1
labels:
domain: domain1
spec:
selector:
matchLabels:
app: domain1-app1
replicas: 3
template:
metadata:
labels:
app: domain1-app1
domain: domain1
spec:
containers:
- name: XXX
image: YYY
ports:
- containerPort: 8080
与域 1 相关的服务的服务文件:
kind: Service
apiVersion: v1
metadata:
name: domain1-service
spec:
type: LoadBalancer
selector:
domain: domain1
ports:
- name: port8080
protocol: TCP
port: 8080
targetPort: 8080
- name: port8081
protocol: TCP
port: 8081
targetPort: 8081
- name: port8082
protocol: TCP
port: 8082
targetPort: 8082
解决方案
这是主观的。
我会使用方法 1 以保持服务规范简单。也可以为不同的服务使用不同的 Pod。使用方法 2,同一组 Pod(基于选择器)应该为特定域提供所有服务。不可能基于服务扩展 Pod。
域更像元数据,与服务的功能无关。因此,我将从服务名称中删除域并开始为其使用标签。这将允许在标签上应用选择器。
推荐阅读
- javascript - Kintone 时间字段的自定义时间增量
- reactjs - 在我的电影搜索器 Web 应用程序中停止无限搜索
- sapui5 - 如何在多个图块(项目)中加载共享的 i18n 文件?
- c# - 使用收割模式c#读取文本文件
- android-studio - 每次我撤消重新格式化代码时,是否有阻止android studio询问?
- python - 通过 lambda 将 map 与 zip 结合起来
- r - train() 中的 ROC 度量,插入符号包
- python - 数组拆分任务:基于值和自定义类型
- jsf - DataExporter 标记 - PrimeFaces - 仅页面 = “false”
- html - 响应悬停代码