saltstack第一波《快速入門》

saltstack課程總結

第1章 saltstack快速入門

1.1 快速安裝

項目                   VM1: saltstack-node1.example.com     VM2: saltstack-node2.example.com

安裝角色           master && minion                                  minion

IPeth0)       10.0.0.21                                              10.0.0.22

網關(eth0)   10.0.0.2

DNS                     8.8.8.8,114.114.114.114

系統版本           CentOS release 6.7 (Final)

內核版本           2.6.32-573.el6.x86_64

防火牆              

selinux    

1.1.1 系統環境

1.1.1.1 查看命令

hostname
cat /etc/redhat-release
uname -r
/etc/init.d/iptables status
getenforce
ifconfig eth0 |awk -F "[ :]+" 'NR==2 {print $4}'
route -n
cat /etc/resolv.conf


1.1.1.2 好內網DNS解析

臺機器時做好內網DNS解析。

cat >/etc/hosts<<EOF  
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.21 saltstack-node1.example.com
10.0.0.22 saltstack-node2.example.com
EOF

1.1.2 安裝master與minion

臺機器先安裝epel

wget -O /etc/yum.repos.d/epel.repo 
http://mirrors.aliyun.com/repo/epel-6.repo

1.1.2.1 saltstack-node1

時安裝masterminion

yum install -y salt-master salt-minion
rpm -qa salt-master salt-minion

 

安裝啓動服務。

/etc/init.d/salt-master start
chkconfig salt-master on
chkconfig --list salt-master
 
/etc/init.d/salt-minion start
chkconfig salt-minion on
chkconfig --list salt-minion

1.1.2.2 saltstack-node2

只安裝minion端。
yum install -y salt-minion
rpm -qa salt-minion

 

安裝啓動服務。

/etc/init.d/salt-minion start
chkconfig salt-minion on
chkconfig --list salt-minion

1.1.3 安裝後檢查

1.1.3.1 saltstack-node1

[root@saltstack-node1 ~]# cd /etc/salt/
[root@saltstack-node1 salt]# ll#檢查,會自動生成如下文件
總用量 72
-rw-r----- 1 root root 29543 2016-03-23 06:24 master#master端主配置文件
-rw-r----- 1 root root 26365 2016-03-23 06:24 minion#minion端主配置文件
drwxr-xr-x 2 root root  4096 2016-08-04 12:42 minion.d
-rw-r--r-- 1 root root    27 2016-08-04 12:42 minion_id#minion端的ID
drwxr-xr-x 4 root root  4096 2016-08-04 12:42 pki#存放密鑰的目錄
[root@saltstack-node1 salt]# cat minion_id #主機的FQDN名,每個minion端都有
saltstack-node1.example.com

1.1.3.2 saltstack-node2

[root@saltstack-node2 ~]# cd /etc/salt/
[root@saltstack-node2 salt]# ll#檢查,會自動生成如下的文件
總用量 40
-rw-r----- 1 root root 26365 2016-03-23 06:24 minion#minion端主配置文件
drwxr-xr-x 2 root root  4096 2016-08-04 12:42 minion.d
-rw-r--r-- 1 root root    27 2016-08-04 12:42 minion_id#minion端的ID
drwxr-xr-x 3 root root  4096 2016-08-04 12:42 pki#存放密鑰的目錄
 
[root@saltstack-node2 salt]# cat minion_id #主機的FQDN名,每個minion端都有
saltstack-node2.example.com

1.1.4 master與minion端的認證

minion必須經過master認證才能管理

saltstack-node2

[root@saltstack-node2 ~]# cd /etc/salt/
[root@saltstack-node2 salt]# vim minion
master: saltstack-node1.example.com
#指定master端是誰,可寫FQDN或IP地址,第16行
 
[root@saltstack-node2 salt]# /etc/init.d/salt-minion restart
#重啓服務,修改了這一步,還不夠,還需要master端認證才行(即相互交換公鑰)
 
[root@saltstack-node2 salt]# cd pki/minion/
[root@saltstack-node2 minion]# ll
-r-------- 1 root root 1679 2016-08-04 13:26 minion.pem#minion的私鑰
-rw-r--r-- 1 root root  451 2016-08-04 13:26 minion.pub#minion的公鑰
#重啓服務後,會自動生成一對密鑰,認證時,公鑰會發給master端,minion端也會接收master端的公鑰

