首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes规模部署的独立测试

Kubernetes规模部署的独立测试
EN

Server Fault用户
提问于 2020-06-05 06:29:02
回答 1查看 38关注 0票数 0

我正试图找出实现以下目标的方法。

  1. 我对几个组件进行了多个部署,这些组件一起完成了我的应用程序。为了简单起见,让我们假设有一个前端、一个后端和一个数据库。
  2. 当我部署所有组件(每个组件一个荚)并释放外部IP后面的前端时,我可以访问应用程序。在内部,网络连接如下。Frontend 1 -> Backend 1 -> Database 1
  3. 我对扩展的要求是,当我创建第二个部署副本时,我希望访问一个完全独立(与第一个部署不同)的场景,比如Frontend 2 -> Backend 2 -> Database 2。用例支持对数据库中不同数据的多个并行测试。例如,如果Test A正在进行,并且需要Test B,那么我们将对应用程序进行拆分,并开始对其进行独立的测试。

我怎样才能做到这一点?

使用我到目前为止尝试过的内容,将前端暴露给外部IP的负载平衡器服务将平衡到Frontend 1Frontend 2的流量,以及它们连接到的后端和数据库的相同方式。我也可以将所有容器作为单个部署添加到单个容器中,这样后端和数据库就可以通过本地主机连接与其他部署分离,但我连接到的前端仍然不能满足需要。

我可以在负载均衡器服务中设置一个1-1映射吗?我是不是漏掉了什么关键的东西?

EN

回答 1

Server Fault用户

回答已采纳

发布于 2020-06-05 16:55:54

负载均衡器不是为了平衡不同Deployments之间的流量,而是在一个Deployment中的一组Pods之间平衡通信量。如果每个Pod中只有一个,那么实际上没有什么需要平衡的。如果您的Frontend1 Deployment包括3 Pods,那么Loadbalancer要注意在这3 Pods中平均分配您的流量。据我所知,您的Frontend1Frontend2是两个独立的部署,您希望能够灵活地切换您的流量,而不仅仅是其中的一部分,而是Frontend1Frontend2之间的整个流量,对吗?

可以很容易地做到这一点,但是更好的方法是为Frontend1Frontend2 Deployments使用两个单独的D15D16。假设您在LoadBalancer文件中定义了一个外部lb.yaml

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: example-loadbalancer-service
spec:
  selector:
    app: nginx-prod
  ports:
    - port: 80
      targetPort: 80
  type: LoadBalancer

如您所见,它使用app: nginx-prod选择器,这意味着它只选择具有定义了nginx-prod值的app标签的Pods。要将流量切换到作为nginx-dev Deployment一部分的nginx-prod Pods,只需通过将D27更改为nginx-dev并使用以下命令应用新配置来更新该文件:

代码语言:javascript
复制
kubectl apply -f lb.yaml

您的外部流量将立即被定向到由您的Pods Deployment管理的Frontend2。您可以使用以下两个yaml清单轻松地测试它:

Deployment 1 (可以是您的Frontend1):

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-prod
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-prod
  template:
    metadata:
      labels:
        app: nginx-prod
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
        volumeMounts:
        - name: workdir
          mountPath: /usr/share/nginx/html
      initContainers:
      - name: install
        image: busybox
        command: ["/bin/sh","-c"]
        args: ["echo Welcome on Prod! > /work-dir/index.html"]
        volumeMounts:
        - name: workdir
          mountPath: "/work-dir"
      volumes:
      - name: workdir
        emptyDir: {}

Deployment 2 (可以是您的Frontend2):

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-dev
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-dev
  template:
    metadata:
      labels:
        app: nginx-dev
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
        volumeMounts:
        - name: workdir
          mountPath: /usr/share/nginx/html
      initContainers:
      - name: install
        image: busybox
        command: ["/bin/sh","-c"]
        args: ["echo Welcome on Dev! > /work-dir/index.html"]
        volumeMounts:
        - name: workdir
          mountPath: "/work-dir"
      volumes:
      - name: workdir
        emptyDir: {}

在平衡来自前端Pods到后端Pods的请求时,可以采用非常类似的方式,但您不需要使用该LoadBalancer,但需要简单的ClusterIP服务(在Service定义中可以省略ClusterIP,因为它是默认类型),如下所示:

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: prod-backend
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

注意,它有app: prod-backend选择器。假设您的dev Backend2 Deployment管理的Pods集具有此标签的不同价值。它可以是例如dev-backend。一旦您将Service中的选择器从app: prod-backend更改为app: dev-backend,您从前端PodsBackend1的所有流量都将被重定向到Backend2 Pods (标记为dev-backend)。我分享它只是为了告诉你,这也是可能的,但这种方法没有任何意义。至于LoadBalancer,我同意创建额外的LoadBalancer需要额外的成本,但是简单的ClusterIP Services并不是这样。因此,在这种情况下,您应该定义两个不同的Services,每个都使用不同的选择器。然后,使用服务的FQDN,这将与Backend1Backend2 Service不同,您可以相应地从Frontend1Frontend2指导您的流量。

我希望这能进一步澄清LoadBalancerClusterIP Service的使用。如果有些事情不完全清楚,可以毫不犹豫地伸出援手,提出更多的问题。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1020146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档