SaltStack部署實踐(1) - 配置管理與高級狀態

目錄

一、salt master-minion模式部署

#master和minion下載

#配置master管理minion

#通信原理

二、salt salt-ssh模式部署

#安裝配置管理

#使用ssh遠程執行

三、salt配置管理

#master目錄規劃

#先搞個apache服務sls腳本

#執行sls

四、salt高級狀態

#開啓高級狀態

#編寫計劃腳本

#先測試沒問題再執行


一、salt master-minion模式部署

特性:
遠程執行、配置管理、雲管理、事件驅動

master---node1---192.168.56.11
master---node2---192.168.56.12

#master和minion下載

[root@linux-node1 ~]# yum install -y epel-release salt-master salt-minion
[root@linux-node1 ~]# systemctl start salt-master
[root@linux-node2 ~]# yum install -y epel-release salt-minion

#配置master管理minion

[root@linux-node1-2 ~]# vi /etc/salt/minion 
 #master: salt  修改  master: 192.168.56.11
[root@linux-node1-2 ~]# systemctl start salt-minion
#master通過id識別minion,默認主機名,可通過minion中id選項配置
[root@linux-node2 salt]# cat /etc/salt/minion_id 
linux-node2.example.com  
#minion啓動後會以id形式發送管理請求到master
[root@linux-node1 salt]# tree /etc/salt/pki/master/minions_pre/
/etc/salt/pki/master/minions_pre/
├── linux-node1.example.com
└── linux-node2.example.com
#master同意請求
[root@linux-node1 salt]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
linux-node1.example.com
linux-node2.example.com
Proceed? [n/Y] Y
Key for minion linux-node1.example.com accepted.
Key for minion linux-node2.example.com accepted.
#master查看節點
[root@linux-node1 salt]# salt "*" test.ping
linux-node2.example.com:
    True
linux-node1.example.com:
    True

#通信原理

#Salt使用發佈-訂閱模式與受管系統進行通信。連接由Salt Minion發起,這意味着受控端不需要監聽端口。Salt Master使用的端口爲4505 和4506,必須打開它們才能接受傳入連接。
4505:所有Salt Minion建立與發佈者端口的持久連接,並監聽消息。命令通過此端口異步發送到所有連接,這使命令可以同時在大量系統上執行。
4506:Salt Minion根據需要,連接到服務器,將結果發送到Salt Master,並安全地請求文件和minion 特定的數據值(salt pillar)。

[root@linux-node1 salt]# lsof -n -i:4505
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
salt-mast 19120 root   13u  IPv4  52032      0t0  TCP *:4505 (LISTEN)
salt-mast 19120 root   15u  IPv4  55867      0t0  TCP 192.168.56.11:4505->192.168.56.11:41386 (ESTABLISHED)
salt-mast 19120 root   16u  IPv4  55878      0t0  TCP 192.168.56.11:4505->192.168.56.12:38952 (ESTABLISHED)

二、salt salt-ssh模式部署

傳統salt基礎設施中,由minions主動鏈接master,master並不會存儲minion的網絡和主機配置。而基於ssh鏈接時,這個規則就需要改變,因爲master必須通過ssh去鏈接他的minion。salt-ssh可以獨立運行的,不需要minion端。salt-ssh可以代替expect之類的密碼推送腳本,看起來功能不比expect差 。 salt-ssh 用的是sshpass進行密碼交互的。

但是:

1、salt-ssh是串行的,效率低於master-minion模式

2、要求服務器支持ssh服務

#安裝配置管理

[root@linux-node1 base]# yum install -y salt-ssh 
[root@linux-node1 base]# cat /etc/salt/roster     
linux-node1:
  host: 192.168.56.11
  user: root
  passwd: 123456
linux-node2:
  host: 192.168.56.12
  user: root
  passwd: 123456

#使用ssh遠程執行

