24.1 自動化運維介紹
24.2 saltstack安裝
24.3 啓動saltstack服務
24.4 saltstack配置認證
24.5 saltstack遠程執行命令
24.6 grains
24.7 pillar
24.8 安裝配置httpd
24.9 配置管理文件
24.10 配置管理目錄
24.11 配置管理遠程命令
24.12 配置管理計劃任務
24.13 其餘命令
24.14 salt-ssh使用html
1、自動化運維介紹python
認識自動化運維:linux
傳統運維效率低,大多工做人爲完成 傳統運維工做繁瑣,容易出錯 傳統運維每日重複作相同的事情 傳統運維沒有標準化流程 傳統運維的腳本繁多,不能方便管理 自動化運維就是要解決上面全部問題
常見自動化運維工具nginx
一、Puppet (www.puppetlabs.com) 基於rubby開發,c/s架構,支持多平臺,可管理配置文件、用戶、cron任務、軟件包、系統服務等。 分爲社區版(免費)和企業版(收費),企業版支持圖形化配置。 二、Saltstack(官網 https://saltstack.com,文檔docs.saltstack.com ) 基於python開發,c/s架構,支持多平臺,比puppet輕量,在遠程執行命令時很是快捷,配置和使用比puppet容易,能實現puppet幾乎全部的功能。 三、Ansible (www.ansible.com ) 更加簡潔的自動化運維工具,不須要在客戶端上安裝agent,基於python開發。能夠實現批量操做系統配置、批量程序的部署、批量運行命令。
2、saltstack安裝shell
saltstack介紹https://docs.saltstack.com/en/latest/topics/index.html
可使用salt-ssh遠程執行,相似ansible,
也支持c/s模式,下面咱們將講述該種模式的使用,須要準備兩臺機器:
183.3爲服務端,183.33爲客戶端vim
設置hostname以及hosts,001和002,hostname這裏不須要設置安全
vim /etc/hosts 實驗須要,兩臺機器都須要設置 192.168.183.3 001 192.168.183.33 002
兩臺機器所有安裝saltstack yum源:bash
yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm yum list |grep salt 001上執行 yum install -y salt-master salt-minion 002上執行 yum install -y salt-minion
3、啓動salt相關服務服務器
可參考: https://blog.51cto.com/luzhi1024/1731904
編輯配置文件架構
master(001):
vim /etc/salt/master 修改interface監聽地址爲本機ip: interface: 192.168.183.3 修改auto_accept 自動接收minion的key: auto_accept: True vim /etc/salt/minion master: 192.168.183.3
minion端(002):修改爲master的服務器ip
vim /etc/salt/minion master: 192.168.183.3
啓動服務:
001 :
systemctl start salt-master systemctl start salt-minion /var/log/salt/master 日誌目錄 服務端監聽4505和4506兩個端口,4505爲消息發佈的端口,4506爲和客戶端通訊的端口
002:
salt-master監聽端口,經過TCP/IP和salt-minion通訊,可是salt-minion不監聽端口 systemctl start salt-minion
4、saltstack配置認證
master端和minion端通訊須要創建一個安全通道,傳輸過程須要加密,因此得配置認證,才能進行通訊,也是經過密鑰對來加密解密的 minion在第一次啓動時會在/etc/salt/pki/minion/下生成minion.pem和minion.pub,其中pem爲私鑰,.pub爲公鑰,它會在發起認證時把公鑰傳輸給master master第一次啓動時也會在/etc/salt/pki/master下生成密鑰對,當master接收到minion傳過來的公鑰後,經過salt-key工具接受這個公鑰,一旦接受後就會在/etc/salt/pki/master/minions/目錄裏存放剛剛接受的公鑰,同時客戶端也會接受master傳過去的公鑰,把它放在/etc/salt/pki/minion目錄下,並命名爲minion_master.pub
以上過程須要藉助salt-key工具來實現
salt-key命令用法:
-a 後面跟主機名,認證指定主機 -A 認證全部主機 -r 跟主機名,拒絕指定主機 -R 拒絕全部主機 -d 跟主機名,刪除指定主機認證 -D 刪除所有主機認證 -y 省略掉交互,至關於直接按了y
執行以下命令 salt-key -a 002 // -a後面跟主機名,能夠認證指定主機 此處設置了hosts顯示002 此時能夠看到minion的hostname已經獲取到了,說明安裝成功。 綠色的是經過的 粉色的是被拒絕的 Unaccepted是默認的,默認可以識別到的
重啓systemctl restart salt-minion 會自動讓master端識別minion端,兩臺機器都執行
使用 salt-key -A 認證全部主機
此時已經接收了001和002的公鑰,所在位置:
ls /etc/salt/pki/master/minions
而且兩邊的公鑰是一致的
salt-key -D 主機所有刪除,而且/etc/salt/pki/master/minions目錄下文件也會刪除
5、saltstack遠程執行命令
salt '*' test.ping //這裏的*表示全部已經簽名的minion端,也能夠指定一個主機名,test.ping測試對方機器是否存活
salt '*' cmd.run "hostname" 調用系統上的命令,用戶爲當前所在用戶
說明:
這裏的*必須是在master上已經被接受過認證的客戶端,能夠經過salt-key查到,一般是咱們已經設定的id值。關於這部份內容,它支持通配、列表以及正則。
好比兩臺客戶端aming-01,aming-02, 那咱們能夠寫成salt 'aming-*', salt 'aming-0[12]' salt -L 'aming-01,aming-02' salt -E 'aming-(01|02)'等形式,使用列表,即多個機器用逗號分隔,並且須要加-L,使用正則必需要帶-E選項。 它還支持grains,加-G選項,pillar 加-I選項。
grains是在minion啓動時收集到的一些信息,好比操做系統類型、網卡ip、內核版本、cpu架構等。 grains的信息並非動態的,並不會實時變動,它是在minion啓動時收集到的。 咱們能夠根據grains收集到的一些信息,作配置管理工做。 grains支持自定義信息。以下:自定義grains
salt '002' grains.ls 列出002上全部的grains項目名字
salt '002' grains.items 列出002上全部grains項目以及值
minion上:
vim /etc/salt/grains //添加: role: nginx env: test 重啓minion服務: systemctl restart salt-minion
master上:
獲取grains:
salt '*' grains.item role env
能夠藉助grains的一些屬性信息來執行命令
salt -G role:nginx cmd.run 'hostname'
pillar和grains不同,是在master上定義的,而且是針對minion定義的一些信息。像一些比較重要的數據(密碼)能夠存在pillar裏,還能夠定義變量等。
master上:
配置自定義pillar
vim /etc/salt/master
找到以下配置://去掉前面的註釋 pillar_roots: base: #此行前面有兩個空格 - /srv/pillar #此行前面有4個空格
systemctl restart salt-master
mkdir /srv/pillar vim /srv/pillar/test.sls 建立一個子配置文件,內容以下sls爲後綴 conf: /etc/123.conf k爲conf,value爲/etc/123.conf,注意冒號後面的空格,和自定義grains同樣
vi /srv/pillar/top.sls //入口文件,內容以下 base: '002': #此行前面有兩個空格,針對的機器,主機名 - test #此行前面有4個空格,要加載的配置文件
若是有多個文件能夠寫多行
在編輯vim /srv/pillar/test2.sls 寫入 dir: /data/123
當更改完pillar配置文件後,咱們能夠經過刷新pillar配置來獲取新的pillar狀態:
salt '*' saltutil.refresh_pillar 驗證: salt '*' pillar.item conf salt '*' pillar.item conf dir 能夠寫多個
也能夠這樣定義top.sls
002對應test,001對應test2
在刷新,驗證
pillar一樣能夠用來做爲salt的匹配對象。好比 salt -I 'conf:/etc/123.conf' test.ping
8、安裝配置httpd
使用saltstack ,安裝配置httpd
master上:
vim /etc/salt/master //搜索找到 file_roots 打開以下內容的註釋: file_roots: 找到目錄,做爲總入口,在目錄下作配置 base: #前面有兩個空格 - /srv/salt #前面有4個空格
mkdir /srv/salt ; cd /srv/salt vim /srv/salt/top.sls //定義總入口文件,加入以下內容 base: '*': #*全部機器,前面有兩個空格 - httpd #須要建立一個httpd的sls文件,前面有4個空格 意思是,在全部的客戶端上執行httpd模塊 重啓 systemctl restart salt-master
master上:
vim /srv/salt/httpd.sls //加入以下內容,這個就是httpd模塊的內容
httpd-service: pkg.installed: - names: //要安裝的包的名字,這裏若是隻有一個服務,那麼就能夠寫成 –name: httpd 不用再換行寫了。 - httpd - httpd-devel service.running: 啓動服務的模塊 - name: httpd - enable: True
說明:
httpd-service是id的名字,自定義的。
pkg.installed 爲包安裝函數,下面是要安裝的包的名字。
service.running也是一個函數,來保證指定的服務啓動,enable表示開機啓動。
執行: salt 'aminglinux-02' state.highstate //執行過程會比較慢,由於客戶端上在yum install httpd httpd-devel
state.highstate 此命令會去/srv/salt目錄下找top.sls文件
ls /lib/systemd/system/httpd.service 會在002的該目錄下生成httpd服務文件,而且服務啓動
9、saltstack – 配置管理文件
master上:
vim /srv/salt/test.sls //加入以下內容
file_test: file.managed: - name: /tmp/tobe.com 對方機器的文件路徑 - source: salt://test/123/1.txt 來源文件目錄,salt://等於/srv/salt/,source指定文件從哪裏拷貝 - user: root - group: root - mode: 600 權限
說明:第一行的file_test爲自定的名字,表示該配置段的名字,能夠在別的配置段中引用它,source指定文件從哪裏拷貝,這裏的salt://test/123/1.txt至關因而/srv/salt/test/123/1.txt
默認找top.sls文件
mkdir -p /srv/salt/test/123 cp /etc/passwd /srv/salt/test/123/1.txt vim /srv/salt/top.sls //以下內容 base: '*': - test 執行: salt '002' state.highstate
此時002上有/tmp/tobe.com,而且內容與權限和/srv/salt/test/123/1.txt的內容一致
10、配置管理目錄
master上:
vim /srv/salt/test_dir.sls //加入以下內容
file_dir: file.recurse: - name: /tmp/testdir 對方機器上的目錄 - source: salt://test/123 在master上的源目錄 - user: root 屬主 - file_mode: 640 文件權限 - dir_mode: 750 目錄權限 - mkdir: True - clean: True //加上它以後,源刪除文件或目錄,目標也會跟着刪除,不然不會刪除 修改top.sls, vim /srv/salt/top.sls //改成以下內容 base: '*': - test_dir 執行: salt '002' state.highstate 檢查002上是否有/tmp/testdir,檢查裏面的目錄、文件以及權限 說明:這裏有一個問題,若是source對應的目錄裏有空目錄的話,客戶端上不會建立該目錄 執行: salt '002' state.highstate
11、配置管理遠程命令
master上
vim /srv/salt/shell_test.sls //加入以下內容
shell_test: cmd.script: - source: salt://test/1.sh 腳本在master的路徑 - user: root
vim /srv/salt/test/1.sh //加入以下內容
#!/bin/bash touch /tmp/111.txt if [ ! -d /tmp/1233 ] 判斷1233目錄是否存在,不存在則建立 then mkdir /tmp/1233 fi
更改top.sls內容
增長:
- shell_test
執行: salt '002' state.highstate
檢查是否有/tmp/111.txt和/tmp/1233
12、配置管理計劃任務
master上
vim /srv/salt/cron_test.sls //加入以下內容
cron_test: cron.present: - name: /bin/touch /tmp/111.txt - user: root - minute: '*' - hour: 20 - daymonth: '*' - month: '*' - dayweek: '*'
注意,*須要用單引號引發來。固然咱們還可使用file.managed模塊來管理cron,由於系統的cron都是以配置文件的形式存在的。
top.sls
增長: - cron_test 執行: salt '002' state.highstate
002上檢查cron,會看到提示# Lines below here are managed by Salt, do not edit
咱們不能隨意改動它,不然就無法刪除或者修改這個cron了。
想要刪除該cron,須要增長:
cron.absent: - name: /bin/touch /tmp/111.txt 注意空格 執行: salt '002' state.highstate
二者不能共存,要想刪除一個cron,那以前的present就得去掉。
此時002上已經沒有了
十3、其它可能會用到的命令
cp.get_file 拷貝master上的文件到客戶端 salt '*' cp.get_file salt://test/1.txt /tmp/123.txt cp.get_dir 拷貝目錄 salt '*' cp.get_dir salt://test/conf /tmp/ //會自動在客戶端建立conf目錄,因此後面不要加conf,若是寫成 /tmp/conf/ 則會在/tmp/conf/目錄下又建立conf salt-run manage.up 顯示存活的minion salt '*' cmd.script salt://test/1.sh 命令行下執行master上的shell腳本
十4、salt-ssh使用
salt-ssh不須要對客戶端作認證,客戶端也不用安裝salt-minion,它相似pssh/expect.
安裝很簡單yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
yum install -y salt-ssh
vim /etc/salt/roster //增長以下內容
001: host: 192.168.183.3 user: root passwd: xxxx root的密碼 002: host: 192.168.183.33 user: root passwd: xxxx 執行: salt-ssh --key-deploy '*' -r 'w' //第一次執行的時候--key-deploy會自動把本機的公鑰放到對方機器上,而後就能夠把roster裏面的密碼去掉
第一次執行:(帶密碼)
第二次執行:(不帶密碼)此時已經把公鑰推送過去了