利用saltstack管理邊緣計算節點
阿新 • • 發佈:2021-08-02
目錄
利用saltstack管理邊緣計算節點
需求背景
- 公司業務場景中需要在客戶機房部署邊緣計算節點用於邊緣計算,在邊緣處理計算密集型運算
- 邊緣節點通過公網訪問雲端服務,雲端不可訪問邊緣計算節點
- 要求可以在雲端控制邊緣計算節點,方便日常主機運維
- 邊緣計算節點與雲端需要存在認證和准入
由於雲端不能三層直連邊緣計算節點,需要採用master-slave架構的服務, 通過邊緣計算節點部署agent監聽雲端訊息,剛好saltstack滿足以上要求
什麼是saltstack
SaltStack是基於Python開發的一套C/S架構配置管理工具(功能不僅僅是配置管理),它的底層使用ZeroMQ訊息佇列pub/sub方式通訊,使用SSL證書籤發的方式進行認證管理。號稱世界上最快的訊息佇列ZeroMQ使得SaltStack能快速在成千上萬臺機器上進行各種操作。
SaltStack架構
- Master:控制中心,salt命令執行和資源狀態管理
- Minion : 需要管理的客戶端機器,會主動去連線Mater端,並從Master端得到資源狀態
- 資訊,同步資源管理資訊
- States:配置管理的指令集
- Modules:在命令列中和配置檔案中使用的指令模組,可以在命令列中執行
- Grains:minion端的變數,靜態的
- Pillar:minion端的變數,動態的比較私密的變數,可以通過配置檔案實現同步minions定義
- highstate:為minion端下發永久新增狀態,從sls配置檔案讀取.即同步狀態配置
- 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 為例
-
安裝salt-minion agent服務
sudo apt install salt-minion
-
配置salt-minion配置檔案連線雲端master節點,並啟動minion服務
sed -i '/#master: salt/a master: <master_ip>' /etc/salt/minion # 替換<master_ip>為實際master ip或域名 systemctl enable salt-minion --now
-
進入雲端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