Kubernetes:如何管理大量服务?在一个服务中将多个应用程序分组是一个坏主意吗?

时间:2018-10-09 13:55:58

标签: 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的微服务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

1 个答案:

答案 0 :(得分:2)

这是主观的。

我将采用方法1来简化服务规范。对于不同的服务,也可能有不同的Pod。在方法2中,同一组Pod(基于选择器)应提供特定域的所有服务。无法根据服务扩展Pod。

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