distributed-load-testing-using-kubernetes, 在Google容器引擎上,使用Kubernetes进行分布式负载测试

分享于 

12分钟阅读

GitHub

  繁體 雙語
Distributed load testing using Kubernetes on Google Container Engine
  • 源代码名称:distributed-load-testing-using-kubernetes
  • 源代码网址:http://www.github.com/GoogleCloudPlatform/distributed-load-testing-using-kubernetes
  • distributed-load-testing-using-kubernetes源代码文档
  • distributed-load-testing-using-kubernetes源代码下载
  • Git URL:
    git://www.github.com/GoogleCloudPlatform/distributed-load-testing-using-kubernetes.git
    Git Clone代码到本地:
    git clone http://www.github.com/GoogleCloudPlatform/distributed-load-testing-using-kubernetes
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/GoogleCloudPlatform/distributed-load-testing-using-kubernetes
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    使用Kubernetes分发负载测试

    本教程演示如何使用 Kubernetes插件进行分布式负载测试,并包括样例web应用程序。映像和Kubernetes控制器/服务。 有关更多背景,请参阅分布式负载测试使用 Kubernetes 解决方案纸。

    先决条件

    注意:安装Google云SDK时,需要启用以下组件:

    • App Engine Command Line Interface
    • App Engine SDK for Python and PHP
    • Compute Engine Command Line Interface
    • Developer Preview gcloud Commands
    • gcloud Alpha Commands
    • gcloud app Python Extensions
    • kubectl

    在继续之前,还可以设置你的首选区域和项目:

    
    $ gcloud config set compute/zone ZONE
    
    
    $ gcloud config set project PROJECT-ID
    
    
    
    

    部署Web应用程序

    sample-webapp 文件夹包含一个简单的Google App Engine python 应用程序作为"正在测试的系统"。 若要将应用程序部署到项目中,请使用 gcloud app deploy 命令。

    
    $ gcloud app deploy sample-webapp/app.yaml --project=PROJECT-ID
    
    
    
    

    注意:部署 locust-masterlocust-worker 控制器时,你需要部署样例web应用程序的URL。

    部署控制器和服务

    在部署 locust-masterlocust-worker 控制器之前,请更新每个命令以指向部署示例web应用程序的位置。 将 spec.template.spec.containers.env 字段中找到的TARGET_HOST 环境变量设置为示例web应用程序 URL。

    
    - name: TARGET_HOST
    
    
     value: http://PROJECT-ID.appspot.com
    
    
    
    

    更新控制器 Docker 映像( 可选)

    locust-masterlocust-worker 控制器设置为使用预先构建的locust-tasks Docker 映像,它已经被上传到 Google容器注册中心,并且可以在服务器上获得。gcr.io/cloud-solutions-images/locust-tasks 如果你对更改和发布新的Docker 映像感兴趣,请参阅以下步骤。

    首先,在你的平台上安装安装 Docker 插件。 安装 Docker 并对 Dockerfile 进行更改后,可以使用以下步骤构建。标记和上载映像:

    
    $ docker build -t USERNAME/locust-tasks. 
    
    
    $ docker tag USERNAME/locust-tasks gcr.io/PROJECT-ID/locust-tasks
    
    
    $ gcloud preview docker --project PROJECT-ID push gcr.io/PROJECT-ID/locust-tasks
    
    
    
    

    注意:你不需要使用Google容器注册表。 如果你想将你的图片发布到 Docker-Hub,请参考使用 Docker-Hub的步骤。

    在重建 Docker 映像并将它的上载到注册表之后,需要使用新的映像位置编辑控制器。 具体来说, spec.template.spec.containers.image 每个控制器中的字段控制要使用的Docker 图像。

    如果你将 Docker 图像上载到Google容器注册表:

    
    image: gcr.io/PROJECT-ID/locust-tasks:latest
    
    
    
    

    如果你将 Docker 映像上载到 Docker 集线器:

    
    image: USERNAME/locust-tasks:latest
    
    
    
    

    注意:图像位置包括 latest 标记,以便在每次启动新窗格时都将图像向下拉。 若要使用图像的kubernetes缓存副本,请从图像位置删除 :latest

    部署Kubernetes集群

    首先使用 gcloud 命令创建容器引擎集群,如下所示。

    注意:这个命令默认使用 n1-standard-1 机器类型创建三个 node Kubernetes集群。 请参阅 gcloud alpha container clusters create 关于指定不同群集配置的文档信息。

    
    $ gcloud alpha container clusters create CLUSTER-NAME
    
    
    
    

    几分钟后,你将拥有一个具有三个节点( 不计算Kubernetes主机)的工作Kubernetes集群。 接下来,配置你的系统以使用 kubectl 命令:

    
    $ kubectl config use-context gke_PROJECT-ID_ZONE_CLUSTER-NAME
    
    
    
    

    注意:上一个 gcloud 集群创建命令将包含针对你的平台/项目执行的特定 kubectl config 命令。

    部署蝗虫主机

    现在 kubectl 已经安装,部署 locust-master-controller:

    
    $ kubectl create -f locust-master-controller.yaml
    
    
    
    

    要确认创建复制控制器和 Pod,请运行以下命令:

    
    $ kubectl get rc
    
    
    $ kubectl get pods -l name=locust,role=master
    
    
    
    

    接下来,部署 locust-master-service:

    
    $ kubectl create -f locust-master-service.yaml
    
    
    
    

    这里步骤将使用内部DNS名称( locust-master ) 和端口 808955575558 公开 Pod。 作为这里步骤的一部分,locust-master-service.yaml 中的type: LoadBalancer 指令将告诉Google容器引擎从公共 avaialble IP地址到 locust-master Pod创建一个转发规则。 若要查看新创建的转发规则,请执行以下操作:

    
    $ gcloud compute forwarding-rules list 
    
    
    
    

    部署蝗虫工作者

    现在部署 locust-worker-controller:

    
    $ kubectl create -f locust-worker-controller.yaml
    
    
    
    

    locust-worker-controller 设置为部署 10 locust-worker Pods,以确认它们已经部署到以下位置:

    
    $ kubectl get pods -l name=locust,role=worker
    
    
    
    

    要缩放 locust-worker 窗格的数量,请发出复制控制器 scale 命令。

    
    $ kubectl scale --replicas=20 replicationcontrollers locust-worker
    
    
    
    

    要确认吊舱已经启动并已经就绪,请获取 locust-worker 窗格的列表:

    
    $ kubectl get pods -l name=locust,role=worker
    
    
    
    

    注意:depending需要的locust-worker Pods数量,Kubernetes集群可能需要启动超过 3个计算引擎节点,并且可能需要比n1-standard-1更强大的计算机类型。 请参阅 gcloud alpha container clusters create 文档提供更多信息。

    安装防火墙规则

    部署这些控制器和服务的最后一步是允许来自公共可以访问转发规则IP地址的通信到适当的容器引擎实例。

    只需要在externally接口,运行在 locust-master 网络接口,在端口 8089 上运行。 首先,使用 kubectl get nodes的输出获取Kubernetes集群中节点的目标标记:

    
    $ kubectl get nodes
    
    
    NAME LABELS STATUS
    
    
    gke-ws-0e365264-node-4pdw kubernetes.io/hostname=gke-ws-0e365264-node-4pdw Ready
    
    
    gke-ws-0e365264-node-jdcz kubernetes.io/hostname=gke-ws-0e365264-node-jdcz Ready
    
    
    gke-ws-0e365264-node-kp3d kubernetes.io/hostname=gke-ws-0e365264-node-kp3d Ready
    
    
    
    

    目标标记是 node 名称前缀,它的前缀为 -node,格式为 gke-CLUSTER-NAME-[...]-node。 例如如果 node 名称为 gke-mycluster-12345678-node-abcd,目标标记将为 gke-mycluster-12345678-node

    现在要创建防火墙规则,请执行以下操作:

    
    $ gcloud compute firewall-rules create FIREWALL-RULE-NAME --allow=tcp:8089 --target-tags gke-CLUSTER-NAME-[...]-node
    
    
    
    

    执行测试

    执行蝗虫测试,导航到转发规则( 请参见上方) 和端口 8089的IP地址,然后输入要生成的客户端数量和客户端孵化率,然后启动模拟。

    部署清理

    要删除工作负载模拟集群,请使用以下步骤。 首先,删除Kubernetes集群:

    
    $ gcloud alpha container clusters delete CLUSTER-NAME
    
    
    
    

    接下来,删除转发将流量转发到集群的转发规则。

    
    $ gcloud compute forwarding-rules delete FORWARDING-RULE-NAME
    
    
    
    

    最后,删除允许进入群集的传入流量的防火墙规则。

    
    $ gcloud compute firewall-rules delete FIREWALL-RULE-NAME
    
    
    
    

    要删除示例web应用程序,请访问云控制台( )。

    许可证

    这个代码是 Apache 2.0许可以,可以在 LICENSE 中找到更多信息。 有关第三方软件和库许可证的信息,请参阅 docker-image/licenses 目录。


    相关文章