自動化運維,saltstack安裝、啓動、配置、遠程執行命令,grains,pillar,安裝配置httpd,配置管理文件、目錄、遠程命令、計劃任務,其餘命令,salt-ssh使用

 

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

測試saltstack:

執行以下命令 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選項。

6、saltstack - grains

grains是在minion啓動時收集到的一些信息,好比操做系統類型、網卡ip、內核版本、cpu架構等。
grains的信息並非動態的,並不會實時變動,它是在minion啓動時收集到的。
咱們能夠根據grains收集到的一些信息,作配置管理工做。
grains支持自定義信息。以下:自定義grains
salt '002' grains.ls    列出002上全部的grains項目名字

salt '002' grains.items 列出002上全部grains項目以及值

saltstack – 自定義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'


7、saltstack – pillar

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裏面的密碼去掉

第一次執行:(帶密碼)

 

第二次執行:(不帶密碼)此時已經把公鑰推送過去了

 

相關文章
相關標籤/搜索