精华内容
下载资源
问答
  • Modbus测试工具ModbusPoll与Modbus Slave使用方法

    万次阅读 多人点赞 2017-09-14 13:15:39
    Modbus测试工具ModbusPoll与Modbus Slave使用方法

    一、介绍

    Modbus Poll :Modbus主机仿真器,用于测试和调试Modbus从设备。该软件支持ModbusRTU、ASCII、TCP/IP。用来帮助开发人员测试Modbus从设备,或者其它Modbus协议的测试和仿真。它支持多文档接口,即,可以同时监视多个从设备/数据域。每个窗口简单地设定从设备ID,功能,地址,大小和轮询间隔。你可以从任意一个窗口读写寄存器和线圈。如果你想改变一个单独的寄存器,简单地双击这个值即可。或者你可以改变多个寄存器/线圈值。提供数据的多种格式方式,比如浮点、双精度、长整型(可以字节序列交换)。

    Modbus Slave: Modbus从设备仿真器,可以仿真32个从设备/地址域。每个接口都提供了对EXCEL报表的OLE自动化支持。主要用来模拟Modbus从站设备,接收主站的命令包,回送数据包。帮助Modbus通讯设备开发人员进行Modbus通讯协议的模拟和测试,用于模拟、测试、调试Modbus通讯设备。可以32个窗口中模拟多达32个Modbus子设备。与Modbus Poll的用户界面相同,支持功能01, 02, 03, 04, 05, 06, 15, 16, 22和23,监视串口数据。

    二、Modbus Poll使用

    1)、安装注册:  

     安装完毕,在桌面能够看到ModbusPoll的快捷方式,双击该快捷方式,打开软件,打开后界面如下图所示。

    单击Connection->Connect,弹出注册窗口;打开压缩包解压后的readme文件,复制ModbusPoll的序列号,粘贴到注册窗口的注册栏,如下图所示,点击OK,破解完毕。

    2)、程序主窗口:

    按照上面破解流程,按“OK”按钮即可完成注册。然后直接进入主窗口,如下图所示:

    modbus poll 4.3.4程序主窗口

    其中:Tx = 4表示向主站发送数据帧次数,图中为4次; Error = 0表示通讯错误次数,图中为0次; ID = 1表示模拟的Modbus子设备的设备地址,图中地址为1;F = 03表示所使用的Modbus功能码,图中为03功能码; SR = 1000ms表示扫描周期。红字部分,表示当前的错误状态,“No Connection”表示未连接状态。

     

    3)、参数设置:

    单击菜单【Setup】中【Read/Write Definition.. F8】进行参数设置,会弹出参数设置对话框。

     

     

     

    其中:A. Slave为要访问的Modbus从站(从机)的地址,对应主窗口(主画面)中的ID值,默认为1。  B. Function 为寄存器功能码的选择,共四种,分别对应关系如下:

    代码

    中文名称

    寄存器PLC地址

    位操作/字操作

    操作数量

    01

    读线圈状态

    00001-09999

    位操作

    单个或多个

    02

    读离散输入状态

    10001-19999

    位操作

    单个或多个

    03

    读保持寄存器

    40001-49999

    字操作

    单个或多个

    04

    读输入寄存器

    30001-39999

    字操作

    单个或多个

    05

    写单个线圈

    00001-09999

    位操作

    单个

    06

    写单个保持寄存器

    40001-49999

    字操作

    单个

    15

    写多个线圈

    00001-09999

    位操作

    多个

    16

    写多个保持寄存器

    40001-49999

    字操作

    多个

     C. Address 为寄存器起始地址,默认从0开始。  

    D. Length为寄存器连续个数,默认为10个,对应组态软件的通道数量。  

    E. Scan Rate为读取数据周期,单位毫秒,默认为1000ms。   

    设置完成单击OK按钮,模拟窗口将显示定义的寄存器列表。

    4)、显示设置:  

    数据显示方式设置:  

    默认情况下,寄存器数据的显示方式为Signed方式(16进制无符号二进制),数据范围为-32768~32767。如果用户要以其他数值方式显示,可以通过菜单【Display】进行选择设置,如下图所示:

     

    地址格式设置: Modbus Slave默认使用PLC地址,【Display】菜单中【PLC Addresses(Base 1)】为默认选中状态,默认寄存器的起始地址为1开始,此点与组态软件的Modbus串口和TCP数据转发驱动是相同的。如果测试时需要设置起始地址为0开始,可选择【Protocol Addresses(Base 0)】。一般情况下使用默认PLC地址即可。

    使用工具栏的”Communication Traffic”按钮,可以显示出当前发送命令和接受的数据。

    5)、串口连接:  

    单击菜单【Connection】中【Connect.. F3】进行串口连接,如下图 :

     其中:Port3,表示使用的串口(COM3),根据实际情况选择不同的串口或者TCP/IP进行连接。Mode,表示Modbus协议模式,使用串口时有效;使用TCP/IP时自动为TCP模式。Response Timeout,表示读取超时时间,从站在超时时间内没有返回数据,则认为通讯失败。Delay Between Polls,每次扫描的最小间隔时间,默认为10ms。Remote Server,表示TCP/IP模式时的终端从站设备的网络设置。IP Address,表示TCP/IP模式时从站IP地址。  Port,表示TCP模式时从站网络端口。用户可根据需要对参数进行设置,默认为:串口1、波特率9600、数据位8位、无校验位、1位停止位。确认设置后点击OK按钮即可。如果连接并读取正确,此时主窗口将显示读取寄存器的相关信息。

     6)、寄存器值改变:  

    在主窗口寄存器地址上双击鼠标,弹出修改对话框,如下图:

     

    在Value输入框中输入值确认即可。范围为-32768——32767。  

    其中:Slave为要访问的Modbus从站的地址,对应主画面中的ID值,默认为1。  Address 为当前操作的寄存器的地址。图中为对寄存器40001操作。  Use Function为所使用的功能码,可以选择06或16功能码进行写入。

    7)、查看通讯数据帧:  

    单击【Display】菜单中的【Communication…】或者单击工具栏上【101】按钮,可以调出串口收发数据帧监视信息对话框“CommunicationTraffic”,用来查看分析收发的数据帧。如下图所示: 

     其中:前6位为数据帧的序号。  Rx表示接收的数据帧。  Tx表示发送的数据帧。  

    8)、断开连接:  

    点击【Disconnect  F4】即可断开连接结束测试,此时主窗口中出现红色的“No Connection”表示未连接状态。

     

    三、Modbus Slave使用

    1)、安装注册:
    安装软件,安装完成之后,双击执行ModbusSlave快捷方式即可。

    注册方法:单击Connection->Connect,弹出注册窗口;打开压缩包解压后的readme文件,复制ModbusPoll的序列号,粘贴到注册窗口的注册栏,点击OK,破解完毕。ModbusSlave的安装破解与ModbusPoll类似,在此不再赘述。

    2)、主窗口:
    软件主窗口如下图所示:

    此时处于“Noconnection”未连接状态,如果只测试“04输出保持寄存器”,则可直接点击跳到第3.步,直接进行连接即可。

    3)、参数设置:
    点击菜单“Setup”中“Slave Definition.. F2”进行参数设置,会弹出如下图对话框。

    其中:A.Slave为Modbus从站地址,对应主画面中的ID值,默认为1。
    B. Function 为寄存器功能码的选择,共四种,分别对应关系如下:

    代码

    中文名称

    寄存器PLC地址

    位操作/字操作

    操作数量

    01

    读线圈状态

    00001-09999

    位操作

    单个或多个

    02

    读离散输入状态

    10001-19999

    位操作

    单个或多个

    03

    读保持寄存器

    40001-49999

    字操作

    单个或多个

    04

    读输入寄存器

    30001-39999

    字操作

    单个或多个

    05

    写单个线圈

    00001-09999

    位操作

    单个

    06

    写单个保持寄存器

    40001-49999

    字操作

    单个

    15

    写多个线圈

    00001-09999

    位操作

    多个

    16

    写多个保持寄存器

    40001-49999

    字操作

    多个

    C. Address 为寄存器起始地址。默认从1开始。
    D. Length为寄存器连续个数。默认为10个。

    设置OK按钮,模拟窗口将显示定义的寄存器列表:

    其中:ID,表示模拟的Modbus子设备的设备地址;F,表示功能码
    点击对应的寄存器,即可修改对应寄存器的值或者状态。比如2寄存器值修改成9,9寄存器值修改成100。

    4)、显示设置:
    数据显示方式设置:
    默认情况下,寄存器数据的显示方式为Signed方式(16进制无符号二进制),数据范围为范围为-32768——32767。如果用户要以其他数值方式显示,可以通过菜单“Display”进行选择设置,如下图所示:

    地址格式设置:
    Modbus Slave默认使用PLC地址,“Display”菜单中“PLC Addresses(Base 1)”为默认选中状态,默认寄存器的起始地址为1开始,此点与组态软件的Modbus串口和TCP数据转发驱动是相同的。如果测试时需要设置起始地址为0开始,可选择“Protocol Addresses(Base 0)”。一般情况下使用默认PLC地址即可。

    5)、连接:
    点击菜单“Connection”中“Connect.. F3”进行连接。弹出连接对话框:

    其中:Port2,表示使用的串口(COM2),根据实际情况选择不同的串口或者TCP/IP进行连接
    Mode,表示Modbus协议模式,使用串口时有效;使用TCP/IP时自动为TCP模式
    Flow Control,表示流控制,串口模式时有效;
    Ignore Unit ID,表示TCP模式时忽略无效的组编号
    用户可根据需要对串口参数进行设置,默认为:串口1,波特率9600,数据位8位,无校验位,1位停止位。确认设置后点击“OK”按钮即可。此时主窗口中红色的“No connection”表示未连接状态的信息消失,表明从站处于正常连接状态。

    6)、寄存器值改变:
    在主窗口寄存器地址上双击鼠标,弹出修改对话框,如下图:

    在输入框中输入值确认即可。范围为-32768——32767。
    其中:Auto increment选项钩选上后,对应寄存器的值可以每1秒种增加1。

    7)、查看通讯数据帧:
    点击“Display”菜单中的“Communication…”,可以调出串口收发数据帧监视信息对话框,用来查看分析收发的数据帧。如下图所示:

    其中:前6位为数据帧的序号。
    Rx:表示接收数据帧。
    Tx: 表示发送数据帧。

    8)、断开连接:
    点击“Disconnect F4”即可断开连接结束测试,此时主窗口中出现红色的“No connection”表示未连接状态。

     

    四、Modbus主机/从机模拟程序

    1)、安装vspd虚拟串口工具。通过工具添加COM2和COM3两个端口。

    2)、接下来打开已经安装的modbuspoll和modbus slave软件,分别按“F8”配置主从端的相关配置,如图:


    以上配置的是10个计数器从机设备ID为1但只读取前6个计数器的数据,可根据自己的情况设置。

    2、接下来按分别按“F3”进行连接,注意修改连接界面的端口,主从机分别选择我们虚拟出来的com2和com3端口,因为我只用到了RTU模式,所以其他选项如波特率9600,比特位8,校验位1,无等价位等可以保持不变,然后点击确定进行连接,未连接成功窗口第二行会给出提示信息。

    通讯开始,主机端显示:TX=232,Err=0,ID=1,F=03,SR=1000ms。意思是,发送232次命令,错误次数,从机ID,功能号,轮询间隔。

    使用工具栏的”Communication Traffic”按钮,可以显示出当前发送命令和接受的数据。

     

    Modbus Poll 4.3.4 破解版下载:http://www.cr173.com/soft/21405.html

    Modbus Slave调试工具下载:http://www.cr173.com/soft/21410.html

    Modbus调试精灵 7.04绿色版下载:http://www.cr173.com/soft/5480.html

     

     

    展开全文
  • 本文章案例可用于参考Jenkins for kubernetes部署。因每个公司的架构和环境不一样,需要改变一些部署的方式。... 每次构建都会启动一个pod用于部署slave,构建完成后就会释放掉。那么pod在创建的时候,k8s就

    本文章案例可用于参考Jenkins for kubernetes部署。因每个公司的架构和环境不一样,需要改变一些部署的方式。
    Jenkins for kubernetes的好处:

    • Jenkins-master的高可用。k8s 的rc或deployment可以监控副本的存活状态(通过探针)和副本数量,如果master出现无法提供服务的情况,就会重启或者迁移到其他节点。
    • Jenkins-slave的动态伸缩。 每次构建都会启动一个pod用于部署slave,构建完成后就会释放掉。那么pod在创建的时候,k8s就会选择集群内资源剩余较多的节点创建slave的pod,构建完成后pod会自动删除。
    • 扩展性好。 因为可以同时拥有很多个slave,可以配置Jenkins同时执行很多构建操作,减少排队等待构建的时间。

    部署思路:

    首先在k8s中部署Jenkins-master然后使用Kubernetes plugin插件进行slave的动态伸缩。并且使用NFS作为后端存储的PersistentVolume来挂载Jenkins-master的jenkins_home目录、构建时slave的maven缓存m2目录(可以利用缓存加快每次构建的速度)、保留slave每次构建产生的数据(workspace目录中的每个job)。

    使用PersistentVolume的原因是k8s任何节点都可以访问到挂载的目录,不会因为master迁移节点导致数据丢失。NFS方便部署而且性能也满足Jenkins的使用需求所以选择了NFS,也可以使用其他的后端存储。

    部署

    部署方式可以自定义也可以使用Kubernetes plugin官网提供的部署yml。自定义使用deployment也是可以的,但是官网的部署方式使用了StatefulSet。Jenkins是一个有状态的应用,我感觉使用StatefulSet部署更加严谨一点。我这里使用了官网提供的文档进行部署的,但是也根据实际情况修改了一些东西。

    首先需要在k8s所有节点部署NFS客户端:

    yum -y install nfs-utils
    systemctl start nfs-utils
    systemctl enable nfs-utils
    rpcinfo -p
    

    NFS服务端配置文件增加配置:

    /data/dev_jenkins       10.0.0.0/24(rw,sync,no_root_squash,no_subtree_check)
    #dev环境Jenkins slave节点挂载workspace
    /data/dev_jenkins/workspace  0.0.0.0/0(rw,sync,no_root_squash,no_subtree_check)
    #dev环境Jenkins slave节点挂载m2 maven缓存目录
    /data/dev_jenkins/m2 0.0.0.0/0(rw,sync,no_root_squash,no_subtree_check)
    

    共享目录一定要给777权限。不然容器内部会报错没有写入权限。

    service-account.yml 此文件用于创建k8s的rbac,授权给后面的Jenkins应用可以创建和删除slave的pod。

    # In GKE need to get RBAC permissions first with
    # kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin [--user=<user-name>|--group=<group-name>]
    
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: jenkins
    
    ---
    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1beta1
    metadata:
      name: jenkins
    rules:
    - apiGroups: [""]
      resources: ["pods"]
      verbs: ["create","delete","get","list","patch","update","watch"]
    - apiGroups: [""]
      resources: ["pods/exec"]
      verbs: ["create","delete","get","list","patch","update","watch"]
    - apiGroups: [""]
      resources: ["pods/log"]
      verbs: ["get","list","watch"]
    - apiGroups: [""]
      resources: ["events"]
      verbs: ["watch"]
    - apiGroups: [""]
      resources: ["secrets"]
      verbs: ["get"]
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: RoleBinding
    metadata:
      name: jenkins             #与jenkins.yml中的serviceAccountName: jenkins相对应
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: jenkins
    subjects:
    - kind: ServiceAccount
      name: jenkins
    

    jenkins-pv.yml和jenkins-pvc.yml用于创建挂载jenkins_home目录

    [root@dev-master1 kubernetes]# cat jenkins-pv.yml 
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: jenkins-home
    spec:
      capacity:  #指定容量
        storage: 20Gi
      accessModes:
        - ReadWriteOnce  #访问模式,还有ReadOnlyMany ##ReadOnlymany
    #  persistenVolumeReclaimPolicy: Recycle
    #  storageClassName: nfs  ##指定存储的类型
      nfs:
        path: /data/dev_jenkins  #指明nfs的路径
        server: 10.0.0.250  #指明nfs的ip
    
    [root@dev-master1 kubernetes]# cat jenkins-pvc.yml 
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
        namespace: kubernetes-plugin
        name: jenkins-home
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
            storage: 20Gi
    

    创建Jenkins的master,可以根据实际情况限制Jenkins的资源使用

    [root@dev-master1 kubernetes]# cat jenkins.yml 
    # jenkins
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: jenkins
      labels:
        name: jenkins
    spec:
      selector:
        matchLabels:
          name: jenkins
      serviceName: jenkins
      replicas: 1
      updateStrategy:
        type: RollingUpdate
      template:
        metadata:
          name: jenkins
          labels:
            name: jenkins
        spec:
          terminationGracePeriodSeconds: 10
          serviceAccountName: jenkins
          containers:
            - name: jenkins
              image: 10.0.0.59/jenkins/jenkins:lts-alpine #官方镜像为jenkins/jenkins:lts-alpine,为了节省下载时间已经push到自己到harbor仓库
              imagePullPolicy: Always
              ports:
                - containerPort: 8080
                - containerPort: 50000
              resources:
                limits:
                  cpu: 1
                  memory: 1Gi
                requests:
                  cpu: 0.5
                  memory: 500Mi
              env:
                - name: LIMITS_MEMORY
                  valueFrom:
                    resourceFieldRef:
                      resource: limits.memory
                      divisor: 1Mi
                - name: JAVA_OPTS
                  # value: -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1 -XshowSettings:vm -Dhudson.slaves.NodeProvisioner.initialDelay=0 -Dhudson.slaves.NodeProvisioner.MARGIN=50 -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
                  value: -Xmx$(LIMITS_MEMORY)m -XshowSettings:vm -Dhudson.slaves.NodeProvisioner.initialDelay=0 -Dhudson.slaves.NodeProvisioner.MARGIN=50 -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
              volumeMounts:         #挂载pvc存储到Jenkins容器的/var/jenkins_home
                - name: jenkinshome
                  mountPath: /var/jenkins_home
              livenessProbe:
                httpGet:
                  path: /login
                  port: 8080
                initialDelaySeconds: 600		#存活探针时间改为600s,如果服务器配置低,Jenkins还没有启动成功就被重启了。
                timeoutSeconds: 5
                failureThreshold: 12 # ~2 minutes
              readinessProbe:
                httpGet:
                  path: /login
                  port: 8080
                initialDelaySeconds: 60
                timeoutSeconds: 5
                failureThreshold: 12 # ~2 minutes
          securityContext:
            fsGroup: 1000
          volumes:     #此处声明Jenkins的pvc存储
            - name: jenkinshome
              persistentVolumeClaim:
                claimName: jenkins-home
    #      imagePullSecrets:                        如果使用私有仓库,并且仓库对镜像设置了访问权限,需要在k8s master创建一个secret
    #        - name: registry-secret
    

    jenkins-sv.yml 用于创建Jenkins的Service

    [root@dev-master1 kubernetes]# cat jenkins-sv.yml 
    apiVersion: v1
    kind: Service
    metadata:
      name: jenkins
    spec:
      sessionAffinity: "ClientIP"
      type: NodePort
      selector:
        name: jenkins
      ports:
        -
          name: http
          port: 80
          nodePort: 31006
          protocol: TCP
        -
          name: agent
          port: 50000
          nodePort: 31007
          protocol: TCP
    

    挂载maven缓存目录

    [root@dev-master1 kubernetes]# cat m2-pv.yml 
    #m2是maven的缓存,挂载以提高build速度
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: maven-m2
    spec:
      capacity:  #指定容量
        storage: 200Gi
      accessModes:
        - ReadWriteOnce  #访问模式,还有ReadOnlyMany ##ReadOnlymany
    #  persistenVolumeReclaimPolicy: Recycle
    #  storageClassName: nfs  ##指定存储的类型
      nfs:
        path: /data/dev_jenkins/m2  #指明nfs的路径
        server: 10.0.0.250  #指明nfs的ip
    
    
    [root@dev-master1 kubernetes]# cat m2-pvc.yml 
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
        namespace: kubernetes-plugin
        name: maven-m2
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
            storage: 200Gi
    

    挂载slave节点保存构建结果的目录

    [root@dev-master1 kubernetes]# cat workspace-pv.yml 
    #m2是maven的缓存,挂载以提高build速度
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: workspace
    spec:
      capacity:  #指定容量
        storage: 200Gi
      accessModes:
        - ReadWriteOnce  #访问模式,还有ReadOnlyMany ##ReadOnlymany
    #  persistenVolumeReclaimPolicy: Recycle
    #  storageClassName: nfs  ##指定存储的类型
      nfs:
        path: /data/dev_jenkins/workspace  #指明nfs的路径
        server: 10.0.0.250  #指明nfs的ip
    
    
    [root@dev-master1 kubernetes]# cat workspace-pvc.yml 
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
        namespace: kubernetes-plugin
        name: workspace
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
            storage: 200Gi
    

    创建Jenkins的Ingress。因为我的k8s集群里面使用的是traefik,所以我把traefik的配置文件和kubernetes-plugin官网给出的Ingress一起贴出来。

    [root@dev-master1 kubernetes]# cat jenkins-traefik.yml 
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: jenkins
      namespace: kubernetes-plugin
      annotations:
        kubernetes.io/ingress.class: traefik
    spec:
      rules:
      - host: jenkins-dev.doudou.com
        http:
          paths:
          - path: /  
            backend:
              serviceName: jenkins
              servicePort: 80
    
    
    [root@dev-master1 kubernetes]# cat jenkins-Ingress.yml 
    #因为集群使用traefik所以此Ingress配置文件不创建,此文件为官方原版
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: jenkins
      annotations:
        nginx.ingress.kubernetes.io/ssl-redirect: "true"
        kubernetes.io/tls-acme: "true"
        # "413 Request Entity Too Large" uploading plugins, increase client_max_body_size
        nginx.ingress.kubernetes.io/proxy-body-size: 50m
        nginx.ingress.kubernetes.io/proxy-request-buffering: "off"
        # For nginx-ingress controller < 0.9.0.beta-18
        ingress.kubernetes.io/ssl-redirect: "true"
        # "413 Request Entity Too Large" uploading plugins, increase client_max_body_size
        ingress.kubernetes.io/proxy-body-size: 50m
        ingress.kubernetes.io/proxy-request-buffering: "off"
    spec:
      rules:
      - http:
          paths:
          - path: /
            backend:
              serviceName: jenkins
              servicePort: 80
        host: jenkins.example.com
      tls:
      - hosts:
        - jenkins.example.com
        secretName: tls-jenkins
    

    创建以上的配置文件:

    kubectl create namespace kubernetes-plugin	#创建kubernetes-plugin namespace,下面创建的所有东西都归属到这个namespace
    kubectl config set-context $(kubectl config current-context) --namespace=kubernetes-plugin	#修改k8s默认的namespace为kubernetes-plugin,这样下面创建的都默认为kubernetes-plugin命名空间
    kubectl create -f service-account.yml
    #kubectl create -f jenkins-Ingress.yml
    kubectl create -f jenkins-pv.yml
    kubectl create -f jenkins-pvc.yml
    kubectl create -f jenkins-sv.yml
    kubectl create -f jenkins.yml
    kubectl create -f m2-pvc.yml
    kubectl create -f m2-pv.yml
    kubectl create -f workspace-pvc.yml
    kubectl create -f workspace-pv.yml
    

    查看创建状态

    [root@dev-master1 ~]# kubectl get service,pod,StatefulSet -o wide
    NAME              TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)                        AGE   SELECTOR
    service/jenkins   NodePort   10.105.123.193   <none>        80:31006/TCP,50000:31007/TCP   9d    name=jenkins
    
    NAME            READY   STATUS    RESTARTS   AGE    IP             NODE        NOMINATED NODE   READINESS GATES
    pod/jenkins-0   1/1     Running   0          6d5h   100.78.0.141   dev-node4   <none>           <none>
    
    NAME                       READY   AGE   CONTAINERS   IMAGES
    statefulset.apps/jenkins   1/1     7d    jenkins      10.0.0.59/jenkins/jenkins:lts-alpine
    [root@dev-master1 ~]# kubectl get pv,pvc
    NAME                            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                            STORAGECLASS   REASON   AGE
    persistentvolume/jenkins-home   20Gi       RWO            Retain           Bound    kubernetes-plugin/jenkins-home                           13d
    persistentvolume/maven-m2       200Gi      RWO            Retain           Bound    kubernetes-plugin/maven-m2                               7d5h
    persistentvolume/workspace      200Gi      RWO            Retain           Bound    kubernetes-plugin/workspace                              7d5h
    
    NAME                                           STATUS    VOLUME         CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    persistentvolumeclaim/jenkins-home             Bound     jenkins-home   20Gi       RWO                           13d
    persistentvolumeclaim/maven-m2                 Bound     maven-m2       200Gi      RWO                           7d5h
    persistentvolumeclaim/workspace                Bound     workspace      200Gi      RWO                           7d5h
    

    pv的状态为Bound状态表示已经绑定到对应的PVC上。Jenkins的pod状态为1/1就说明启动成功了,可以通过绑定Ingress的域名访问了。或者使用Service配置中的nodePort端口访问 k8s任意节点IP:nodePort

    查看jenkins密码:

    kubectl exec -it jenkins-0 -n kubernetes-plugin -- cat /var/jenkins_home/secrets/initialAdminPassword
    

    Jenkins配置

    Jenkins安装完成后进入UI界面,首先需要安装需要的插件

    Jenkins可以根据实际情况选择适合的源:
    系统管理->插件管理->高级
    https://updates.jenkins.io/update-center.json #官方源
    https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json #清华源

    然后安装需要的插件:
    Git plugin
    Maven Integration plugin
    Docker plugin
    Kubernetes Continuous Deploy Plugin
    Kubernetes plugin
    Publish Over SSH plugin
    SSH Agent Plugin
    SSH Build Agents plugin
    promoted builds plugin
    Promoted Builds (Simple)

    配置

    Kubernetes plugin插件安装完成后在Jenkins设置里面点击【系统配置】拉到最下面就可以看到一个Cloud
    在这里插入图片描述
    单击之,添加一个云:
    在这里插入图片描述
    名称:名字随便取,后面连接云的时候需要这个名字。
    Kubernetes 地址:访问k8s master上kube-apiserver服务的地址。
    Kubernetes 命名空间:Jenkins部署在哪个命名空间里面了。
    Jenkins 地址:Jenkins访问地址。
    Jenkins 通道:(这特么是一个大坑) :访问Jenkins容器内50000端口地址。因为Jenkins的Service配置文件中我把50000端口映射为nodePort,再加上我配置了dns所以我这里写了域名:端口号的格式,也可以使用IP地址+端口号。
    因为Jenkins-master和Jenkins-slave都在k8s集群内部,所以写ClusterIP:端口号应该也是可以的,但是我没试过 略略略:),地址只要能访问到容器内部的50000端口就可以,但是有一点需要注意,这里的格式不能加http不能加/ 感觉应该是协议的问题,但是还没搞懂。

    点击连接测试,是否能够成功。

    测试

    连接成功后,创建一个流水线job进行测试使用。

    podTemplate(label: 'jnlp-slave', cloud: 'kubernetes', containers: [
        containerTemplate(name: 'maven', image: '10.0.0.59/jenkins/maven:3.3.9-jdk-8-alpine', ttyEnabled: true, command: 'cat'),
      ],
    volumes: [
        persistentVolumeClaim(mountPath: '/root/.m2', claimName: 'maven-m2'),
        persistentVolumeClaim(mountPath: '/home/jenkins/agent/workspace', claimName: 'workspace'),
        ]
    )
    {
      node("jnlp-slave"){
          stage('Build'){
              git branch: 'master', url: 'http://root:qrGw1S_azFE3F77Rs7tA@gitlab.gemantic.com/java/$JOB_NAME.git'
              container('maven') {
                  stage('Build a Maven project') {
                      sh 'mvn clean package -U deploy'
                  }
              }
          }
          stage('deploy'){
              sshPublisher(publishers: [sshPublisherDesc(configName: '76', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '/data/script/jenkins.sh $JOB_NAME', execTimeout: 120000000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/data/kubernetes/service/$JOB_NAME', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/$JOB_NAME*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
          }
      }
    }
    

    pipeline解读:

    • podTemplate创建了一个pod模版。cloud字段指定了连接哪个kubernetes云,kubernetes就是刚才创建一个一个k8s,云的名字就是kubernetes。
    • maven镜像为了加快下载速度,我传到了私有仓库,官方镜像就是把IP地址去掉对应的镜像。
    • persistentVolumeClaim定义了目录挂载,把maven构建的缓存目录.m2和构建产生的数据目录workspace都挂载了一下(对应第一篇文章中的pvc)
    • 下面的pipeline指定后面的操作在jnlp-slave中(也就是pod模版同时也是slave节点)
    • 在build操作中,需要先拉取代码,gitlab拉取代码这里使用了gitlab的root token进行拉取的。gitlab用户获取token方法:在这里插入图片描述
    • 下面就是开始编译啦~,因为是一个java服务,编译完成后会生成一个jar包。
    • deploy步骤就是开始发布了,下面的pipeline是用流水线语法自动生成的在这里插入图片描述

    然后点击构建进行测试。
    在这里插入图片描述

    • 构建过程中,可以看到pod调度到master3上进行构建了。
    • 构建过程中用到了两个镜像,一个maven(已被上传到了私有仓库),一个inbound-agent镜像。inbound-agent镜像是官方的镜像,和maven的关系是都在同一个pod中共享数据,并和Jenkins-master进行交互。(inbound-agent镜像怎么修改为私有仓库镜像还没搞明白,总是去公网下载速度慢)
    • 构建过程中不断的下载java程序依赖的各种包,因为是第一次 时间久了一点,但是我们已经把.m2缓存目录挂载出来了,下次再次构建的时候就可以大大缩减构建的时间。
    • workspace也被挂载了出来,每次构建的数据也会保留,以备不时之需。

    构建成功后查看nfs共享目录中的数据:

    root@sa-storage:/data/dev_jenkins# du -sh m2/
    218M	m2/
    root@sa-storage:/data/dev_jenkins# du -sh workspace/
    65M	workspace/
    

    至此所有的需求都实现了,slave实现了动态伸缩,相关的目录都被挂载出来了。

    排错

    kubectl get pod -n kubernetes-plugin -o wide命令可以查看slave的pod状态,如果出现问题slave一直无限重启,需要查看pod日志。

    kubectl logs `kubectl get pod -n kubernetes-plugin -o wide|grep jnlp-slave|awk '{print $1}'` -n  kubernetes-plugin
    

    每次重启pod的名字都会重新生成,而且正在创建中的pod是无法查看日志的,就算有问题pod也是瞬间就重启了,所以只能上面的这个命令无限的刷。手速快的可以手动哦~手速跟不上的也可以写个循环哒。主要就是文中说的那个大坑,那个坑过去,小问题都可以通过看日志解决的。如果忘记大坑在哪里,可以ctrl+f搜索关键字 “大坑” 哦~

    展开全文
  • Modbus Slave

    千次下载 热门讨论 2016-08-22 15:29:40
    modbus slave调试工具是一款功能强大的modbus子设备模拟工具,可以帮助modbus通讯设备开发人员进行modbus通讯协议的模拟和测试,用于模拟、测试、调试modbus通讯设备。软件可以仿真32个从设备/地址域,每个接口都...
  • 配置slave

    千次阅读 2019-04-06 10:42:10
    要完成添加slave,要克隆slave或者自建slave,本教程是克隆虚拟机,如果没有克隆多个虚拟机slave,请完成克隆虚拟机并且修改克隆好的虚拟机的IP地址和修改虚拟机系统的主机名.(以下简称hostname),才能完成Hadoop的...

    master和slave的定义:

      一般在集群中你唯一地选择一台机器作为 NameNode ,一台机器作为 ResourceManager,这是master (主)。那么 ,集群中剩下的机器作为DataNode 和 NodeManager。这些是slaves (从)。
      在你的 hadoop目录/etc/hadoop/slaves 文件上列出全部slave的hostname或IP地址,一个一行。

    问题描述:

      设置Hadoop的slave有多少个,本教程以设置两个slave。填写两个预设的主机名(以下简称hostname)。

    第一步:

      打开slaves文件

    在这里插入图片描述

    第二步:

      添加你自己改编的hostname(本教程为hadoop002,hadoop003)到slaves文件里面
    在这里插入图片描述

    第三步:

      检查修改情况
    在这里插入图片描述

    (to be continued )

    快速链接

    上一篇 汇总目录 下一篇
     5.2.6 配置hadoop环境变量 云计算数据平台-hadoop集群  5.3 创建从机(slave)
    展开全文
  • 如题,测试重复start slave, stop slave是否会有报错。 版本 5.7.21 重复start slave测试 第一次start &gt;start slave; Query OK, 0 rows affected (0.00 sec) 重复start &gt;start slave; Query OK, 0 ...

    如题,测试重复start slave, stop slave是否会有报错。

    版本

    5.7.21

    重复start slave测试

    第一次start

    >start slave;
    Query OK, 0 rows affected (0.00 sec)
    

    重复start

    >start slave;
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    

    从测试结果可以看到,重复start slave 没有报错。

    重复stop slave测试

    第一stop

    >stop slave;
    Query OK, 0 rows affected (0.00 sec)
    

    重复stop

    >stop slave;
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    

    从上面测试结果可以看到,重复stop slave也没有报错。

    展开全文
  • #####reset slave ; ####清理slave 同步信息: ---reset slave 仅清理master.info 和 relay-log.info 文件 ---删除所有的relay log 文件,重启用一个新的relay log 文件。 ---重置 MASTER_DELAY 复制延迟间隔为...
  • reset slave删除master.info文件和relay-log.info 文件以及所有的relay log 文件并重新启用一个新的relaylog文件,但并不会清理存储于内存中的复制信息比如master host, master port, master user, or master ...
  • slave_exec_mode对slave影响

    千次阅读 2016-08-24 17:15:52
    slave_exec_mode 主要是控制mysql 主从复制中 insert 出现 duplicate-key, update 出现 no-key-found 情况下的处理方式做控制。 stop slave; set global slave_exec_mode=idempotent start slave; ...
  • 在MySQL配置主从关系时,会用到start slave, stop slave命令,本文简单介绍两个命令的使用方法和作用。 start slave mysql&amp;gt; start slave 不带任何参数,表示同时启动I/O 线程和SQL线程。 I/O线程从...
  • redis master slave

    2018-03-13 20:27:23
    复制原理 第一次全量,然后增量 ...master restart slave normal keep master-slave(主从正常) master normal slave restart fail master-slave (主从破裂) master (a) &lt;–slave(b)&lt;–...
  • 如何彻底清除slave设置本机执行stop slave;reset slave; #这将清除 master.info,relay-log.info但我们仍然可以在show slave status \G;看到一些残留信息.—————————-mysql> show slave status \G;*******...
  • slave执行start slave命令时,会调用safe_connect连接master。那么master dump线程,作为master 连接,是什么样的线程呢?经gdb测试后,发现他也是一个普通的用户线程。只是命名为dump线程。IO thread线程start ...
  • sql master slave

    千次阅读 2018-11-25 21:26:29
    1.master vi /etc/my.cnf [mysqld] log-bin=mysqlbin-log ...grant replication slave on *.* to 'slave'@'%' identyfied by '123456'; show master status; 2.slave vi /etc/my.cnf server-id=1...
  • MySQL主从复制中的跳过错误处理参数--slave_skip_errors、sql_slave_skip_counter、slave_exec_mode 跳过复制错误——slave_s...
  • Slave Configuration

    千次阅读 2012-05-02 11:37:22
    The application has to tell the master about the expected bus topology....be done by creating \slave con gurations". A slave con guration can be seen as an expected slave. When a slave con gu
  • Linux大数据平台搭建master、slave1、slave2

    千次阅读 多人点赞 2018-12-02 17:49:05
    实验采用的刚装好的三台虚拟机,名字分别为master、slave1、slave2. 用到的软件如下: 一、前期操作 1、启动网卡:(三台机器) 修改配置文件: vi /etc/sysconfig/network-scripts/ifcfg-ens33 将ONBOOT=...
  • 动态jenkins slave

    千次阅读 2019-01-24 18:25:04
    持续构建与发布是我们日常工作中必不可少的一个步骤,目前大多公司都采用 Jenkins 集群来搭建符合需求的 CI/CD 流程,然而传统的 Jenkins Slave 一主多从方式会存在一些痛点,比如:主 Master 发生单点故障时,整个...
  • jenkins slave部署

    2019-02-19 16:37:25
    1.准备: 准备好足够的磁盘空间,用以存放workspace目录下的拉取的代码,不会存放jobs,由master存放 ...并在slave上连接各服务器,以及git一下gitlab任意代码,使其不会出错(因首次连接需要输...
  • Slave_IO_Running/Slave_SQL_Running 说明

    千次阅读 2017-11-01 16:47:12
    1、Slave_SQL_Running: No  Slave_IO_Running: Yes Slave_SQL_Running: NO 原因: 1.程序可能在slave上进行了写操作 2.也可能是slave机器重起后,事务回滚造成的. 解决办法I: 1.首先停掉Slave服务:slave...
  • 今天在测试主从服务器Mysql同步时遇到了从数据库显示Slave_IO_Running:Connecting的问题,下面列举几种可能的错误原因: 1.网络不通 2.账户密码错误 3.防火墙问题 4.mysql配置文件问题 5.主服务器mysql权限问题 ...
  • Jenkins slave 配置

    千次阅读 2017-06-19 17:17:02
    本文讲述私钥方式添加slave,个人比较推荐此方式: 其一,不需要用户密码,所以不会因为密码改变失去连接; 其二,不需要拥有master机器的任何权限,就可以新建节点; Slave添加私钥授权 使用“SSH Username ...
  • jenkins新建slave

    千次阅读 2014-02-10 16:50:13
    请确保slave账户的java为1.6版本,其中1、3、4、6、7、8、9为必填项。 (2)windows-jnlp方式 (1)与ssh方式不同,windows节点请先在jenkins端设置,连接方式请选择 (2)点击save之后页面跳转,然后将展现的...
  • MySQL show slave statusG 输出详解

    万次阅读 2020-09-17 20:33:48
    MySQL show slave status\G 输出详解 db02 [(none)]>show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event # 指master的...
  • replication slave设置

    千次阅读 2019-03-04 16:52:16
    使用mysql创建从数据库访问账号时:grant replication slave on dbName.* to 'replicate'@'192.168.1.3' identified by '123456'; 出现‘’Incorrect usage of DB GRANT and GLOBAL PRIVILEGES‘’。 ...
  • 监控发现 mysql slave 延迟了不少,登陆mysql ...会有类似的错误提示 Slave:Error “Duplicate entry ‘1’ for key 1” on query….. 再查看master 的 status,验证下 mysql&gt; show master status; 在 ...
  • MySQL slave相关参数

    2019-10-18 15:28:00
    init_slave 设定每次SQL thread启动时执行的语句。 log_slave_updates 是否将复制线程执行的内容记录到binlog。 log_slow_slave_statements 如果从库开启慢日志,是否将复制线程执行的慢SQL记录到慢日志。注意如果...
  • jenkins 启动slave

    2015-03-31 15:09:29
    通过 Launch slave agent headlessly 方法来启动slave(执行路径里面需要有slave.jar文件),在slave agent(或master agent)里面执行: java -jar slave.jar -jnlpUrl ...
  • spark 2.3.1集群搭建(Master,Slave,Slave)

    千次阅读 2018-08-10 23:51:37
    基础配置同上篇博客 配置教程请先参阅:厦门大学数据库实验室系列博客 Spark 2.0分布式集群环境搭建 需要注意的配置有两个 cd /usr/local/spark/ cp ./conf/slaves.template ./conf/slaves ...slave1 slave2 ...
  • jenkins slave搭建

    2016-04-19 11:45:06
    参考: ...   一 创建新的Slave 注意Jenkins中slave称为note。 所以下面文章中的slave和node指的是一回事。   1)在Manage Jenkins-->Mana
  • 即建立新的Slave的方法 前面已经在文章“简单配置MySQL复制”中配置Slave时,没有说明复制从哪里开始,所以Slave是从头开始读取Master的binlog日志的。 但如果Master已经运行一段时间,要重现之前所有日志的事件,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,722
精华内容 22,688
关键字:

slave