saltstack小试牛刀

当我们服务器数量只有1台,2台,几台时,我们部署软件工具可以逐台登录服务器操作,但随着企业服务器数量不但增多,显然逐台登录部署已经变得不现实。这时自动化运维管理工具就闪亮登场了,目前比较流行的工具有puppet,ansible,saltstack。我曾经使用过ansible和saltstack,当机器数量较多时,ansible执行比saltstack慢很多,今天主要介绍下saltstack。

1. saltstack介绍

saltstack是由python编写的采用c/s架构的自动化运维工具,由master和minion组成,使用ZeroMQ消息队列pub/sub方式通信,使用SSL证书签发的方式进行认证管理,本身是支持多master的。saltstack除了可以通过在节点安装客户端进行管理还支持直接通过ssh进行管理。运行模式为master端下发指令,客户端接收指令执行。采用yaml格式编写配置文件,支持api及自定义python模块,能轻松实现功能扩展。
saltstack有一个saltstack master,而很多saltstack minon在初始化时会连接到该master上。初始化时,minion会交换一个秘钥建立握手,然后建立一个持久的加密的TCP连接。通常,命令起始于master的命令行中,master将命令分发minion上。saltstack master可以同时连接很多minion而无需担心过载,这都归功于ZeroMQ。由于minion和master之间建立了持久化连接,所以master上的命令能很快的到达minion上。minion也可以缓存多种数据,以便加速执行。

2.安装过程

2.1 环境准备

机器名称 机器系统 机器ip
saltstack-master centos7.6 10.20.3.10
saltstack-monion1 centos7.6 10.20.3.11
saltstack-monion2 centos7.6 10.20.3.12

2.2 安装saltstack

master机器

1.加载saltstack库和密钥

[root@saltstack-master ~]# yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm

2.清除缓存

[root@saltstack-master ~]# yum clean expire-cache

3.安装salt-master服务

[root@saltstack-master ~]# yum install -y salt-master

4.启动master服务

[root@saltstack-master ~]#  systemctl enable salt-master
[root@saltstack-master ~]#  systemctl start salt-master

minion机器

1.加载saltstack库和密钥

[root@saltstack-minion1 ~]# yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm
[root@saltstack-minion2 ~]# yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm

2.清除缓存

[root@saltstack-minion1 ~]# yum clean expire-cache
[root@saltstack-minion2 ~]# yum clean expire-cache

3.安装salt-minion

[root@saltstack-minion1 ~]# yum install -y salt-minion
[root@saltstack-minion2 ~]# yum install -y salt-minion

4.启动minion

[root@saltstack-minion1 ~]# systemctl enable salt-minion
[root@saltstack-minion1 ~]# systemctl start salt-minion
[root@saltstack-minion2 ~]# systemctl enable stal-minion
[root@saltstack-minion2 ~]# systemctl start salt-minion

服务配置

以下minion配置只以一个讲解,另外一个同理操作
1.master默认在所有网卡监听4505、4506端口,修改配置文件将服务监听在唯一地址

[root@saltstack-master ~]# vim /etc/salt/master
interface: 10.20.3.10
[root@saltstack-master ~]# systemctl restart salt-master

2.修改minion配置文件,加入master地址

[root@saltstack-minion1 ~]# vim /etc/salt/minion
master: 10.20.3.10
[root@saltstack-minion1 ~]# systemctl restart salt-minion

3.建立mater和minion通信秘钥
minion 启动之后会请求 master 为其发送证书,证书签发完成后,表示 master可以加入该 minion

[root@saltstack-master ~]# salt-key -L

saltstack小试牛刀
可以看到两个 minion 客户端已经和服务端建立了联系,并且 master 已经获取了 minion 的公钥,但master还未接受minion的key,正在等待更多进一步有关是否接受该 minion 的指令

使master接受minion的key

[root@saltstack-master ~]# salt-key -a saltstack-minion1
[root@saltstack-master ~]# salt-key -a saltstack-minion2

此时再查看,master已经接受minion的key
saltstack小试牛刀

也可以使用如下命令一次接受所有minion的key
salt-key -A -y

