死磕salt系列-salt入門


saltstack簡介

SaltStack是一種新型的基礎設施管理軟件,簡單易部署,可伸縮的足以管理成千上萬的服務器,和足夠快的速度控制,與他們交流,以毫秒為單位。SaltStack提供了一個動態基礎設施通信總線用於編排,遠程執行、配置管理等等。SaltStack項目於2011年啟動,年增長速度較快,五年期固定基礎設施編制和配置管理的開源項目。SaltStack社區致力於保持slat項目集中、友好、健康、開放。

簡單來說它的兩大基礎功能就是:配置管理、遠程命令執行。剩下就是根據你的需求自由組合,實現更復雜的功能和系統管理。

saltstack運行的模式

  1. local
  2. master/minion
  3. salt SSH(可以不依賴客戶端)

saltstack三大功能

  • 遠程執行
  • 配置管理
  • 雲管理(不是特別成熟,不建議生產環境使用)

Salt即可以批量執行命令,也可以單機執行。通常單機執行用於測試:

  1. 單機(立即)執行。 使用salt-call命令單機執行操作。
  2. 批量(立即)執行。最常用的操作。使用salt命令,對匹配的minion節點執行操作。

salt 安裝

salt解析基於DNS,如果做實驗發現執行特別慢,可以嘗試配置好域名解析。

vim /etc/hosts
192.168.56.11 linux-node1
192.168.56.12 linux-node2

master 安裝

安裝epel源

rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm

配置saltstack的官方yum源

vim /etc/yum.repo.d/saltstack-repo
####################
# Enable SaltStack's package repository
[saltstack-repo]
name=SaltStack repo for RHEL/CentOS 7
baseurl=https://repo.saltstack.com/yum/rhel7
enabled=1
gpgcheck=0
gpgkey=https://repo.saltstack.com/yum/rhel7/SALTSTACK-GPG-KEY.pub

服務端安裝salt-master 軟件

yum install salt-master -y

saltstack服務端配置文件

  • 配置文件需要頂頭寫,不能有空格。
