自動化運維之saltstack

1.saltstack介紹

SaltStack是一個服務器基礎架構集中化管理平臺,SaltStack基於Python語言實現,也是基於C/S架構,結合輕量級消息隊列(ZeroMQ)與Python第三方模塊(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)構建,SaltStack整合了Puppet和Chef的功能,更適合大規模批量管理服務器,配置簡單。


三大主要功能:遠程執行、配置管理、雲管理


運行方式:local(本地)、Master/Minion(傳統方式)、Syndic(分佈式)、Salt SSH

saltstack官方網站

2.SaltStack工作原理

Saltstack使用Python開發,是一個非常簡單易用和輕量級的管理工具。由Master和Minion構成,通過ZeroMQ進行通信。

Saltstack的master端監聽4505與4506端口,4505爲salt的消息發佈系統,4506爲salt客戶端與服務端通信的端口;salt客戶端程序不監聽端口,客戶端啓動後,會主動連接master端註冊,然後一直保持該TCP連接,master通過這條TCP連接對客戶端控制,如果連接斷開,master對客戶端就無能爲力了。當然,客戶端若檢查到斷開後會定期的一直連接master端的。

salt-master服務啓動後會開啓兩個端口:4505和4506,minion沒有端口,通過“雙向密鑰交換”(可通過tree /etc/salt/pki命令查看)來實現安全管理。salt-master每執行一條命令,所有minion均可收到。

3.  saltstack安裝

saltstack支持多種操作系統,如centos、redhat、debian、ubuntu、FreeBSD等,以及windows(僅支持minion)

安裝 epel--------提供2015版本的salt

centos 6 64

rpm -Uvh

http://mirrors.yun-idc.com/epel/6Server/x86_64/epel-release-6-8.noarch.rpm

 

masterminion端都需要安裝

安裝完成後在master端執行 yum -y install salt-master

minion端執行yum -y install salt-minion

安裝完環境:

主機名

IP

salt-master

192.168.132.20

salt-minion01

192.168.132.11

salt-minion01

192.168.132.10

minion端配置使其指向master

vim /etc/salt/minion

添加   master: 192.168.132.20 master IP,實際生產環境最好爲域名。

master端啓動:/etc/init.d/salt-master start

   開機自啓動:chkconfig salt-master on

minion端啓動:/etc/init.d/salt-minion start

  開機自啓動:chkconfig salt-minion on

安裝完後查看salt信息

[root@salt-master app]# salt '*' test.versions_report

salt-minion02:

               Salt: 2015.5.10

             Python: 2.6.6 (r266:84292, Aug 18 2016, 15:13:37)

             Jinja2: 2.2.1

           M2Crypto: 0.20.2

     msgpack-python: 0.4.6

       msgpack-pure: Not Installed

           pycrypto: 2.0.1

            libnacl: Not Installed

             PyYAML: 3.10

              ioflo: Not Installed

              PyZMQ: 14.3.1

               RAET: Not Installed

                ZMQ: 3.2.5

               Mako: Not Installed

            Tornado: Not Installed

            timelib: Not Installed

           dateutil: 1.4.1

salt-minion01:

               Salt: 2015.5.10

             Python: 2.6.6 (r266:84292, Aug 18 2016, 15:13:37)

             Jinja2: 2.2.1

           M2Crypto: 0.20.2

     msgpack-python: 0.4.6

       msgpack-pure: Not Installed

           pycrypto: 2.0.1

            libnacl: Not Installed

             PyYAML: 3.10

              ioflo: Not Installed

              PyZMQ: 14.3.1

               RAET: Not Installed

                ZMQ: 3.2.5

               Mako: Not Installed

            Tornado: Not Installed

            timelib: Not Installed

           dateutil: 1.4.1

      3.1  salt-key

查詢幫助 salt-key --help

常用參數

-a -A -r -R -d -D -Y

查看key  salt-key

接收minion端的key salt-key -A  -y  ---》接收所有的minion且無需交互。接收完成後查看:

[root@salt-master master]# salt-key

Accepted Keys:

salt-minion01

salt-minion02

Denied Keys:

Unaccepted Keys:

Rejected Keys:

 

測試

[root@salt-master ~]# salt '*'  test.ping

salt-minion01:

    True

salt-minion02:

    True

4.   saltstack認證原理

salt的數據傳輸是通過AES加密,masterminion之間在通信前,需要進行認證。通過認證的方式保證安全性,完成一次認證後,master就可以自由的控制minion來完成各項工作了。

1.          minion在第一次啓動時,會在/etc/salt/pki/minion下生成minion.pemprivate key)和minion.pubpublic key),然後將minion.pub發送給master

