配置管理工具:
- Pupper:1. 采用ruby编程语言;2. 安装环境相对较复杂;3.不支持远程执行,需要FUNC工具配置才可以
- Ansible:1.采用python编程语言;2.被红帽收购;3.轻量级;4.基于模块工作的,本身没有批量部署的能力,真正批量部署的是ansible所运行的模块。
- Saltstack:采用python编程语言,同时提供Rest API方便二次开发以及和其它平台进行集成(目前企业使用率最高)
Saltstack最基本的三大功能:
- Remote execution远程执行:同时在上百上千台机器批量执行命令
- Configuration management配置管理:状态管理(一种状态描述,但是这种状态很难回滚)
- Event-Driven infrastucture事件驱动基础设施:监听对象,状态变化产生事件捕捉事件自动编排,故障自愈
- Salt cloud 云管理:几乎可以管理所有的公有云和私有云
Saltstack常用的网址:
- 官方网站:http://www.saltstack.com
- 官方文档:http://docs.saltstack.com
- Github:https://github.com/saltstack
- 中国Saltstack用户组:http://www.saltstack.cn
Saltstack组件:
- Salt Master组件:用于向在Salt Minion设备上运行的Salt管理器发送命令和配置。
- Salt Minion组件:管理系统。此系统运行Salt minion,它从Salt master接收命令和配置。
- Execution Modules组件:从命令行对一个或多个受管系统执行的特殊命令。用于:实时监控、状态和库存;一次性命令和脚本;部署关键更新。
- Formulas(status)组件:系统配置的声明性或命令式表示。
- Grains组件:系统变量。Grain是关于底层托管系统的静态信息,包括操作系统、内存和许多其他系统属性。您还可以为任何系统定义自定义Grain。
- Pillar组件:用户定义的变量。这些安全变量定义并存储在Salt Master上,然后使用目标“分配”给一个或多个Salt Minion。Salt Pillar数据存储端口、文件路径、配置参数和密码等值。
- Top File组件:将公式和Salt Pillar数据与Salt Minion匹配。
- Runners组件:在Salt Master执行以执行支持任务的模块。Salt runner报告作业状态、连接状态、从外部api读取数据、查询连接的Salt minions等等。
- Returners组件:将Salt minions返回的数据发送到另一个系统,如数据库。Salt Returners可以运行在Salt minions或Salt Master上。
- Reactor组件:在你的Saltstack环境中发生事件时触发反应。
- Salt Cloud / Salt Virt组件:在云提供商/管理程序上提供系统,并立即对其进行管理。
-
Salt SSH组件:
在没有Salt minion的系统上通过SSH运行Salt命令。
Saltstack支持的操作系统:
- Centos
- Redhat
- Debian
- Ubuntu
- FreeBSD
- Solaris
- Fedora
- Gentoo
- MAC OS X
- Archlinux
- Windows
- Suse
Saltstack四种运行方式:
- local:一台本地自运行
- Minion/Master: 就是C/S模式
- Syndic 代理组件管理(可以理解成zabbix proxy模式)
- Salt SSH: 不用安装agent,也能通过SSH收集信息
1. Saltstack的安装
准备两台机器,这两台机器都关闭 selinux,清空 iptables 规则并保存。
master:192.168.1.220
node01:192.168.1.221
编辑 hosts 文件
两台都设置,若机器太多,可以通过搭建 DNS,则不用在每台机器上设置这个
[root@master ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.220 master 192.168.1.221 node01 192.168.1.222 node02 [root@node01 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.220 master 192.168.1.221 node01 192.168.1.222 node02
设置 hostname
[root@node01 ~]# cat /etc/hostname node01 [root@master ~]# cat /etc/hostname master
1)服务端安装
[root@master ~]# cd /etc/yum.repos.d/ [root@master yum.repos.d]# wget http://mirrors.aliyun.com/repo/Centos-7.repo [root@master yum.repos.d]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm [root@master yum.repos.d]# yum install -y salt-master salt-minion
2)客户端安装
[root@node01 ~]# cd /etc/yum.repos.d/ [root@node01 yum.repos.d]# wget http://mirrors.aliyun.com/repo/Centos-7.repo [root@node01 yum.repos.d]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm [root@node01 yum.repos.d]# yum install -y salt-minion
服务端和客户端都要配置 master
[root@master ~]# vi /etc/salt/minion master: 192.168.1.220 //在第16行添加,冒号后有一个空格
启动服务
1)服务端
[root@master ~]# systemctl start salt-master
[root@master ~]# systemctl start salt-minion
2)客户端
[root@node01 ~]# systemctl start salt-minion
配置认证
1)在服务端上操作
[root@master ~]# salt-key -a master The following keys are going to be accepted: Unaccepted Keys: master Proceed? [n/Y] y Key for minion master accepted. [root@master ~]# salt-key -a node01 The following keys are going to be accepted: Unaccepted Keys: node01 Proceed? [n/Y] y Key for minion node01 accepted. [root@master ~]# salt-key Accepted Keys: master node01 Denied Keys: Unaccepted Keys: Rejected Keys:
说明:-a :accept ,-A:accept-all,-d:delete,-D:delete-all。可以使用 salt-key 命令查看到已经签名的客户端。此时我们在客户端的 /etc/salt/pki/minion 目录下面会多出一个minion_master.pub 文件。
2)测试验证
示例1: salt '*' test.ping //检测通讯是否正常,也可以指定其中一个 'node01'
[root@master ~]# salt '*' test.ping node01: True master: True
[root@master salt]# salt 'node01' test.ping node01: True
示例2: salt '*' cmd.run 'df -h' //远程执行命令
[root@master ~]# salt '*' cmd.run 'df -h' node01: Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 19G 1.9G 17G 10% / devtmpfs 475M 0 475M 0% /dev tmpfs 487M 60K 487M 1% /dev/shm tmpfs 487M 14M 473M 3% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda1 197M 111M 87M 56% /boot tmpfs 98M 0 98M 0% /run/user/0 master: Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 19G 1.9G 17G 10% / devtmpfs 475M 0 475M 0% /dev tmpfs 487M 240K 487M 1% /dev/shm tmpfs 487M 14M 473M 3% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda1 197M 111M 87M 56% /boot tmpfs 98M 0 98M 0% /run/user/0
说明: 这里的 * 必须是在 master 上已经被接受过的客户端,可以通过 salt-key 查到,通常是我们已经设定的 id 值。关于这部分内容,它支持通配、列表以及正则。 比如两台客户端 web10、web11, 那我们可以写成 salt 'web*' salt 'web1[02]' salt -L 'web10,web11' salt -E 'web(10|11)' 等形式,使用列表,即多个机器用逗号分隔,而且需要加-L,使用正则必须要带-E选项。 它还支持 grains 和 pillar,分别加 -G 和 -I 选项,下面会介绍到。