1. 程式人生 > 其它 >利用saltstack管理邊緣計算節點

利用saltstack管理邊緣計算節點

目錄

利用saltstack管理邊緣計算節點

需求背景

  1. 公司業務場景中需要在客戶機房部署邊緣計算節點用於邊緣計算,在邊緣處理計算密集型運算
  2. 邊緣節點通過公網訪問雲端服務,雲端不可訪問邊緣計算節點
  3. 要求可以在雲端控制邊緣計算節點,方便日常主機運維
  4. 邊緣計算節點與雲端需要存在認證和准入

由於雲端不能三層直連邊緣計算節點,需要採用master-slave架構的服務, 通過邊緣計算節點部署agent監聽雲端訊息,剛好saltstack滿足以上要求

什麼是saltstack

SaltStack是基於Python開發的一套C/S架構配置管理工具(功能不僅僅是配置管理),它的底層使用ZeroMQ訊息佇列pub/sub方式通訊,使用SSL證書籤發的方式進行認證管理。號稱世界上最快的訊息佇列ZeroMQ使得SaltStack能快速在成千上萬臺機器上進行各種操作。

SaltStack架構

  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或域名
    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