mkdir /srv/salt/{base,prod,test,pillar} -p 
vim /etc/salt/master
default_include: master.d/*.conf
interface: 10.10.0.159
ipv6: False
timeout: 30
max_open_files: 65535
worker_threads: 5
state_verbose: False
file_roots:
  base:
    - /srv/salt/base/
  prod:
    - /srv/salt/prod/
  test:
    - /srv/salt/test/
pillar_roots:
  base:
    - /srv/salt/pillar
log_file: /var/log/salt/master
log_level: warning
### salt api 相關參數
rest_cherrypy:
  port: 8000
  disable_ssl: True
external_auth:
  pam:
    saltapi:
      - .*
      - '@runner'
      - '@wheel'

修改完配置文件后,啟動master服務

systemctl enable salt-master.service
systemctl start salt-master.service

注意:salt的書寫一定要注意格式。基礎環境(base),生產環境(prod),測試環境(test)分三個目錄。通過不同的目錄創建不同的內容。
關於salt-master配置文件更多的內容可以參考salt配置文件詳解

客戶端安裝

安裝salt-minion 軟件

yum install salt-minion -y

配置並啟動saltstack客戶端。

vim /etc/salt/minion 
master: 192.168.56.11
id:  linux-node2

重啟minion進程

systemctl enable salt-minion.service
systemctl start salt-minion.service

minion 向 master 端注冊

master端操作

shell> salt-key -L
Accepted Keys:
linux-node1
Denied Keys:
Unaccepted Keys:
linux-node2
Rejected Keys:
shell> salt-key - A -y ## 同意所有的未注冊主機
Accepted Keys:
linux-node1
Denied Keys:
Unaccepted Keys:
linux-node2
Rejected Keys:

master的key存放位置:

shell> cd /etc/salt/pki/master/
shell> tree 
+-- master.pem
+-- master.pub
+-- minions
|   +-- linux-node1 (minion的公鑰)
|   +-- linux-node2 (minion的公鑰)
+-- minions_autosign
+-- minions_denied
+-- minions_pre
+-- minions_rejected

5 directories, 4 files
[root@linux-node1 master]# 

salt-key命令補充

  • salt-key -L 列出所有的key信息。
  • salt-key -d www.etiantian.org 刪除一個key 。
  • salt-key -A -y 同意所有未注冊的minion端。
  • salt-key -a www.etiantian.org 同意一個機器。

minion端 ID 存放在這個文件中

shell>  ls /etc/salt/pki/minion
minion_master.pub  minion.pem  minion.pub

刪除舊的key文件

cd /etc/salt/pki/minion && rm -f * 

salt遠程執行

命令格式:salt 'Traget' module

  • 目標:Traget
  • 模塊:Module
  • 返回:Returners

目標匹配方式

通配符使用:

salt '*' test.ping
salt '*.example.net' test.ping
salt '*.example.*' test.ping
salt 'web?.example.net' test.ping
salt 'web[1-5]' test.ping
salt 'web[1,3]' test.ping
salt 'web-[x-z]' test.ping

正則表達式使用:

salt -E 'web1-(prod|devel)' test.ping

也可以在top.sls中使用正則表示:

base:
  'web1-(prod|devel)':
  - match: pcre  ## 指明匹配方式
  - webserver

lists使用:

salt -L 'web1,web2,web3' test.ping

IP地址使用:

[root@centos6 ~]# salt -S '192.168.2.0/24' test.ping 
minion.saltstack.com:
    True

Grains使用:

salt -G 'os:centos' test.ping 

也可以在top.sls中使用Grains表示:

base:
  'os:centos':
    - match: grain ## 指定匹配方式
    - init.env_init
    - zabbix-agent-linux.config
    - salt.agent

Pillar使用:

salt -I 'master:True' test.ping

salt分組

在使用 SaltStack 對主機進行批量管理的時候,因為不同的服務器組所做的業務功能不同,因此為了更加方便的管理,需要對主機進行分組管理

一. 編輯配置文件

[root@salt-master ~]# vim /etc/salt/master
nodegroups:
  group-1: G@os:Ubuntu

二. 分組方式

  • G -- 針對 Grains 做單個匹配,例如:G@os:Ubuntu
  • E -- 針對 minion 針對正則表達式做匹配,例如:E@web\d+.(dev|qa|prod).loc
  • P -- 針對 Grains 做正則表達式匹配,例如:P@os:(RedHat|Fedora|CentOS)
  • L -- 針對 minion 做列表匹配,例如:L@minion1.example.com,minion3.domain.com or bl*.domain.com
  • I -- 針對 Pillar 做單個匹配,例如:I@pdata:foobar
  • S -- 針對子網或是 IP 做匹配,例如:S@192.168.1.0/24 or S@192.168.1.100
  • R -- 針對客戶端范圍做匹配,例如: R@%foo.bar

salt 異步執行方法

[root@xxx ~]# salt --async test01 cmd.run "echo 'test'"
Executed command with job ID: 20150915151813222323
[root@xxx ~]# salt-run jobs.lookup_jid 20150915151813222323
Fabric:
  test

還有個-v參數在返回結果的同時,一同返回本次任務的jid,如果超時還是會返回jid的。

[root@test ~]# salt -v test01 test.ping
Executing job with jid 20150917172323566343
-------------------------------------------
test01:
  True

如果是調用saltapi來實現異步執行語句和獲取jid信息,參數可以這樣:

params = {'client':'local_async', 'fun':'test.echo', 'tgt':'test01', 'arg1':'hello'}
params = {'client':'runner', 'fun':'jobs.lookup_jid', 'jid': '20150827163231404925'}

salt-stakck 狀態查詢

  • 查看還在運行的程序:salt-run jobs.active
  • 查看以前的操作歷史記錄來:salt-run jobs.list_jobs
  • 查看minion支持的module列表的命令 salt '*' sys.list_modules
  • 查看CMD模塊下的所有function。salt '*' sys.list_functions cmd
  • 查看cmd 模塊的詳細用法。salt '*' sys.doc cmd

參考

補充一個線上的配置文件

interface: 192.168.56.11
ipv6: False
max_open_files: 65535
worker_threads: 5
timeout: 30
state_verbose: False
file_roots:
  base:
    - /data/db/salt/base/
  prod:
    - /data/db/salt/prod/
  test:
    - /data/db/salt/test/
pillar_roots:
  base:
    - /data/db/salt/pillar
log_file: /var/log/salt/master
log_level: warning

mysql.host: '192.168.56.13'
mysql.user: 'salt'
mysql.pass: '123456'
mysql.db: 'salt'
mysql.port: 3306
external_auth:
  pam:
    saltapi:
      - .*
      - '@runner'
      - '@jobs'
rest_cherrypy:
   port: 8088
   ssl_crt: /etc/pki/tls/certs/localhost.crt
   ssl_key: /etc/pki/tls/private/localhost_nopass.key

支持文檔

官方幫助文檔
官方github
saltstack 中文用戶組
Saltstack SLS文件解讀
[官方的 salt-states 倉庫地址] (https://github.com/saltstack/salt-states)

來自於社區的一些salt states例子:

https://github.com/blast-hardcheese/blast-salt-states
https://github.com/kevingranade/kevingranade-salt-state
https://github.com/uggedal/states
https://github.com/mattmcclean/salt-openstack/tree/master/salt
https://github.com/rentalita/ubuntu-setup/
https://github.com/brutasse/states
https://github.com/bclermont/states
https://github.com/pcrews/salt-data

文檔: http://docs.saltstack.com/topics/tutorials/starting_states.html
文檔: http://docs.saltstack.com/ref/states/writing.html
文檔: http://docs.saltstack.com/ref/states/ordering.html
文檔: http://www.ituring.com.cn/article/37783
文檔: http://docs.saltstack.com/topics/tutorials/starting_states.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM