1. 程式人生 > >saltstack主機管理項目:主機管理項目架構設計

saltstack主機管理項目:主機管理項目架構設計

get sel led tac text lai space 不執行 load

1、salt架構圖

https://docs.saltstack.com/en/getstarted/system/plugins.html

技術分享圖片plug-ins(左邊):場景可插拔

subsystem-core-subsystem(中間藍色部分):

  1. 執行命令
  2. 分發文件
  3. 安全存儲數據

plug-ins(右邊邊):

  1. 通過命令行執行 標準的接口可以進行二次開發
  2. 可以用什麽樣的形式去描述機器能認識的
  3. 任務結果可以存儲的

plug-ins(下面)

  1. 包-變成命令

2、遠程執行流程:

流程圖(官方圖)

技術分享圖片

流程說明

  1. 輸入一個命令
  2. 進行用戶認證
  3. 把任務放在控制總線,然後分發給客戶端隊列
  4. 客戶端判斷是配置管理還是遠程執行
    1. 下載配置文件
    2. 配置文件裏的數據提取
    3. 安全數據(用戶名,密碼)單獨存儲
    4. 狀態文件解析編譯
  5. 按照標準的格式返回到時間總線上
  6. 客戶端把執行的結果返回到服務器端把結果展現出來並長期保存
  7. 把結果展現出來並長期保存
  8. 當結果返回後觸發任務

主機管理項目初始構建

1、任務解析實例

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 apache: #yum 安裝 pkg.installed: [] service.running: #apache必須運行 - reload: True
- watch: - file: /etc/httpd/conf/httpd.conf #如果配置文件有變更就重啟 user.present: - uid: 87 #- username: alex - gid: 87 - home: /var/www/html - shell: /bin/nologin - require: - group: apache group.present: #apache組不存在上面的命令不執行 - gid: 87 - require: - pkg: apache
/etc/httpd/conf/httpd.conf: #每執行一次配置文件就更新一次 file.managed: - source: salt://apache/httpd.conf - user: root - group: root - mode: 644

2、目錄結構

技術分享圖片

3、代碼解析

from django.db import models

# Create your models here.
class Host(models.Model):
‘‘‘
salt裏面根本用不上ip,他是使用id或者grup組ID和hostname區別主機的唯一性的

saltsack服務器端和客戶端是如何認證的 ?
客戶端和服務器端的認證是通過key來進行認證,客戶端主動找服務器驗證,
我想被你管理,服務器有一個待審批想被管理的列表,同意後就可以管理了
‘‘‘
    hostname = models.CharField(max_length=128,unique=True)
    key = models.TextField()
    status_choices = ((0,‘Waiting Approval‘),
                      (1,‘Accepted‘),
                      (2,‘Rejected‘))
 ‘‘‘每個主機的三個狀態等待、允許、拒絕‘‘‘
    def __str__(self):
        return self.hostname
class HostGroup(models.Model):
    name =  models.CharField(max_length=64,unique=True)
    hosts = models.ManyToManyField(Host,blank=True)

    def __str__(self):
        return self.name

saltstack主機管理項目:主機管理項目架構設計