saltstack-node1

[root@saltstack-node1 ~]# cd /etc/salt/pki/master/
[root@saltstack-node1 master]# ll
-r-------- 1 root root 1675 2016-08-04 12:40 master.pem#master的私鑰
-rw-r--r-- 1 root root  451 2016-08-04 12:40 master.pub#master的公鑰
drwxr-xr-x 2 root root 4096 2016-08-04 13:39 minions#存放所有的minion端公鑰
drwxr-xr-x 2 root root 4096 2016-08-04 12:40 minions_autosign
drwxr-xr-x 2 root root 4096 2016-08-04 12:40 minions_denied
drwxr-xr-x 2 root root 4096 2016-08-04 13:39 minions_pre
drwxr-xr-x 2 root root 4096 2016-08-04 12:40 minions_rejected

saltstack-node1master認證mirror端,必須要接受mirror,才能管理它

[root@saltstack-node1 ~]# cd /etc/salt/pki/master/
[root@saltstack-node1 master]# salt-key #可以看到,只有一個minion端,但還未接受
Accepted Keys:
Denied Keys:
Unaccepted Keys:
saltstack-node2.example.com
Rejected Keys:
 
[root@saltstack-node1 master]# salt-key -a saltstack-node2.example.com
# -a添加特定的minion端
The following keys are going to be accepted:
Unaccepted Keys:
saltstack-node2.example.com
Proceed? [n/Y] Y#輸入Y同意
Key for minion saltstack-node2.example.com accepted.
 
[root@saltstack-node1 master]# salt-key #再查看,接受minion端了
Accepted Keys:
saltstack-node2.example.com
Denied Keys:
Unaccepted Keys:
Rejected Keys:


1.1.5 認證完成後檢查(不重要)

認證的過程,相互交換公鑰的過程。

 

查看minion公鑰的內容

[root@saltstack-node1 ~]# cd /etc/salt/pki/master/
[root@saltstack-node1 master]# cat minions/saltstack-node2.example.com 
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA062YmAq9L3OXZytSosco
OOFLBTjhbpJTInwLmNQCU+8+o6ataFaKavNnbOlVmm/3TuZ/So5EGWekaxgtAnFQ
uRbv2k+l358uPHQ3X5mf2Hr2d1lI1hMEmBDz+X/zf7TD4KQ/0k3UdMe0DktniBYQ
J7L4F4Jw4xqDe0fsv6Z3QrzOQeadvD8ItGtE/oDJ1g5158Fw4yaLU0ixNfMBak8R
dA1Cw9hxAy4OYXMr+7meld0lEI2WinnLy3bw2fGiw50MFnw8YVFlOWTJ30mqy5kO
GaJ/70RxyQ3adPeSeNNYiqEwhw7YtJGygcQsfzhYL9aLDX7HTXuwxpM0g3Jmn18V
jQIDAQAB
-----END PUBLIC KEY-----
#可以發現,它們的內容是一樣的
[root@saltstack-node2 ~]# cd /etc/salt/pki/minion/ 
[root@saltstack-node2 minion]# cat minion.pub 
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA062YmAq9L3OXZytSosco
OOFLBTjhbpJTInwLmNQCU+8+o6ataFaKavNnbOlVmm/3TuZ/So5EGWekaxgtAnFQ
uRbv2k+l358uPHQ3X5mf2Hr2d1lI1hMEmBDz+X/zf7TD4KQ/0k3UdMe0DktniBYQ
J7L4F4Jw4xqDe0fsv6Z3QrzOQeadvD8ItGtE/oDJ1g5158Fw4yaLU0ixNfMBak8R
dA1Cw9hxAy4OYXMr+7meld0lEI2WinnLy3bw2fGiw50MFnw8YVFlOWTJ30mqy5kO
GaJ/70RxyQ3adPeSeNNYiqEwhw7YtJGygcQsfzhYL9aLDX7HTXuwxpM0g3Jmn18V
jQIDAQAB
-----END PUBLIC KEY-----

 

查看master公鑰的內容

