K8S 在docker上部署 Selenium Grid (最新版)

1 篇文章 0 订阅
1 篇文章 0 订阅

最近因为工作需要,我需要部署一个分布式的selenium平台,首先selenium grid作为基本的容器,然后使用k8s来编排容器部署在docker上,使得多台机器,主节点和子节点可以互相通信,从而搭建一个分布式的selenium 容器平台。

注意:我是在windows平台上搭建的docker,包括k8s也是,即是你是linux系统也可以,基本操作配置不会差太多,关于selenium grid的容器编排网上资料挺少的,欢迎和我互相交流

参考资料:
selenium grid github
k8s-for-docker-desktop
k8s搭建selenium grid 旧版
docker官网

准备配置:

  1. 至少两台机器(因为是分布式)

1、安装docker

由于我是windows 10环境,所以我直接安装docker 桌面版即可,直接去docker官网安装docker for desktop,当然了,windows安装需要开启hyper-v虚拟环境设置,这些设置将不再赘述,如果安装失败,请参考网上其他资料,windows安装docker就行,成功安装好后如下图
在这里插入图片描述

我这个安装的界面是k8s都已经安装好的界面了

2、安装selenium grid

我们利用docker安装selenium grid,这里安装也可以参考官方文档,由于我们是主从节点分布式安装,所以参考官方文档,我们只需要以下两个容器:selenium/hub:4.3.0 ,selenium/node-chrome:4.3.0, 我用的hub节点和node节点的容器版本都是4.3.0,这里你也可以安装最新的版本,应该是没有什么问题的

docker pull selenium/hub:4.3.0
docker pull selenium/node-chrome:4.3.0

3、安装K8S

这里我依然是利用docker来安装k8s,由于windows上k8s也比较难装,我的安装步骤也不一定适合你, 你也可以多参考k8s-for-docker-desktop安装 官方文档的安装,也可以多参考网上的安装,如果你用的是linux系统,安装k8s应该会更顺利。

将github文件克隆或下载至本地

在这里插入图片描述
执行windows power shell安装命令

.\load_images.ps1

说明:
如果因为安全策略无法执行 PowerShell 脚本,请在 “以管理员身份运行” 的 PowerShell 中执行 Set-ExecutionPolicy RemoteSigned 命令。

打开docker界面,勾选以下两个选项,然后重启docker
在这里插入图片描述
重启完成后,能在你的左下方看到docker和k8s的标志都是绿色的,代表启动正常,正在执行状态,linux系统正常启动k8s参考其他文章。
在这里插入图片描述

4、配置k8s yaml部署文件

我们的节点逻辑参考下图
在这里插入图片描述
学过k8s的小伙伴应该知道,我们至少需要3个yaml文件,deploy,pod,service

首先配置hub节点的deploy文件,命名为deploy.yaml

 apiVersion: apps/v1

 kind: Deployment

 metadata:

   name: selenium-hub        #hub名称


 spec:

   selector:

     matchLabels:

       app: selenium-hub

   strategy:

         type: RollingUpdate        #滚动部署

         rollingUpdate:

          maxSurge: 1

          maxUnavailable: 0

   template:

         metadata:

           labels:

             app: selenium-hub

         spec:

          containers:

           - name: selenium-hub

             image: selenium/hub:4.3.0

             resources:

               limits:

                 memory: "1000Mi"

                 cpu: "500m"

             ports:

               - containerPort: 4444
                 
                 protocol: TCP 
               
               - containerPort: 4442
                 
                 protocol: TCP 

               - containerPort: 4443

                 protocol: TCP 

             livenessProbe:

                 httpGet:

                   path: /wd/hub/status

                   port: 4444

                 initialDelaySeconds: 30

                 timeoutSeconds: 5

这里需要开启4442,4443,4444端口,4442和4443主要是为了和node子节点通信使用的,使用socker保持常链接,4444主要是为了访问hub主节点。

然后配置Pod子节点,我这里使用的并不是Pod,使用的是RC滚动部署,可能这种部署方式已经过时,具体看你们想怎么部署处理,命名为service_chrome.yaml

 apiVersion: v1

 kind: ReplicationController

 metadata:

   name: selenium-node-chrome-rep
   
   labels:      

     app: selenium-node-chrome-rep


 spec:  

   replicas: 3

   selector:

     app: selenium-node-chrome-rep

   template:

         metadata:

           name: selenium-node-chrome

           labels:

             app: selenium-node-chrome-rep

         spec:

           containers:

             - name: selenium-node-chrome

               image: selenium/node-chrome:4.3.0

               ports:

                 - containerPort: 30055

               env:
                
                - name:  SE_EVENT_BUS_HOST

                  value: "192.168.16.158" 
                 
                 
                - name:  SE_NODE_HOST

                  value: "192.168.16.158"
                  
                - name:  SE_NODE_PORT

                  value: "30055"
                  
                  
                - name: SE_EVENT_BUS_PUBLISH_PORT

                  value: "30012"
                 
                - name: SE_EVENT_BUS_SUBSCRIBE_PORT

                  value: "30013"