#加- i自動認證,不加的話參考一下
[root@linux-node1 base]# salt-ssh '*' -r 'uptime' -i 
[root@linux-node1 base]# salt-ssh '*' -r 'uptime'
linux-node1.example:
    ----------
    retcode:
        254
    stderr:
    stdout:
        The host key needs to be accepted, to auto accept run salt-ssh with the -i flag:
        The authenticity of host '192.168.56.11 (192.168.56.11)' can't be established.
        ECDSA key fingerprint is SHA256:Zpw1uMG0zaEdDsyD2O9nj3mYjTwTrgzQ8uh50cN2Oqs.
        ECDSA key fingerprint is MD5:76:9d:4e:60:7b:38:cf:ef:f9:df:a3:0b:8b:17:ae:e7.
        Are you sure you want to continue connecting (yes/no)?

#此時ssh有驗證訪問機制,臨時關閉解決

[root@linux-node1 base]# vim  /etc/ssh/ssh_config
StrictHostKeyChecking ask修改爲no
[root@linux-node1 base]# systemctl restart sshd
特別注意:
salt-ssh第一次執行是根據roster文件裏配置的賬號密碼推送密碼,來實現自動交互的。
執行完了後會在目標服務器裏面,追加master端(即源機器)的key。
然後就可以刪除roster裏面的passwd密碼條目並且改回ssh規則了,不影響後批量操作的執行。

三、salt配置管理

#master目錄規劃

創建配置文件讀取目錄,可分開發、測試、項目等環境配置(base爲默認目錄)

[root@linux-node1 ~]# mkdir -p /srv/salt/{base,dev.test.prod}
[root@linux-node1 ~]# vim /etc/salt/master
file_roots:
  base:
    - /srv/salt/base
  dev:
    - /srv/salt/dev
  test:
    - /srv/salt/test
  prod:
    - /srv/salt/prod
[root@linux-node1 ~]# systemctl restart salt-master

#先搞個apache服務sls腳本

[root@linux-node1 ~]# vim /srv/salt/base/web/apache.sls 
apache:
  pkg.installed:
    - name: httpd
  service.running:
    - name: httpd
  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/files/httpd.conf
    - user: root
    - group: root
    - mode: 644
解釋說明:
apache:id聲明,在所有環境(base、prod)下全局唯一
pkg:狀態模塊
.:引用關係
installed:模塊中的方法
::代表層級關係
name:可以理解爲參數,後面跟的是參數值
file.managed:文件管理模塊,必須要有source指定文件的來源路徑
name :節點需要管理的文件目錄(minion目錄)
source:要載入到節點的源文件,salt://代表着環境的根路徑,這的根路徑爲:/srv/salt/base/(master目錄)
user、group、mode:分別指定文件的所屬者,所屬組和權限
以上的文件還可以使用分id的寫法:
apache-install:
  pkg.installed:
    - name: httpd

apache-service:
  service.running:
    - name: httpd

apache-config:
  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/files/httpd.conf
    - user: root
    - group: root
    - mode: 644


#執行sls

#建議先yum update否則時間較長

[root@linux-node1 base]# salt 'linux-node2*' state.sls web.apache

四、salt高級狀態

#上述每個腳本都要執行一遍太繁瑣,可以通過指定計劃腳本執行
#高級狀態即統一規定哪些節點做什麼操作,避免繁瑣執行,統一規劃

#開啓高級狀態

[root@linux-node1 web]# vi  /etc/salt/master
開放 state_top: top.sls

#編寫計劃腳本

[root@linux-node1 base]# cat /srv/salt/base/top.sls
base:
  'linux-node1-example.com':
    - web.apache
  'linux-node2-example.com':
    - web.apache

#先測試沒問題再執行

#在不想影響當前主機的運行情況,可以使用test=True 進行預測試
#通常我們所有高級狀態或者sls腳本都要提前測試無誤纔可以

[root@linux-node1 base]# salt '*' state.highstate test=True

#執行高級狀態模塊
#執行highstate後,系統默認搜索base目錄下之前配置的top.sls

[root@linux-node1 base]# salt '*' state.highstate

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章