运维管理工具之SaltStack
Posted icloud布道师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运维管理工具之SaltStack相关的知识,希望对你有一定的参考价值。
逆境前行,能帮你的只有自己
SaltStack简介
Saltstack是一种全新的基础设施管理方式,是一个服务器基础架构集中化管理平台,几分钟内便可运行起来,速度够快,服务器之间秒级通讯,扩展性好,很容易批量管理上万台服务器,显著降低人力与运维成本 它具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func
通过部署SaltStack环境,可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器
SaltStack功能
#SaltStack运行模式:
Local:本地,一台机器,不建议
Master/Minion
:通过server/agent的方式进行管理,效率很高
Salt SSH
:通过SSH方式进行管理,效率相对来说比较低
#SaltStack三大功能:
执行远程命令
配置管理
云管理
#SaltStack特征:
部署简单、方便
支持大部分UNIX/Linux及Windows环境
主从集中化管理
配置简单、功能强大、扩展性强
主控端(master)和被控端(minion)基于证书认证,安全可靠
支持API及自定义模块,可通过Python轻松扩展
Master与Minion
Master与Minion认证
1)minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。
2)master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了
Master与Minion的连接
SaltStack安装配置
实验环境
服务端:master
IP:192.168.231.129
Hostname:master.com
被控端:minion
IP:192.168.231.130
Hostname:minion.com
配置FQDN
[root@master ~]# vim /etc/hosts
************************************************
192.168.231.129 master master.com
192.168.231.130 minion minion.com
************************************************
[root@minion ~]# vim /etc/hosts
************************************************
192.168.231.129 master master.com
192.168.231.130 minion minion.com
************************************************
两台机器都关闭防火墙和selinux
#关闭防火墙
[root@master ~]# systemctl stop firewalld && systemctl disable firewalld
[root@minion ~]# systemctl stop firewalld && systemctl disable firewalld
#关闭selinux
[root@master ~]# setenforce 0
[root@minion ~]# setenforce 0
服务组件安装
[ ]
[ ]
[ ]
[ ]
启动服务
#配置主控服务:
[root@master ~]# vim /etc/salt/minion #在16行下面增加一行
(修改python编写的配置文件千万注意缩进!(空格))
************************************************
master:192.168.231.129
************************************************
#启动主控端服务
[root@master ~]# systemctl start salt-master
[root@master ~]# systemctl start salt-minion
#配置被控服务
[root@minion ~]# vim /etc/salt/minion
************************************************
master:192.168.231.129
************************************************
#启动被控端服务
[root@minion ~]# systemctl start salt-minion
#启动完毕,查看下进程,可以看到相关服务是python来执行运行的
[root@master ~]# ps aux |grep salt
root 12779 0.0 1.5 234884 15644 ? Ss 14:21 0:00 /usr/bin/python /usr/bin/salt-minion
root 12785 0.1 2.6 467812 26560 ? Sl 14:21 0:00 /usr/bin/python /usr/bin/salt-minion
配置认证
#下面的操作都是在master上进行
[root@master ~]# salt-key -a minion.com
The following keys are going to be accepted:
Unaccepted Keys:
minion.com
Proceed?
Key for minion minion.com accepted.
#查看已经签名认证的客户端
[root@master ~]# salt-key -L
Accepted Keys:
minion.com
Denied Keys:
Unaccepted Keys:
Rejected Keys:
#签名完成,可以在被监控端看到生成的密钥minion_master.pub
[root@minion ~]# cd /etc/salt/pki/minion/
[root@minion minion]# ls
minion_master.pub minion.pem minion.pub
#补充: salt-key 可以使用-A 来签名所有主机,也可以使用-d 删除指定的主机
saltstack 远程执行命令演示
#查看分区等信息
[root@master ~]# salt 'minion.com' cmd.run 'df -h'
minion.com:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 8.0G 4.8G 3.3G 60% /
devtmpfs 373M 0 373M 0% /dev
tmpfs 390M 12K 390M 1% /dev/shm
tmpfs 390M 7.1M 383M 2% /run
tmpfs 390M 0 390M 0% /sys/fs/cgroup
/dev/sda1 1014M 166M 849M 17% /boot
tmpfs 78M 12K 78M 1% /run/user/42
tmpfs 78M 0 78M 0% /run/user/0
如果有多个被监控的客户端,我们可以通过通配符,列表,正则等来一次性的控制多个主机,比如我们现在有两个客户端,web10 web11.可以写成:
salt ‘web*’或者salt ‘web1[01]’或者 salt -L ‘web10,web11’使用列表的时候,多个机器用逗号隔开
#可以调用cmd.run 来执行其他的命令,比如负载,时间,主机名等等
saltstack之grains介绍
GRAINS 组件是 saltstack 中非常重要的一个组件,其主要用于记录 Minion 的一些静态信息,如比: CPU 、内存、磁盘、网络等。 grains 信息是每次客户端启动后自动上报给 master 的,一旦这些静态信息发生改变需要重启 minion 或者 重新同步下 grains 。
#grains 是在minion启动收集到的一些信息,比如操作系统的类型,网卡IP,内存版本,CPU信息等
[root@master ~]# salt '*' grains.ls #列出所有的grains项目
minion.com:
- SSDs
- biosreleasedate
- biosversion
- cpu_flags
- cpu_model
- cpuarch
- domain
- fqdn
[root@master ~]# salt '*' grains.items #列出所有grains项目对应的值
minion.com:
----------
SSDs:
biosreleasedate:
04/13/2018
biosversion:
6.00
cpu_flags:
(启动grains的信息并不是动态的,并不会时时变更,它只是在minion启动时收集到的,我们可以根据grains收集到的一些信息,做配置管理工作,可以支持自定义一些监控项
自定义grains
在被监控端添加grains项目
[ ]
************************************************
role: zabbix_server
env: test
myname: minionlinux
myhostname: minion.com
************************************************
[ ]
[ ]
[ ]
minion.com:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 8.0G 4.8G 3.3G 60% /
devtmpfs 373M 0 373M 0% /dev
tmpfs 390M 12K 390M 1% /dev/shm
tmpfs 390M 7.1M 383M 2% /run
tmpfs 390M 0 390M 0% /sys/fs/cgroup
/dev/sda1 1014M 166M 849M 17% /boot
tmpfs 78M 12K 78M 1% /run/user/42
tmpfs 78M 0 78M 0% /run/user/0
saltstack之pillar介绍
grains 用于存储静态不易变更的数据,而 pillar 一般用来存储动态的、敏感的数据;通过 minion 端和 master 端都可以配置设置或获取 grains 信息,而 pillar 信息只能在 master 端配置,再到 minion 端执行。
pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息,可以自定义变量等
#自定义配置pillar过程:
~]# vim /etc/salt/master +529
************************************************
pillar_roots: #注释去掉即可
base:
/srv/pillar
************************************************
#创建pillar文件的存放目录:
~]# mkdir -p /srv/pillar
~]# cd /srv/pillar/
#创建配置文件,编辑如下内容:
[root@master pillar]# vim test.sls
************************************************
conf: /etc/123/conf #注意冒号后有空格
myname: saltstack-server
************************************************
#创建编写入口配置文件
pillar]# vim /srv/pillar/top.sls
************************************************
base:
:
test #注意- 后有空格
************************************************
#重启服务
pillar]# systemctl restart salt-master
#可以通过刷新来获取新的状态‘’
pillar]# salt '*' saltutil.refresh_pillar
:
True
#查看:
pillar]# salt '*' pillar.items
:
----------
conf:
/etc/123/conf
myname:
saltstack-server
SaltStack配置管理服务
配置安装apache
[root@master pillar]# vim /etc/salt/master +408
#取消406-408行的注释
************************************************
file_roots:
base:
/srv/salt/
************************************************
#创建配置文件存储目录
pillar]# mkdir -p /srv/salt
pillar]# cd !$
#创建入口配置文件
salt]# vim top.sls
************************************************
base:
:
apache
************************************************
#重启服务:
salt]# systemctl restart salt-master
#创建编写apache模块的配置文件
************************************************
:
:
names:
httpd
httpd-devel
:
name: httpd
enable: True
************************************************
apache-service是ID的名称,自定义的。
pkg.installed为包安装函数,下面是要安装的包的名字。
service.running也是一个函数,来保证指定的服务启动,
enable表示开机启动。
#配置好文件,执行
salt]# salt 'minion.com' state.highstate
] Error parsing configuration file: /etc/salt/master - expected '<document start>', but found '<block mapping start>'
in "<string>", line 529, column 2:
pillar_roots:
^
] Error parsing configuration file: /etc/salt/master - expected '<document start>', but found '<block mapping start>'
in "<string>", line 529, column 2:
pillar_roots:
^
:
----------
ID: apache-service
Function: pkg.installed
Name: httpd
Result: True
Comment: Package httpd is already installed.
Started: 17:43:43.696297
Duration: 2139.831 ms
Changes:
----------
ID: apache-service
Function: pkg.installed
Name: httpd-devel
Result: True
Comment: The following packages were installed/updated: httpd-devel
Started: 17:43:45.836288
Duration: 24796.131 ms
Changes:
----------
:
----------
new:
1.4.8-3.el7_4.1
old:
:
----------
new:
1.5.2-6.el7
old:
:
----------
new:
2.1.26-23.el7
old:
:
----------
new:
2.1.0-10.el7_3
old:
:
----------
new:
2.4.6-89.el7.centos
old:
openldap:
----------
new:
2.4.44-21.el7_6
old:
2.4.44-20.el7
:
----------
new:
2.4.44-21.el7_6
old:
----------
ID: apache-service
Function: service.running
Name: httpd
Result: True
Comment: Service httpd has been enabled, and is running
Started: 17:44:10.720947
Duration: 2071.297 ms
Changes:
----------
httpd:
True
Summary
------------
Succeeded: 3 (changed=2)
Failed: 0
------------
Total states run: 3
查看被控端状态:
[ ]
配置远程文件管理
#创建一个文件管理的模块
[root@master salt]# vim filetest.sls
************************************************
file_test:
file.managed:
- name: /tmp/kawayilinux.txt
- source: salt://test/kawayi.php
- user: root
- group: root
- mode: 644
************************************************
#注意:
第一行的 file-test 为自定的名字,表示该配置段的名字,可以在别的配置段中引用它;
source指定文件从哪里拷贝,这里的 test 目录相当于是 /srv/salt/test 目录;
name指定远程客户端要生成的文件。
#新建所要测试的源文件
[root@master salt]# mkdir -p /srv/salt/test
[root@master salt]# echo 'kawayi'>/srv/salt/test/kawayi.php
#在入口文件里添加模块
[root@master salt]# vim top.sls
************************************************
base:
'minion.com':
- apache
- filetest
************************************************
#测试执行
[root@master salt]# salt 'minion.com' state.highstate
客户端查看是否有/tmp/xuegodlinux.txt
[ ]
-rw-r--r--. 1 root root 7 5月 27 18:00 /tmp/kawayilinux.txt
saltstack远程执行命令
#创建执行命令的配置文件
[root@master salt]# vim cmd.sls
************************************************
cmd_test:
cmd.run:
- unless: test -f /tmp/kawayi.txt
- names:
- touch /tmp/11.txt
- mkdir /tmp/1233
- user: root
************************************************
注意:
unless: 表示若/tmp/xuegodtext.txt文件不存在,
- 也就是结果为True则执行-name后面的命令,
- 为false则不执行;
还可以使用 onlyif 表示若/tmp/xuegodtext.txt
- 文件存在,则执行后面的命令;两者正好相反。
# 在入口文件里添加模块
[root@master salt]# vim top.sls
************************************************
base:
'minion.com':
- apache
- filetest
- cmd
************************************************
#测试执行命令:
[root@master salt]# salt 'minion.com' state.highstate
欧克欧克!
希望不要忘记这章!
以上是关于运维管理工具之SaltStack的主要内容,如果未能解决你的问题,请参考以下文章
自动化运维工具之SaltStack-1SaltStack介绍及安装