首页 > 解决方案 > 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

标签: dockerkubernetes

解决方案


这是主观的。

我会使用方法 1 以保持服务规范简单。也可以为不同的服务使用不同的 Pod。使用方法 2,同一组 Pod(基于选择器)应该为特定域提供所有服务。不可能基于服务扩展 Pod。

域更像元数据,与服务的功能无关。因此,我将从服务名称中删除域并开始为其使用标签。这将允许在标签上应用选择器。


推荐阅读