2.         master在第一次啓動時,會在/etc/salt/pki/master下生成master.pemmaster.pub。通過salt-key接收minionpublic key,在master/etc/salt/pki/master/minions目錄下存放,以minion id命名的public key,同時minion會保存一份master public key/etc/salt/pki/minion_master.pub

認證小結:

minion將自己的公鑰發送給master

master認證後會將自己的公鑰放置在minion

由於這裏是測試環境,masterminion端都關閉了防火牆及selinux。不然master可能無法接收minion端的key

 

5.  saltstack遠程執行

遠程執行是saltstack的核心功能之一。主要使用salt模塊可以批量給選定的minion端執行相應的命令,並獲得返回結果。

  salt '*' test.ping   *代表所有,test表示模塊,ping表示模塊下的方法。

salt '*' disk.usage  查看磁盤使用情況

saltstack可以使用cmd.run(非常重要) 模塊遠程執行shell命令

//讓所有minion節點運行uptime命令

[root@salt-master ~]# salt '*' cmd.run 'uptime'

salt-minion02:

     10:30:44 up 1 day, 11:53,  1 user,  load average: 0.00, 0.00, 0.00

salt-minion01:

     10:30:45 up 1 day, 11:53,  1 user,  load average: 0.00, 0.00, 0.00

#saltstack提供了大量的命令模塊可以使用

#cmd.run可以執行所有的命令,不建議在生產環境中頻繁使用。

6.  saltstack配置管理

salt通過狀態模塊來識別配置描述文件state狀態文件,格式是YAML擴展名,後綴是.sls

6.1              YAML基礎語法

YAML:

1.    縮進(層級關係) 2個空格,不能使用tab

2.   冒號  keyvalue ----》以冒號結尾,以冒號爲路徑的除外,其他必須有空格

3.   短橫線

 表示列表項,短橫線加一個空格  - list1

-       list2

6.2                  配置文件

 master端配置文件中有說明配置文件寫在什麼地方。

cat /etc/salt/master

# file_roots:

#   base:           ----》基礎環境

#     - /srv/salt/   

#   dev:                   ---》開發環境

#     - /srv/salt/dev/services

#     - /srv/salt/dev/states

#   prod:                 -----》生產環境

#     - /srv/salt/prod/services

#     - /srv/salt/prod/states

這裏啓用測試環境

file_roots:      ----》打頭寫

  base:           ---》縮進 2個空格

    - /srv/salt      ----4個空格,文件路徑

啓用後重啓master服務,創建目錄 mkdir -p /srv/salt

在實際成產環境中可以根據業務分別創建不同的文件夾,然後在對應的裏面寫。

6.3                實例

這裏在salt下創建app目錄,然後在app目錄中寫配置文件。

[root@salt-master app]# pwd

/srv/salt/app

 

vim vsftpd.sls

[root@salt-master app]# cat vsftpd.sls

vsftpd_install:

  pkg.installed:   ------>pkg模塊  開頭兩個空格

    - names:   ------》下面接多個list  開頭4個空格

     - vsftpd

     - httpd

7.  狀態管理

7.1              saltstack狀態

配置文件寫好後

執行 salt '*'  state.sls app.vsftpd env=base 默認爲base環境

minion端安裝完成,如下,如已經安裝則忽略。

[root@salt-master salt]# salt '*'  cmd.run 'rpm -qa|grep vsftpd'

salt-minion01:

    vsftpd-2.2.2-24.el6.x86_64

salt-minion02:

    vsftpd-2.2.2-24.el6.x86_64

[root@salt-master salt]# salt '*'  cmd.run 'rpm -qa|grep httpd'

salt-minion01:

    httpd-tools-2.2.15-60.el6.centos.6.x86_64

    httpd-2.2.15-60.el6.centos.6.x86_64

salt-minion02:

    httpd-2.2.15-60.el6.centos.6.x86_64

    httpd-tools-2.2.15-60.el6.centos.6.x86_64

如果要安裝後服務啓動可以繼續編寫配置文件,如下:

[root@salt-master app]# cat vsftpd.sls

vsftpd_install:

  pkg.installed:

    - names:

      - vsftpd

      - httpd

 

vsftpd_service:

  service.running:

    - name: vsftpd

    - enable: True

執行salt '*'  state.sls app.vsftpd

查看vsftp服務狀態,已經啓動

[root@salt-master app]# salt '*'  cmd.run 'service vsftpd status'

salt-minion01:

    vsftpd (pid 12399) is running...

salt-minion02:

    vsftpd (pid 12721) is running...

在實際生產環境中執行後狀態是不能回退的,所以可以在執行前,進行檢查

salt '*'  state.sls app.vsftpd test=True


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