• 利用saltstack管理边缘计算节点


    利用saltstack管理边缘计算节点

    需求背景

    1. 公司业务场景中需要在客户机房部署边缘计算节点用于边缘计算,在边缘处理计算密集型运算
    2. 边缘节点通过公网访问云端服务,云端不可访问边缘计算节点
    3. 要求可以在云端控制边缘计算节点,方便日常主机运维
    4. 边缘计算节点与云端需要存在认证和准入

    由于云端不能三层直连边缘计算节点,需要采用master-slave架构的服务, 通过边缘计算节点部署agent监听云端消息,刚好saltstack满足以上要求

    什么是saltstack

    SaltStack是基于Python开发的一套C/S架构配置管理工具(功能不仅仅是配置管理),它的底层使用ZeroMQ消息队列pub/sub方式通信,使用SSL证书签发的方式进行认证管理。号称世界上最快的消息队列ZeroMQ使得SaltStack能快速在成千上万台机器上进行各种操作。

    SaltStack架构

    image-20210802152511858

    1. Master:控制中心,salt命令运行和资源状态管理
    2. Minion : 需要管理的客户端机器,会主动去连接Mater端,并从Master端得到资源状态
    3. 信息,同步资源管理信息
    4. States:配置管理的指令集
    5. Modules:在命令行中和配置文件中使用的指令模块,可以在命令行中运行
    6. Grains:minion端的变量,静态的
    7. Pillar:minion端的变量,动态的比较私密的变量,可以通过配置文件实现同步minions定义
    8. highstate:为minion端下发永久添加状态,从sls配置文件读取.即同步状态配置
    9. salt_schedule:会自动保持客户端配置

    边缘节点接入方案

    云端服务部署

    云端服务采用kubernetes方式部署,并使用SLB将服务端口开放到云端,使用pvc持久化master节点与minion的认证密钥信息, 部署yaml 如下:

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      creationTimestamp: null
      labels:
        app: salt-master
      name: salt-master
      namespace: saltstack
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: salt-master
      strategy: {}
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: salt-master
        spec:
          hostname: salt-master
          containers:
          - image: saltstack/salt:3000.7
            name: salt
            env:
            - name: SALT_SHARED_SECRET
              value: MY_PASSWORD
            resources:
              limits:
                cpu: 1000m
                memory: 1.5Gi
              requests:
                cpu: 200m
                memory: 256Mi
            volumeMounts:
            - mountPath: /etc/salt/pki/master
              name: saltstack-pki
          volumes:
          - persistentVolumeClaim:
              claimName: saltstack-pki-pvc
            name: saltstack-pki
    status: {}
    ---
    apiVersion: v1
    kind: Service
    metadata:
      creationTimestamp: null
      labels:
        app: salt-master
      name: salt-master
      namespace: saltstack
    spec:
      ports:
      - port: 4505
        protocol: TCP
        targetPort: 4505
        name: publish-port
      - port: 4506
        protocol: TCP
        targetPort: 4506
        name: ret-port
      selector:
        app: salt-master
      type: LoadBalancer
    status:
      loadBalancer: {}
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      labels:
        alicloud-pvname: saltstack-pki-pv
      name: saltstack-pki-pv
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 1Gi
      flexVolume:
        driver: alicloud/nas
        options:
          path: /k8s/saltstack-pki
          server: xxxxxxxxxxxxxxx.com
          vers: "4.0"
      persistentVolumeReclaimPolicy: Retain
      volumeMode: Filesystem
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: saltstack-pki-pvc
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
      selector:
        matchLabels:
          alicloud-pvname: saltstack-pki-pv
      volumeMode: Filesystem
      volumeName: saltstack-pki-pv
    

    边缘节点接入

    saltstack支持大部分linux 系统,以下以ubuntu18.04 为例

    1. 安装salt-minion agent服务

      sudo apt install salt-minion
      
    2. 配置salt-minion配置文件连接云端master节点,并启动minion服务

      sed -i '/#master: salt/a master: <master_ip>' /etc/salt/minion # 替换<master_ip>为实际master ip或域名
      # 由于走公网网络链接不稳定,添加断线重连
      sed -i '/# master_type: str/a master_type: failover' /etc/salt/minion
      sed -i '/# master_alive_interval: 30/a master_alive_interval: 30' /etc/salt/minion
      systemctl enable salt-minion --now
      
    3. 进入云端master节点容器,准入minion节点

      # 1. 列出需要准入的边缘节点
      # salt-key -L
      Accepted Keys:
      Denied Keys:
      Unaccepted Keys:
      ubuntu-18
      Rejected Keys:
      # 2. 同意边缘节点认证
      # salt-key -a ubuntu-18
      The following keys are going to be accepted:
      Unaccepted Keys:
      ubuntu-18
      Proceed? [n/Y] y
      Key for minion ubuntu-18 accepted.
      # 3. 测试节点是否在线
      # salt '*' test.ping
      ubuntu-18:
          True
      # 4. 执行远程管理命令
      # salt '*' cmd.run 'ip route show'
      ubuntu-18:
          default via 192.168.30.2 dev ens33 proto static 
          192.168.30.0/24 dev ens33 proto kernel scope link src 192.168.30.30
      

    saltsatck 使用

    1. 基本使用
    salt '*' test.ping
    salt '*' cmd.run 'ls -l /etc'
    salt '*' disk.usage
    salt '*' pkg.install cowsay
    salt '*' network.interfaces
    salt 'minion1' disk.usage
    salt 'minion*' disk.usage
    salt -G 'os:Ubuntu' test.ping
    salt -E 'minion[0-9]' test.ping
    salt -L 'minion1,minion2' test.ping
    salt -C 'G@os:Ubuntu and minion* or S@192.168.50.*' test.ping
    
  • 相关阅读:
    Redis安装过程
    TDDL-剖析淘宝TDDL
    jQuery 遍历
    util-C# 复杂条件查询(sql 复杂条件查询)查询解决方案
    util-判断当前年份所处的季度,并返回当前季度开始的月份
    省市区(县)三级联动代码(js 数据源)
    JS:实用功能
    C#常用格式输出
    算术运算符
    C# 中的结构类型(struct type)
  • 原文地址:https://www.cnblogs.com/drfung/p/15090357.html
Copyright © 2020-2023  润新知