[root@saltstack-node2 ~]# cd /etc/salt/pki/minion/
[root@saltstack-node2 minion]# cat minion_master.pub #注意名字的變化
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxQv0en2AJhWq/1dh67Kz
3zuH1G307x0vyJqCg3v7CaNwbKgot4+Aiq+gYBYFQ3uDvoJSYF0bfE5l0ht+s7s8
p2p7nrrWDQfyd9ph5HL4xtXQIltPhdONRsNZbahmB4C4KkHQ5MUSdG1zXaqVBHWk
1nlwtwUd/3A2iOiMtNOx2mhuSTPb1DlPfKcl2uNDbEBc4YLMcofh7HDW5Z7MNMMz
ijuOkilaMQcVDCY2PEI+iwrFzPaV5H6YuztFGiF/pHpsIlVFDN4C+QPInQs6ACQq
CsHGoUHHePCAqVPtA0F2DsW6iFvNvksFjclzJniVjEpmENwapnB8YogHBZrxYWim
5wIDAQAB
-----END PUBLIC KEY-----
#可以發現,它們的內容是一樣的
[root@saltstack-node1 ~]# cd /etc/salt/pki/master/
[root@saltstack-node1 master]# cat master.pub 
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxQv0en2AJhWq/1dh67Kz
3zuH1G307x0vyJqCg3v7CaNwbKgot4+Aiq+gYBYFQ3uDvoJSYF0bfE5l0ht+s7s8
p2p7nrrWDQfyd9ph5HL4xtXQIltPhdONRsNZbahmB4C4KkHQ5MUSdG1zXaqVBHWk
1nlwtwUd/3A2iOiMtNOx2mhuSTPb1DlPfKcl2uNDbEBc4YLMcofh7HDW5Z7MNMMz
ijuOkilaMQcVDCY2PEI+iwrFzPaV5H6YuztFGiF/pHpsIlVFDN4C+QPInQs6ACQq
CsHGoUHHePCAqVPtA0F2DsW6iFvNvksFjclzJniVjEpmENwapnB8YogHBZrxYWim
5wIDAQAB
-----END PUBLIC KEY-----

 

同理們還可以再把node1minion加進來,即自己master)給自己minion)認證也是可以的。樣我就有兩個minion和一個master

結果如下:

[root@saltstack-node1 ~]# salt-key #有兩個minion端
Accepted Keys:
saltstack-node1.example.com
saltstack-node2.example.com
Denied Keys:
Unaccepted Keys:
Rejected Keys:

 

1.1.6 salt-key命令的用法

[root@saltstack-node1 ~]# salt-key --help#查命令的幫助
-a ACCEPT, --accept=ACCEPT#接受指定的minion端
-A, --accept-all    Accept all pending keys#接受所有的minion端
-r REJECT, --reject=REJECT#拒絕指定的minion端
-R, --reject-all    Reject all pending keys#拒絕所有的minion端
-d DELETE, --delete=DELETE#刪除指定的minion端
-D, --delete-all    Delete all keys#刪除所有的minion端
-L, --list-all      List all public keys.#列出所有的minion端(salt-key)
-P, --print-all     Print all public keys#打印所有的公鑰

 

1.2 遠程執行

1.2.1 test.ping

[root@saltstack-node1 ~]# salt '*' test.ping
返回true,代表master能管理minion
salt是一個固定的關鍵字
*代表要執行命令的目標,*代表匹配所有
test是一個模塊
.ping代表引用test模塊裏的一個方法
官方解釋:salt.modules.test.ping()
Used to make sure the minion is up and responding. Not an ICMP ping.

 

1.2.2 cmd.run

1.2.2.1 1:查看磁盤分區

[root@saltstack-node1 ~]# salt '*' cmd.run 'df -h'
#在所有的minion端執行命令
cmd是一個模塊
.run代表引用cmd模塊裏的一個方法
'df -h'代表Linux裏的shell命令,命令要用單引號引起來
Execute the passed command(被傳遞的命令) and return the output as a string
執行一個被傳遞過去的命令,並以字符串的形式返回輸出
cmd.run,這個模塊的功能非常強大,可以執行所有的linux命令,在生產環境中,慎用!

 

1.2.2.2 2查看IP

[root@saltstack-node1 ~]# salt '*' cmd.run 'ifconfig eth0|grep "inet addr:"'
#查看所有minion端的ip

 

1.2.2.3 3查看指定minion

[root@saltstack-node1 ~]# salt 'saltstack-node1.example.com' cmd.run 'uptime'
#指定固定的管理目標(minion),這裏寫的是minion_id


1.3 配置管理

