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


    最近因为工作需要,我需要部署一个分布式的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
    
    • 1
    • 2

    3、安装K8S

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

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

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

    .\load_images.ps1
    
    • 1

    说明:
    如果因为安全策略无法执行 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76

    这里需要开启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"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    然后配置的是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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    将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
    
    • 1
    • 2
    • 3
    • 4

    然后查看配置信息情况

     kubectl get pods
    
    • 1

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

    kubectl get svc
    
    • 1

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

    在这里插入图片描述

  • 相关阅读:
    DeFi 如何从破茧重生?
    ping命令使用示例解析
    智能优化算法——混合领导优化算法(Matlab&Matlab代码实现)
    后流量时代的跨境风口:Facebook广告
    用crash tool观察ARM64 Linux地址转换
    python二级该怎么准备,考前一个月,2023年12月份
    Hadoop使用hdfs指令查看hdfs目录的根目录显示被拒
    物联网?快来看 Arduino 上云啦
    linux环境下安装Nacos
    电脑合并盘符
  • 原文地址:https://blog.csdn.net/qq_36551453/article/details/126428748