4.简单测试
master ping minion

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

saltstack小试牛刀

查看minion机器负载

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

saltstack小试牛刀

至此saltstack搭建完毕

3.saltstack使用

3.1 salt常用命令

salt-key 秘钥管理

salt-key -L # 查看所有minion的key状态
salt-key -a <节点id> # 接受某个minion的key
salt-key -A # 接受所有minion的key
salt-key -d <节点id> # 删除某个minion的key
salt-key -D # 删除所有minion的key

salt-run 执行runner函数

salt-run [option] [runner.func]

salt-run manage.status # 查看所有minion的状态
salt-run manage.down # 查看down掉的minion
salt-run manage.up # 查看up的minion

saltstack小试牛刀

3.2 grains模块

该模块采集的是系统的静态信息,包括cpu、操作系统、文件系统、硬盘等
显示所有的minion的grians信息

[root@saltstack-master ~]# salt '*' grains.ls

列出所有的minion的grains详细信息

[root@saltstack-master ~]# salt '*' grains.items

grains使用场景

1.查看各minion的操作系统

[root@saltstack-master ~]# salt '*' grains.item os

saltstack小试牛刀
2.分类查找
如找出cpu架构是x86的机器,查看cpu核数
可以使用-G参数来表示使用grains中变量信息来匹配minion

[root@saltstack-master ~]#  salt -G 'cpuarch:x86_64' grains.item num_cpus

saltstack小试牛刀

可以自定义grains

这里我们自定义minion1的grains
1 修改/etc/salt/minion文件

[root@saltstack-minion1 ~]# vim /etc/salt/minion
grains:
  services:
    - webserver
    - redis
  site: beijing1
  department: yanfa
[root@saltstack-minion1 ~]# systemctl restart salt-minion

这是再在master查看,可以看到我们自己定义的属性
saltstack小试牛刀

2 也可以修改/etc/salt/grains文件

[root@saltstack-minion1 ~]# vim /etc/salt/grains
 services:
   - webserver
   - redis
 site: beijing1
 department: yanfa

3 也可以在master上自己写grains模块

[root@saltstack-master ~]# vim /srv/salt/_grains/test.py
def use():
    useage = {}
    useage['use'] = 'docker'
    return useage
同步到minion上
[root@saltstack-master ~]# salt '*' saltutil.sync_grains

查看
saltstack小试牛刀

master分发的文件可以在minion /var/cache/salt/minion/files/base/ 里看到

3.3 pillar模块

pillar可以指定一些信息发送到指定的minion上,保存的数据可以是动态的,pillar以sls来写,格式是键值对。
不同于grains模块,grains在master是同步到所有minion上,而pillar只同步到指定minion上。
实现一个pillar流程

创建pillar目录
[root@saltstack-master ~]# mkdir /srv/pillar
创建一个pillar数据文件
[root@saltstack-master ~]# vim /srv/pillar/test.sls
pod: '09'
disk: 'ssd'
创建top file文件(指定哪些minion到pillar数据文件,即需要分发的节点)
base:
  'saltstack-minion1':
    - test
刷新pillar数据
[root@saltstack-master ~]# salt '*' saltutil.refresh_pillar

查看,可以看到只有我们指定的minion收到了数据
saltstack小试牛刀

下面在结合grains,利用jinja语法实现另一个pillar流程

创建一个pillar数据文件
[root@saltstack-master ~]# mkdir /srv/pillar/web
[root@saltstack-master ~]# vim /srv/pillar/web/apache.sls
{% if grains['os_family'] == 'RedHat' %}
apache: httpd
{% elif grains['os_family'] == 'RedHat' %}
apache: apache2
{% endif %}
创建top file文件
[root@saltstack-master ~]# vim /srv/pillar/top.sls
base:
  '*':
    - web.apache
刷新pillar数据
[root@saltstack-master ~]# salt '*' saltutil.refresh_pillar

查看,minion1和minion2都为centos系统所有web都是httpd
saltstack小试牛刀

4.参考文档

https://repo.saltstack.com/#rhel

猜你喜欢

转载自blog.51cto.com/13053917/2428384