saltstack高效運維

saltstack

  • salt靈活性強大,能夠進行大規模部署,也能進行小規模的系統部署。salt的設計架構適用於任意數量的服務器,從少許本地網絡系統到跨越數個數據中心,拓撲架構都是c/s模型,配置簡單。html

      無論是幾臺、幾百臺、幾千臺服務器,均可以使用salt在一箇中心節點上進行管控,靈活定位任意服務器子集來運行命令。 python

      Salt是python編寫的,支持用戶經過python自定義功能模塊,也提供了大量的python API接口,用戶能夠根據須要進行簡單快速的擴展。nginx

1.saltstack的運行方式

  • Local 本地運行,交付管理
  • Master/Minion <<< 經常使用方式
  • Salt SSH 不須要客戶端

參考學習:http://www.javashuo.com/article/p-cfvzqlkb-dr.htmlshell

2.salt部署基本架構

  • 在安裝salt以前,先理解salt架構中各個角色,主要區分是salt-master和salt-minion,顧名思義master是中心控制系統,minion是被管理的客戶端。
  • salt架構中的一種就是master > minion。

  • 在遠程執行系統中,salt用python經過函數調用完成任務。json

    運行salt依賴包vim

    python
    zeromq
    pyzmp
    pycrypto
    msgpack-python
    yaml
    jinja2

3.YAML講解

語法規則
    大小寫敏感
    使用縮進表示層級關係   
    縮進時禁止tab鍵,只能空格
    縮進的空格數不重要,相同層級的元素左側對其便可
    # 表示註釋行
yaml支持的數據結構
    對象: 鍵值對,也稱做映射 mapping 哈希hashes 字典 dict    冒號表示 key: value   key冒號後必須有
    數組: 一組按次序排列的值,又稱爲序列sequence 列表list     短橫線  - list1
    純量: 單個不可再分的值

對象:鍵值對
yaml
    first_key:
      second_key:second_value

python
    {
        'first_key':{
            'second_key':'second_value',
        }
    }

4.代碼實現:

  • 環境準備:數組

    準備2臺機器:
      192.168.58.137    master
      192.168.58.138    minion1
    minion能夠由多臺機器,這裏拿一臺機器演示
  • master和minion 分別須要安裝不一樣的軟件包瀏覽器

    master上:
      yum install salt-master -y
    
    minions上:
      yum install salt-minion -y
  • master和minion1配置hosts文件服務器

    [root@master ~]# vi /etc/hosts
    
    192.168.58.137    master
    192.168.58.138    minion1
    
    #經過Xshell左下角所有會話口:ping master 或者 ping minion1
    #有迴應表示能ping通,表示DNS解析都過了
    
    iptables -F    將三臺機器關閉防火牆服務
    systemctl disable firewalld  永久關閉防火牆
    • 清空vim --->dG
  • 修改配置前先備份:master minion網絡

    [root@minionl ~]# cp /etc/salt/minion /etc/salt/minion.bck
    
    [root@master ~]# cp /etc/salt/master /etc/salt/master.bck
  • 修改salt-master以及salt-minion的配置文件

minion1配置修改以下
    master: master
    master_port: 4506
    user: root
    id: s21minion1
    acceptance_wait_time: 10
    log_file: /var/log/salt/minion
        
#master: master     #填寫master的主機名,
#master_port: 4506      #填寫master接收響應的端口號
#user: root         #以root執行
#id: s21minion2         #這個id是,master在管理minion界面中,顯示的名字
        
        
master修改以下 
    interface: 0.0.0.0
    publish_port: 4505
    user: root
    worker_threads: 5
    ret_port: 4506
    pidfile: /var/run/salt-master.pid
    log_file: /var/log/salt/master
  • 分別啓動minion和master
systemctl start salt-master 
systemctl start salt-minion
  • 經過祕鑰檢查,master是否管理了 minion
salt-key -L   #列出master管控的全部key信息 

Accepted Keys:  #已接收的密鑰
Denied Keys:    #拒絕密鑰
Unaccepted Keys:    #發現密鑰
s21minion1
Rejected Keys:
  • 檢查master上的祕鑰和minion是否一致
在master上敲打:   salt-key -f s21minion1
在minion上敲打 :  salt-call --local key.finger


[root@master ~]# salt-key -f  s21minion1
Unaccepted Keys:
s21minion1:  fd:27:e6:20:7b:32:74:64:39:fb:9e:d8:de:d6:05:62:53:1f:0b:8e:5c:c4:4d:d4:76:39:d3:c2:b4:c8:67:eb

[root@minionl ~]# salt-call --local key.finger
local:
fd:27:e6:20:7b:32:74:64:39:fb:d6:05:62:53:1f:0b:8e:5c:c4:4d:d4:c2:b4:c8:67:eb

#密鑰都同樣表示沒有問題
  • 在master上接收,全部的祕鑰
salt-key  -A   #接收全部未被管控的祕鑰

[root@master ~]# salt-key -A
  • salt的第一個命令,驗證minion機器是否存活
[root@master ~]# salt "*" test.ping 

s21minion1:
    True
#返回True表示存活

#轉換json展現:
[root@master ~]# salt "*" --out=json test.ping 
{
    "s21minion1": true
}
  • 列出salt命令的詳細信息
[root@master ~]# salt "*" --summary cmd.run "hostname" 
s21minion1:
    minionl
    
#cmd是超級模塊,全部shell命令都能執行
#返回全部minion的主機名字.
  • 經過操做master遠程安裝Nginx
[root@master ~]# salt "*" cmd.run "yum install nginx -y"
#cmd是超級模塊,全部shell命令都能執行
  • 經過操做master遠程啓動Nginx
[root@master ~]# salt "*" cmd.run "yum install nginx -y"
#瀏覽器訪問http://192.168.58.138/    有響應頁面,成功
  • 查看minion的 Nginx的版本號
[root@master ~]# salt "*" pkg.version "nginx"
s21minion1:
    1:1.12.2-3.el7
  • 關閉Ngnix
[root@master ~]# salt "*" service.stop "nginx"
s21minion1:
    True
  • Grains人爲是描述minion自己固有的靜態屬性數據,列出主機全部Grains數據
[root@master 192.168.11.72 ~]$salt 'slave' grains.items
  • 返回s21mimion1的ip
[root@master ~]# salt "s21minion1" grains.item fqdn_ip4
s21minion1:
    ----------
    fqdn_ip4:
        - 192.168.58.138
[root@master ~]# salt "s21minion1" grains.item fqdn_ip4 --out=json

#生成json格式
{
    "s21minion1": {
        "fqdn_ip4": [
            "192.168.58.138"
        ]
    }
}

5.在python中執行salt

import salt.client
local = salt.client.LocalClient()
local.cmd("s21minion1","cmd.run",["touch /tmp/heihei"])
  • 此時在s21minion1輸入:
[root@minionl ~]# cd /tmp
[root@minionl tmp]# ls
heihei  vmware-root
#能夠看到建立heihei文件
相關文章
相關標籤/搜索