自动化运维之saltstack

Saltstack官方网站:https://docs.saltstack.com/en/latest


Saltstack运行方式

【1】Local

【2】Mastr/Minion

【3】Salt SSH


Saltstack三大功能

【1】远程执行

【2】配置管理

【3】云管理(阿里云、亚马逊云)


[root@linux-node1 ~]# yum -y install salt-master salt-minion[root@linux-node1 ~]# chkconfig --level 3 salt-master on[root@linux-node1 ~]# chkconfig --level 3 salt-minion on[root@linux-node1 ~]# chkconfig --list salt-mastersalt-master     0:off   1:off   2:on    3:on    4:on    5:on    6:off[root@linux-node1 ~]# chkconfig --list salt-minionsalt-minion     0:off   1:off   2:on    3:on    4:on    5:on    6:off[root@linux-node1 ~]# /etc/init.d/salt-master startStarting salt-master daemon:                               [  OK  ][root@linux-node1 ~]# ps -ef|grep "salt-master"|grep -v "grep"root      1168     1  0 09:53 ?        00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -droot      1169  1168  2 09:53 ?        00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -droot      1170  1168  0 09:53 ?        00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -droot      1171  1168  0 09:53 ?        00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -droot      1172  1168  0 09:53 ?        00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -droot      1177  1172  2 09:53 ?        00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -droot      1180  1172  2 09:53 ?        00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -droot      1183  1172  2 09:53 ?        00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -droot      1184  1172  2 09:53 ?        00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -droot      1187  1172  2 09:53 ?        00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -droot      1192  1172  0 09:53 ?        00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -d[root@linux-node1 ~]# vim /etc/salt/minion16 master: 192.168.100.133[root@linux-node1 ~]# /etc/init.d/salt-minion startStarting salt-minion daemon:                               [  OK  ][root@linux-node1 ~]# ps -ef|grep "salt-minion"|grep -v "grep"root      1817     1  0 10:01 ?        00:00:00 /usr/bin/python2.6 /usr/bin/salt-minion -d[root@linux-node2 ~]# yum -y install salt-minion[root@linux-node2 ~]# chkconfig --level 3 salt-minion on[root@linux-node2 ~]# chkconfig --list salt-minionsalt-minion     0:off   1:off   2:on    3:on    4:on    5:on    6:off[root@linux-node2 ~]# vim /etc/salt/minion16 master: 192.168.100.133[root@linux-node2 ~]# /etc/init.d/salt-minion startStarting salt-minion daemon:                               [  OK  ][root@linux-node2 ~]# ps -ef|grep "salt-minion"|grep -v "grep"root      1825     1  2 10:01 ?        00:00:00 /usr/bin/python2.6 /usr/bin/salt-minion -d[root@linux-node1 ~]# ll /etc/salt/pki/master/total 28-r-------- 1 root root 1679 2017-03-15 09:53 master.pem-rw-r--r-- 1 root root  451 2017-03-15 09:53 master.pubdrwxr-xr-x 2 root root 4096 2017-03-15 09:53 minionsdrwxr-xr-x 2 root root 4096 2017-03-15 09:53 minions_autosigndrwxr-xr-x 2 root root 4096 2017-03-15 09:53 minions_denieddrwxr-xr-x 2 root root 4096 2017-03-15 10:01 minions_predrwxr-xr-x 2 root root 4096 2017-03-15 09:53 minions_rejected[root@linux-node1 ~]# ll /etc/salt/pki/minion/total 8-r-------- 1 root root 1679 2017-03-15 10:01 minion.pem-rw-r--r-- 1 root root  451 2017-03-15 10:01 minion.pub[root@linux-node1 ~]# tree /etc/salt/pki/master//etc/salt/pki/master/├── master.pem├── master.pub├── minions├── minions_autosign├── minions_denied├── minions_pre│   ├── linux-node1.example.com│   └── linux-node2.example.com└── minions_rejected5 directories, 4 files[root@linux-node1 ~]# salt-keyAccepted Keys:Denied Keys:Unaccepted Keys:linux-node1.example.comlinux-node2.example.comRejected Keys:[root@linux-node1 ~]# salt-key -a linux*The following keys are going to be accepted:Unaccepted Keys:linux-node1.example.comlinux-node2.example.comProceed? [n/Y] YKey for minion linux-node1.example.com accepted.Key for minion linux-node2.example.com accepted.[root@linux-node1 ~]# tree /etc/salt/pki/master//etc/salt/pki/master/├── master.pem├── master.pub├── minions│   ├── linux-node1.example.com│   └── linux-node2.example.com├── minions_autosign├── minions_denied├── minions_pre└── minions_rejected5 directories, 4 files[root@linux-node1 ~]# file /etc/salt/pki/master/minions/linux-node1.example.com/etc/salt/pki/master/minions/linux-node1.example.com: ASCII text[root@linux-node1 ~]# cat /etc/salt/pki/master/minions/linux-node1.example.com-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1AFIXzVYfy1UnQD+907YBpzkxUuO5u5t5ZTufVyRcGT96vaIznEdHEQzO9yq9CFiy8OEzEhP3ern3UiDKW6J139rgDutlhGuN9IIjRipmmrmzgiGjIS0AhJwBcui0ljgmE6+tpvmbPI7CqQehRl5XCDiSGwgYpPFd7AhNiyHbkcRYCqMflrapzIsVZtiunt4QetIth0I3GlpRDyhioAldo84RYRHGqBS19vs+WKI/Dqf46TUUwGf98oyLoG1zzcTOuJtgO2iFWZKbZErjrwElwyJxr/KA2rdQs9R5Sf3GW66O7poNCzk8AhrRETIN7HO80I4y+TJ5SuHHLt1IHOGvQIDAQAB-----END PUBLIC KEY-----[root@linux-node1 ~]# cd /etc/salt/pki/master/[root@linux-node1 master]# salt '*' test.pinglinux-node1.example.com:    Truelinux-node2.example.com:    True[root@linux-node1 master]# salt '*' cmd.run 'uptime'linux-node1.example.com:     10:20:18 up 54 min,  1 user,  load average: 0.03, 0.01, 0.00linux-node2.example.com:     10:20:18 up 56 min,  1 user,  load average: 0.00, 0.19, 0.17[root@linux-node1 master]# vim /etc/salt/master416 file_roots:417   base:418     - /srv/salt[root@linux-node1 master]# mkdir /srv/salt[root@linux-node1 master]# /etc/init.d/salt-master restartStopping salt-master daemon:                               [  OK  ]Starting salt-master daemon:                               [  OK  ][root@linux-node1 master]# cd /srv/salt/[root@linux-node1 salt]# vim Apache.slsApache-Install:  pkg.installed:    - names:      - httpd      - httpd-develApache-Service:  service.running:    - name: httpd    - enable: True    - reload: True[root@linux-node1 salt]# salt '*' state.sls Apachelinux-node2.example.com:----------          ID: Apache-Install    Function: pkg.installed        Name: httpd      Result: True     Comment: Package httpd is already installed.     Started: 10:59:27.226690    Duration: 1813.079 ms     Changes:----------          ID: Apache-Install    Function: pkg.installed        Name: httpd-devel      Result: True     Comment: Package httpd-devel is already installed.     Started: 10:59:29.040075    Duration: 0.996 ms     Changes: ----------          ID: Apache-Service    Function: service.running        Name: httpd      Result: True     Comment: Service httpd has been enabled, and is running     Started: 10:59:29.042283    Duration: 2003.892 ms     Changes:              ----------              httpd:                  TrueSummary------------Succeeded: 3 (changed=1)Failed:    0------------Total states run:     3linux-node1.example.com:----------          ID: Apache-Install    Function: pkg.installed        Name: httpd      Result: True     Comment: Package httpd is already installed.     Started: 10:59:25.849052    Duration: 5207.181 ms     Changes:  ----------          ID: Apache-Install    Function: pkg.installed        Name: httpd-devel      Result: True     Comment: Package httpd-devel is already installed.     Started: 10:59:31.057000    Duration: 1.587 ms     Changes:----------          ID: Apache-Service    Function: service.running        Name: httpd      Result: True     Comment: Service httpd has been enabled, and is running     Started: 10:59:31.088942    Duration: 1378.366 ms     Changes:              ----------              httpd:                  TrueSummary------------Succeeded: 3 (changed=1)Failed:    0------------Total states run:     3[root@linux-node1 salt]# chkconfig --list httpdhttpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off[root@linux-node1 salt]# netstat -tnlup|grep "80"tcp        0      0 :::80                       :::*                        LISTEN      29372/httpd[root@linux-node2 ~]# chkconfig --list httpdhttpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off[root@linux-node2 ~]# netstat -tnlup|grep 80tcp        0      0 :::80                       :::*                        LISTEN      27316/httpd[root@linux-node1 salt]# vim top.slsbase:  '*':    - Apache[root@linux-node1 salt]# salt '*' state.highstateSaltstack数据系统【1】Grains【1-1】收集系统底层信息【2】Pillar[root@linux-node1 salt]# salt 'linux-node1*' grains.ls[root@linux-node1 salt]# salt 'linux-node1*' grains.items[root@linux-node1 salt]# salt 'linux-node1*' grains.item fqdnlinux-node1.example.com:    ----------    fqdn:        linux-node1.example.com[root@linux-node1 salt]# salt 'linux-node1*' grains.get fqdnlinux-node1.example.com:    linux-node1.example.com[root@linux-node1 salt]# salt 'linux-node1*' grains.get ip_interfaces:eth0linux-node1.example.com:    - 192.168.100.133    - fe80::20c:29ff:fe27:e560[root@linux-node1 salt]# salt -G 'os:CentOS' cmd.run 'uptime'linux-node1.example.com:     11:37:34 up  2:12,  1 user,  load average: 0.01, 0.02, 0.00linux-node2.example.com:     11:37:34 up  2:13,  1 user,  load average: 0.08, 0.02, 0.01自定义Grains[root@linux-node1 salt]# vim /etc/salt/minion88 grains:89   roles:90     - webserver91     - memcache[root@linux-node1 salt]# /etc/init.d/salt-minion restartStopping salt-minion daemon:                               [  OK  ]Starting salt-minion daemon:                               [  OK  ][root@linux-node1 salt]# salt -G 'roles:webserver' cmd.run 'uptime'linux-node1.example.com:     11:43:27 up  2:18,  1 user,  load average: 0.03, 0.02, 0.00[root@linux-node1 salt]# vim /etc/salt/grainsweb: nginx[root@linux-node1 salt]# /etc/init.d/salt-minion restartStopping salt-minion daemon:                               [  OK  ]Starting salt-minion daemon:                               [  OK  ][root@linux-node1 salt]# salt -G 'web:nginx' cmd.run 'uptime'linux-node1.example.com:     11:53:32 up  2:28,  1 user,  load average: 0.12, 0.07, 0.01[root@linux-node1 salt]# vim top.slsbase:  'web:nginx':    - match: grain    - Apache[root@linux-node1 salt]# salt -G 'web:nginx' state.highstatelinux-node1.example.com:----------          ID: Apache-Install    Function: pkg.installed        Name: httpd      Result: True     Comment: Package httpd is already installed.     Started: 12:35:23.704044    Duration: 1305.36 ms     Changes: ----------          ID: Apache-Install    Function: pkg.installed        Name: httpd-devel      Result: True     Comment: Package httpd-devel is already installed.     Started: 12:35:25.009625    Duration: 1.23 ms     Changes: ----------          ID: Apache-Service    Function: service.running        Name: httpd      Result: True     Comment: Service httpd is already enabled, and is in the desired state     Started: 12:35:25.011967    Duration: 76.219 ms     Changes:Summary------------Succeeded: 3Failed:    0------------Total states run:     3[root@linux-node1 salt]# vim /etc/salt/master552 pillar_opts: True[root@linux-node1 salt]# /etc/init.d/salt-master restartStopping salt-master daemon:                               [  OK  ]Starting salt-master daemon:                               [  OK  ][root@linux-node1 salt]# salt '*' pillar.items自定义Pillar[root@linux-node1 salt]# vim /etc/salt/master529 pillar_roots:530   base:531     - /srv/pillar[root@linux-node1 salt]# /etc/init.d/salt-master restartStopping salt-master daemon:                               [  OK  ]Starting salt-master daemon:                               [  OK  ][root@linux-node1 salt]# mkdir /srv/pillar[root@linux-node1 salt]# cd /srv/pillar/[root@linux-node1 pillar]# vim apache.sls{% if grains['os'] == 'CentOS' %}apache: httpd{% elif granis['os']  == 'Debian' %}apache: apache2{% endif %}[root@linux-node1 pillar]# vim top.slsbase:  '*':    - apache[root@linux-node1 pillar]# salt '*' pillar.itemslinux-node1.example.com:    ----------    apache:        httpdlinux-node2.example.com:    ----------    apache:        httpd[root@linux-node1 pillar]# salt -I 'apache:httpd' test.pinglinux-node1.example.com:    Minion did not return. [No response]linux-node2.example.com:    Minion did not return. [No response][root@linux-node1 pillar]# salt '*' saltutil.refresh_pillarlinux-node2.example.com:    Truelinux-node1.example.com:    True[root@linux-node1 pillar]# salt -I 'apache:httpd' test.pinglinux-node1.example.com:    Truelinux-node2.example.com:    TrueGrains和Pillar区别名称存储位置数据类型数据采集更新方式应用GrainsMinion端静态数据Minion启动时收集,也可以使用saltutil.sync_grains进行刷新存储Minion基本数据,比如用于匹配Minion,自身数据可以用来做资产管理等PillarMaster端动态数据在Master端定义,指定给对应的Minion,可以使用saltutil.refresh_pillar刷新存储Master指定的数据,只有指定的Minion可以看到,用于敏感数据保存远程执行三大内容【1】目标(Targeting)【2】模块(Module)【3】返回(Returnners)【1】ID[root@linux-node1 ~]# salt 'linux-node1.example.com' cmd.run 'uptime'linux-node1.example.com:     14:09:55 up  4:44,  1 user,  load average: 0.00, 0.00, 0.00【2】通配符[root@linux-node1 ~]# salt '*' cmd.run 'uptime'linux-node1.example.com:     14:10:27 up  4:45,  1 user,  load average: 0.00, 0.00, 0.00linux-node2.example.com:     14:10:28 up  4:46,  1 user,  load average: 0.05, 0.01, 0.00[root@linux-node1 ~]# salt 'linux-node?.example.com' cmd.run 'uptime'linux-node1.example.com:     14:11:04 up  4:45,  1 user,  load average: 0.00, 0.00, 0.00linux-node2.example.com:     14:11:04 up  4:47,  1 user,  load average: 0.03, 0.01, 0.00[root@linux-node1 ~]# salt 'linux-node[1-2].example.com' cmd.run 'uptime'linux-node2.example.com:     14:11:42 up  4:47,  1 user,  load average: 0.01, 0.01, 0.00linux-node1.example.com:     14:11:42 up  4:46,  1 user,  load average: 0.00, 0.00, 0.00[root@linux-node1 ~]# salt 'linux-node[1,2].example.com' cmd.run 'uptime'linux-node1.example.com:     14:12:38 up  4:47,  1 user,  load average: 0.00, 0.00, 0.00linux-node2.example.com:     14:12:39 up  4:48,  1 user,  load average: 0.00, 0.00, 0.00【3】正则表达式[root@linux-node1 ~]# salt -E 'linux-node1.(example|keywa).com' cmd.run 'uptime'linux-node1.example.com:     14:12:38 up  4:47,  1 user,  load average: 0.00, 0.00, 0.00linux-node1.keywa.com:     14:12:39 up  4:48,  1 user,  load average: 0.00, 0.00, 0.00【4】列表(ID)[root@linux-node1 ~]# salt -L 'linux-node1.example.com,linux-node2.example.com' cmd.run 'uptime'linux-node2.example.com:     14:25:08 up  5:01,  1 user,  load average: 0.00, 0.00, 0.00linux-node1.example.com:     14:25:08 up  4:59,  1 user,  load average: 0.01, 0.01, 0.00【5】IP[root@linux-node1 ~]# salt -S '192.168.100.133' cmd.run 'uptime'linux-node1.example.com:     14:27:36 up  5:02,  1 user,  load average: 0.00, 0.00, 0.00[root@linux-node1 ~]# salt -S '192.168.100.0/24' cmd.run 'uptime'linux-node1.example.com:     14:28:10 up  5:02,  1 user,  load average: 0.00, 0.00, 0.00linux-node2.example.com:     14:28:10 up  5:04,  1 user,  load average: 0.00, 0.00, 0.00【6】混合[root@linux-node1 ~]# salt -C 'S@192.168.100.0/24 or G@os:CentOS' cmd.run 'uptime'linux-node1.example.com:     14:29:39 up  5:04,  1 user,  load average: 0.00, 0.00, 0.00linux-node2.example.com:     14:29:39 up  5:05,  1 user,  load average: 0.00, 0.00, 0.00[root@linux-node1 ~]# salt -C 'S@192.168.100.0/24 and G@web:nginx' cmd.run 'uptime'linux-node1.example.com:     14:31:17 up  5:05,  1 user,  load average: 0.00, 0.00, 0.00[root@linux-node1 ~]# salt -C 'S@192.168.100.0/24 not G@web:nginx' cmd.run 'uptime'linux-node2.example.com:     14:32:39 up  5:08,  1 user,  load average: 0.00, 0.00, 0.00[root@linux-node1 ~]# salt '*' service.available sshdlinux-node1.example.com:    Truelinux-node2.example.com:    True[root@linux-node1 ~]# vim /etc/salt/master245 client_acl:246   linbin:247     - test.ping248     - network.*[root@linux-node1 ~]# /etc/init.d/salt-master restartStopping salt-master daemon:                               [  OK  ]Starting salt-master daemon:                               [  OK  ][root@linux-node1 ~]# chmod 755 /var/log/salt/master /var/cache/salt/ /var/cache/salt/master/ /var/cache/salt/master/jobs/ /var/run/salt /var/run/salt/master/[root@linux-node1 ~]# useradd linbin[root@linux-node1 ~]# passwd linbinChanging password for user linbin.New password:Retype new password: passwd: all authentication tokens updated successfully.[root@linux-node1 ~]# su - linbin[linbin@linux-node1 ~]$ iduid=500(linbin) gid=500(linbin) groups=500(linbin)[linbin@linux-node1 ~]$ salt '*' test.pinglinux-node2.example.com:    Truelinux-node1.example.com:    True[linbin@linux-node1 ~]$ salt '*' cmd.run 'uptime'Failed to authenticate! This is most likely because this user is not permitted to execute commands, but there is a small possibility that a disk error occurred (check disk/inode usage).[root@linux-node1 ~]# vim /etc/salt/master245 client_acl:246   linbin:247     - test.ping248     - network.*249 250   lb:251     - linux-node1*:252       - test.ping[root@linux-node1 ~]# /etc/init.d/salt-master restartStopping salt-master daemon:                               [  OK  ]Starting salt-master daemon:                               [  OK  ][root@linux-node1 ~]# useradd lb[root@linux-node1 ~]# passwd lbChanging password for user lb.New password:Retype new password: passwd: all authentication tokens updated successfully.[root@linux-node1 ~]# su - lb[lb@linux-node1 ~]$ iduid=501(lb) gid=501(lb) groups=501(lb)[lb@linux-node1 ~]$ salt 'linux-node1*' test.pinglinux-node1.example.com:    True[root@linux-node1 ~]# yum -y install mysql mysql-server[root@linux-node1 ~]# /etc/init.d/mysqld startStarting mysqld:                                           [  OK  ][root@linux-node1 ~]# mysqlWelcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 2Server version: 5.1.73 Source distributionCopyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> CREATE DATABASE  `salt`    ->   DEFAULT CHARACTER SET utf8    ->   DEFAULT COLLATE utf8_general_ci;Query OK, 1 row affected (0.00 sec)mysql> USE `salt`;Database changedmysql> DROP TABLE IF EXISTS `jids`;Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> CREATE TABLE `jids` (    ->   `jid` varchar(255) NOT NULL,    ->   `load` mediumtext NOT NULL,    ->   UNIQUE KEY `jid` (`jid`)    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;Query OK, 0 rows affected (0.03 sec)mysql> CREATE INDEX jid ON jids(jid) USING BTREE;ERROR 1061 (42000): Duplicate key name 'jid'mysql> DROP TABLE IF EXISTS `salt_returns`;Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> CREATE TABLE `salt_returns` (    ->   `fun` varchar(50) NOT NULL,    ->   `jid` varchar(255) NOT NULL,    ->   `return` mediumtext NOT NULL,    ->   `id` varchar(255) NOT NULL,    ->   `success` varchar(10) NOT NULL,    ->   `full_ret` mediumtext NOT NULL,    ->   `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,    ->   KEY `id` (`id`),    ->   KEY `jid` (`jid`),    ->   KEY `fun` (`fun`)    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;Query OK, 0 rows affected (0.04 sec)mysql> DROP TABLE IF EXISTS `salt_events`;Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> CREATE TABLE `salt_events` (    -> `id` BIGINT NOT NULL AUTO_INCREMENT,    -> `tag` varchar(255) NOT NULL,    -> `data` mediumtext NOT NULL,    -> `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,    -> `master_id` varchar(255) NOT NULL,    -> PRIMARY KEY (`id`),    -> KEY `tag` (`tag`)    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;Query OK, 0 rows affected (0.08 sec)mysql> show tables;+----------------+| Tables_in_salt |+----------------+| jids           || salt_events    || salt_returns   |+----------------+3 rows in set (0.01 sec)mysql> grant all on salt.*  to salt@'%' identified by 'salt';Query OK, 0 rows affected (0.02 sec)mysql> exit[root@linux-node1 ~]# yum -y install MySQL-python============================================================================================


联系方式
WeChat: fe88655 e-mail:77368447@qq.com

作者头像
萧萧一风创始人

做一个积极主动热情的人,为了想要完成的事情和实现的目标,拼命投入力量。

上一篇:自动化运维之ELK
下一篇:阿里云提示微擎1.8.2任意文件删除漏洞解决办法

发表评论