States是SaltStack中的配置語言,在平常進行配置管理時須要編寫大量的States文件。好比咱們須要安裝一個包,而後管理一個配置文件,最後保證某個服務正常運行。前端
1.查看全部states列表web
# 要查看Minion支持的全部states列表 [root@salt-master-1 ~]# salt 'salt-minion-1' sys.list_state_modules salt-minion-1: - acl - alias - alternatives - archive - artifactory - at - augeas - blockdev - buildout - cloud - cmd - composer - cron - disk - environ - event - file - gem - gnomedesktop - grafana - grains - group - hipchat - host - http - incron - ini - iptables - jboss7 - keyboard - kmod - libvirt - locale - lvm - lxc - modjk - modjk_worker - module - mongodb_database - mount - network - openstack_config - pagerduty - pip - pkg - pkgng - pkgrepo - powerpath - pyenv - quota - rbenv - rvm - salt - schedule - serverdensity_device - service - slack - smtp - ssh_auth - ssh_known_hosts - stateconf - status - supervisord - sysctl - syslog_ng - test - timezone - user - vbox_guest - virtualenv - winrepo
2.查看指定States的全部functionsql
# 查看file.states的全部function [root@salt-master-1 ~]# salt 'salt-minion-1' sys.list_state_functions file salt-minion-1: - file.absent - file.accumulated - file.append - file.blockreplace - file.comment - file.copy - file.directory - file.exists - file.managed - file.missing - file.mknod - file.mod_run_check_cmd - file.patch - file.prepend - file.recurse - file.rename - file.replace - file.serialize - file.symlink - file.touch - file.uncomment # 指定查看states用法 [root@salt-master-1 ~]# salt 'salt-minion-1' sys.state_doc file # 查看指定states的指定function用法 [root@salt-master-1 ~]# salt 'salt-minion-1' sys.state_doc file.absent
3.states的流程mongodb
編寫top.sls文件(非必須)docker
編寫state.sls文件shell
在大規模的配置管理工做中,咱們須要編寫大量的states.sls文件。top.sls是states系統的入口文件,它在大規模配置管理工做中負責指定哪些設備調用哪些states.sls文件。好比咱們維護着一套LAMP架構,咱們編寫不少states.sls文件,這個時候我須要一鍵部署整個LAMP環境,這裏就須要states.sls的top.sls入口文件去指定web服務器和DB機器分別起引用哪些states.sls文件。服務器
[root@salt-master-1 ~]# cat /srv/salt/one.sls /tmp/foo.conf: #id file.managed: #file states 的managed function - source: salt://foo.conf #文件來源 - user: root #文件屬主 - group: root #文件屬組 - mode: 644 #文件屬性 - backup: minion #備份原文件 [root@salt-master-1 ~]# echo "SaltStack is good" >> /srv/salt/foo.conf [root@salt-master-1 ~]# salt 'salt-minion-1' state.sls one salt-minion-1: ---------- ID: /tmp/foo.conf Function: file.managed Result: True Comment: File /tmp/foo.conf updated Started: 07:40:18.079922 Duration: 14.378 ms Changes: ---------- diff: New file mode: 0644 Summary ------------ Succeeded: 1 (changed=1) Failed: 0 ------------ Total states run: 1
以上列舉了對Minion機器的簡單文件管理。下面來介紹使用top.sls入口文件同時對多臺機器進行一個簡單的配置管理。架構
[root@salt-master-1 ~]# cat /srv/salt/top.sls base: # base環境 '*': # Target - one # 引用one.sls或者one/init.sls states文件 'salt-minion-1': # Target - two # 引用two.sls或者two/init.sls states文件 'salt-minion-2': # Target - three # 引用three.sls或者three/init.sls states文件
而後咱們新建三個states文件:one.sls、two.sls、three.sls,最後咱們就可使用state.highstate命令同時對salt-minion-1和salt-minion-2兩臺機器進行配置管理。app
4.執行結果處理composer
Return組件能夠理解爲SaltStack系統對執行Minion返回後的數據進行存儲或者返回給其它程序,它支持多種存儲方式,好比用Mysql、Mongodb、Redis等,經過Return咱們能夠對SaltStack的每次記錄進行操做記錄,對之後日誌審計提供數據來源。
[root@salt-master-1 ~]# salt 'salt-minion-1' sys.list_returners salt-minion-1: - carbon - couchdb - etcd - hipchat - local - local_cache - multi_returner - slack - smtp - sqlite3 - syslog
Return流程:Return是在Master端觸發任務,而後Minion接受處理任務後直接與Return存儲服務器創建鏈接,而後把數據Return到存儲服務器。關於這點,要注意整個過程都是Minion端操做存儲服務器,因此要確保Minion端的配置跟依賴包是正確的。
5.jobs
在SaltStack裏面執行任何一個操做都會在Master上產生一個jid號。Minion端會cache目錄下的proc目錄建立一個以jid爲名稱的文件,這個文件裏面的內容就是這次操做的記錄,當操做處理完成後該文件會自動刪除。而Master端會記錄每次操做的詳細信息,這個記錄都是存到在Master端cache目錄下jobs下。下面經過實例瞭解平常job管理,目前SaltStack提供salt-run跟module兩種方式來管理job
1)經過salt-run來管理job
[root@salt-master-1 ~]# salt-run -d | grep jobs 'jobs.active:' # 查看當前正在運行的jobs Return a report on all actively running jobs from a job id centric salt-run jobs.active 'jobs.list_job:' # 指定jid查看jobs詳細信息 salt-run jobs.list_job 20130916125524463507 'jobs.list_jobs:' # 查看全部jobs信息 List all detectable jobs and associated functions salt-run jobs.list_jobs 'jobs.lookup_jid:' # 指定jid查詢jobs結果 salt-run jobs.lookup_jid 20130916125524463507 salt-run jobs.lookup_jid 20130916125524463507 outputter=highstate 'jobs.print_job:' # 指定jid查詢jobs詳細信息 salt-run jobs.print_job 20130916125524463507
2)經過SaltStack Module來管理job
salt-run對job管理功能比較侷限,不支持kill某個job,下面介紹SaltStack自帶的Module來管理job
[root@salt-master-1 ~]# salt \* sys.doc saltutil | grep job 'saltutil.find_cached_job:' # 查詢job cache信息 Return the data for a specific cached job id salt '*' saltutil.find_cached_job <job id> 'saltutil.find_job:' # 查看job信息 Return the data for a specific job id salt '*' saltutil.find_job <job id> 'saltutil.kill_job:' # 殺掉job Sends a kill signal (SIGKILL 9) to the named salt job's process salt '*' saltutil.kill_job <job id> salt '*' saltutil.runner jobs.list_jobs 'saltutil.signal_job:' # 發送指定信號 Sends a signal to the named salt job's process salt '*' saltutil.signal_job <job id> 15 'saltutil.term_job:' # 刪掉job Sends a termination signal (SIGTERM 15) to the named salt job's process salt '*' saltutil.term_job <job id>
6.Mine
Mine是SaltStack收集Minion數據存儲到Master的一個組件,它的功能與Grains有些相似,Mine能夠指定任何Minion模塊去採集數據。可是Master只能存儲Minion收集上來的最近一段的數據,Mine的主要應用場景是配合前端負載均衡動態獲取Mine彙報信息,來動態生成配置文件。
例如:官網經過mine.get指定業務設備的網卡地址動態生成haproxy.cfg文件。Mine還支持get docker容器的地址,可簡單實現動態添加業務。
Mine的配置目前支持兩種方式,第一種是經過Minion配置文件中定義,另外一種是經過模塊的方式去下發Mine採集任務。