1.3.1 指定file_roots

[root@saltstack-node1 ~]# cd /etc/salt/
[root@saltstack-node1 salt]# vim master#指定base的文件根路徑
#直接搜索【file_root】,把註釋行去掉,注意寫法,多少個空格是固定好的!
#兩個空格爲一個級別
file_roots:
  base:
    - /srv/salt
[root@saltstack-node1 salt]# /etc/init.d/salt-master restart#修改後要重啓

1.3.2 編寫top.sls

[root@saltstack-node1 salt]# mkdir -p /srv/salt/#創建base的文件根路徑
[root@saltstack-node1 salt]# cd /srv/salt/
[root@saltstack-node1 salt]# vim top.sls #指定狀態描述文件【apache】
base:
  '*':#對所有的minion端生效
    - apache#文件名,可以不寫後綴sls

1.3.3 創建狀態描述文件

[root@saltstack-node1 salt]# vim apache.sls #狀態描述文件【apache】的內容
apache-service:#ID名稱
  pkg.installed:#分別是模塊.方法
    - names:#指定包名,下面指定兩個,注意有s
      - httpd#安裝httpd包
      - httpd-devel#安裝httpd-devel包

 

1.3.4 遠程執行

[root@saltstack-node1 salt]# salt '*' state.highstate#遠程安裝httpd包

saltstack-node1.example.com:

----------

          ID: apache-service#ID名稱

    Function: pkg.installed#功能:模塊.方法

        Name: httpd#1軟件包

      Result: True#安裝成功

     Comment: Package httpd is already installed.

     Started: 17:37:28.053740

    Duration: 559.351 ms

     Changes:   

----------

          ID: apache-service#ID名稱

    Function: pkg.installed#功能:模塊.方法

        Name: httpd-devel#2軟件包

      Result: True#安裝成功

     Comment: Package httpd-devel is already installed.

     Started: 17:37:28.613244

    Duration: 0.504 ms

     Changes:   

 

Summary

------------

Succeeded: 2#成功,兩個

Failed:    0#失敗,無

------------

Total states run:     2

saltstack-node2.example.com:

----------

          ID: apache-service

    Function: pkg.installed

        Name: httpd

      Result: True

     Comment: Package httpd is already installed.

     Started: 17:37:38.054029

    Duration: 551.308 ms

     Changes:   

----------

          ID: apache-service

    Function: pkg.installed

        Name: httpd-devel

      Result: True

     Comment: Package httpd-devel is already installed.

     Started: 17:37:38.605549

    Duration: 0.42 ms

     Changes:   

 

Summary

------------

Succeeded: 2

Failed:    0

------------

Total states run:     2

1.3.4.1 檢查

[root@saltstack-node1 salt]# rpm -qa httpd*#檢查是否成功安裝
httpd-2.2.15-54.el6.centos.x86_64
httpd-devel-2.2.15-54.el6.centos.x86_64
httpd-tools-2.2.15-54.el6.centos.x86_64
 
[root@saltstack-node2 ~]# rpm -qa httpd*#檢查是否成功安裝
httpd-devel-2.2.15-54.el6.centos.x86_64
httpd-tools-2.2.15-54.el6.centos.x86_64
httpd-2.2.15-54.el6.centos.x86_64

1.3.5 修改狀態描述文件

安裝好軟件包後,我們可以監控軟件的運行狀態,強制指定軟件必須運行。

[root@saltstack-node1 salt]# cd /srv/salt/
[root@saltstack-node1 salt]# cat apache.sls#修改
apache-service:
  pkg.installed:
    - names:
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True
 
[root@saltstack-node1 salt]# salt '*' state.highstate#遠程執行
#只看關鍵部分
saltstack-node2.example.com:
----------
          ID: apache-service
    Function: service.running
        Name: httpd
      Result: True
     Comment: Service httpd has been enabled, and is running
     Started: 17:53:42.105291
    Duration: 171.491 ms
     Changes:   
              ----------
              httpd:
                  True
[root@saltstack-node1 salt]# netstat -tunlp|grep 80
tcp        0      0 :::80       :::*                LISTEN      32449/httpd  
#所有的minion端全部啓動apache
[root@saltstack-node2 ~]# netstat -tunlp |grep 80
tcp        0      0 :::80       :::*                LISTEN      3661/httpd

 

 

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