node节点的配置文件,需要指定5个参数才能与hub主节点连接,SE_EVENT_BUS_HOST指定hub地址,SE_NODE_HOST指定node地址,SE_NODE_PORT指定node开放的端口,SE_EVENT_BUS_PUBLISH_PORT指定与主机4442通信的端口,SE_EVENT_BUS_SUBSCRIBE_PORT指定与主机4443通信的端口,全部指定正确后才能与主机正常通信连接

然后配置的是对外暴露端口的service配置文件,这里首先配置hub节点的service文件,命名为service.yaml

 apiVersion: v1

 kind: Service

 metadata:

    name: selenium-srv   #k8s服务名称

 spec:

   selector:

     app: selenium-hub

   ports:

   - port: 4444

     nodePort: 30010
     
     name: p1     
   
   - port: 4442

     nodePort: 30012
     
     name: p2

   - port: 4443

     nodePort: 30013     
     
     name: p3
     

   type: NodePort

   sessionAffinity: None

然后配置的是hub节点的service配置文件,命名为service2.yaml

 apiVersion: v1

 kind: Service

 metadata:

    name: selenium-srv2   #k8s服务名称

 spec:

   selector:

     app: selenium-node-chrome-rep

   ports:

   - port: 30055

     nodePort: 30055
     
     name: p5     
   
     

   type: NodePort
   
   sessionAffinity: None

将hub节点和node节点的端口都对外暴露后,才能与之通信。

5、配置hub与node相互通信

然后使用k8s命令配置通信即可

kubectl create -f deploy.yml
kubectl create -f service_chrome.yml
kubectl create -f service.yml
kubectl create -f service2.yml

然后查看配置信息情况

 kubectl get pods

在这里插入图片描述
全是1/1执行状态说明,运行正常

kubectl get svc

查看端口映射情况,也是正常
在这里插入图片描述
然后访问http://localhost:30010,即可查看,hub节点和node节点的通信正常

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Kubernetes(简称为K8s)是一个开源的容器编排和管理工具,而Docker是一种流行的容器化技术。在将应用程序部署到生产环境时,通常会使用KubernetesDocker来实现应用程序的容器化部署Docker是一种轻量级的虚拟化技术,它可以将应用程序及其依赖项打包到一个独立的容器中。每个容器都运行在相互隔离的环境中,使得应用程序在不同的环境中具备相同的行为。使用Docker可以简化应用程序的部署和维护过程,提高应用程序的可移植性和可扩展性。 而Kubernetes则是用来管理和编排Docker容器的工具。它提供了一种强大的方式来自动化容器的部署、扩展和管理。使用Kubernetes,我们可以定义容器的运行状态、资源需求和依赖关系,由Kubernetes来负责分配和管理这些容器的部署Kubernetes提供了许多有用的功能,如自动扩展、负载均衡和容器调度等,可以确保应用程序始终以高可用性和高性能的方式运行。 在使用Kubernetes部署应用程序时,我们首先需要将应用程序打包成一个Docker容器镜像。然后,将这个镜像上传到一个容器镜像仓库中,可以是Docker Hub或者私有的镜像仓库。接下来,使用Kubernetes的命令或配置文件,定义容器的部署和管理规则,如需要的资源、运行方式和依赖关系等。最后,Kubernetes将根据这些规则自动部署和管理容器,确保应用程序按照我们期望的方式运行。 总结来说,KubernetesDocker是两个在容器化部署方面非常重要的工具。Docker提供了容器化技术,而Kubernetes则提供了一种强大的方式来自动化和管理这些容器的部署。通过使用KubernetesDocker,我们可以实现应用程序的高效、可移植和可扩展的部署。 ### 回答2: K8sKubernetes)和Docker都是用于应用程序部署和容器编排的工具,它们可以一起使用来实现高效的应用部署和管理。 Docker是一种开源的容器化平台,它将应用程序及其依赖关系打包到一个独立的容器中,使其可以在不同的操作系统和环境中运行。使用Docker部署应用程序时,可以将应用程序及其所有依赖项打包成一个镜像,在不同的环境中轻松部署和迁移。这样做可以显著提高应用程序的可移植性和可伸缩性。 然而,当应用程序数量和规模增加时,仅仅使用Docker来管理容器变得困难。这时候可以引入K8s来进行容器编排。K8s是一个用于自动化容器操作的开源平台,它可以自动化部署、扩展和管理应用程序的容器。K8s可以监视和管理多个Docker容器,确保它们始终按照所定义的规范和要求运行。 通过使用K8s,可以实现应用程序的高可用性、负载均衡和动态扩展。K8s允许自动调度容器,以满足应用程序的需求,并支持水平扩展和自动伸缩。此外,K8s还提供了强大的存储和网络管理功能,可以方便地进行持久化存储和跨容器通信。 总而言之,DockerK8s都是部署和管理容器化应用程序的重要工具。Docker提供了容器化平台,可以打包和运行应用程序,而K8s则提供了容器编排和管理功能,能够自动化和优化容器的运行。通过结合使用这两个工具,可以实现灵活、高效和可靠的应用程序部署和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码王吴彦祖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值