首先,我想说我是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结构,我也接受了所有建议。
非常感谢
朱利安
domain1的微服务1的部署文件:
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
答案 0 :(得分:2)
这是主观的。
我将采用方法1来简化服务规范。对于不同的服务,也可能有不同的Pod。在方法2中,同一组Pod(基于选择器)应提供特定域的所有服务。无法根据服务扩展Pod。
域更像是元数据,并且与服务的功能无关。因此,我将从服务名称中删除域,并开始使用labels。这将允许在标签上应用选择器。