运维管理工具之SaltStack

Posted icloud布道师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运维管理工具之SaltStack相关的知识,希望对你有一定的参考价值。

逆境前行,能帮你的只有自己


运维管理工具之SaltStack






运维管理工具之SaltStack

SaltStack简介



 
             Saltstack是一种全新的基础设施管理方式,是一个服务器基础架构集中化管理平台,几分钟内便可运行起来,速度够快,服务器之间秒级通讯,扩展性好,很容易批量管理上万台服务器,显著降低人力与运维成本

    它具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func

    通过部署SaltStack环境,可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器




运维管理工具之SaltStack

SaltStack功能




#SaltStack运行模式:


Local:本地,一台机器,不建议


Master/Minion:通过server/agent的方式进行管理,效率很高


Salt SSH:通过SSH方式进行管理,效率相对来说比较低



#SaltStack三大功能:


执行远程命令


配置管理


云管理



#SaltStack特征:


部署简单、方便



支持大部分UNIX/Linux及Windows环境



主从集中化管理


配置简单、功能强大、扩展性强


主控端(master)和被控端(minion)基于证书认证,安全可靠


支持API及自定义模块,可通过Python轻松扩展


运维管理工具之SaltStack





运维管理工具之SaltStack

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





运维管理工具之SaltStack

SaltStack安装配置



实验环境

服务端:masterIP:192.168.231.129Hostname:master.com
被控端:minionIP:192.168.231.130Hostname:minion.com



配置FQDN

[root@master ~]# vim /etc/hosts************************************************192.168.231.129 master master.com192.168.231.130 minion minion.com************************************************
[root@minion ~]# vim /etc/hosts************************************************192.168.231.129 master master.com192.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



服务组件安装


#master[root@master ~]# yum install epel-release -y       #安装 epel源[root@master ~]# yum install salt-master salt-minion -y #安装服务端和被监控端服务
#minion[root@minion ~]# yum install epel-release -y #安装 epel源 [root@minion ~]# yum install salt-minion -y #安装被监控端服务



启动服务

#配置主控服务:[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 saltroot 12779 0.0 1.5 234884 15644 ? Ss 14:21 0:00 /usr/bin/python /usr/bin/salt-minionroot      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.comThe following keys are going to be accepted:Unaccepted Keys:minion.comProceed? [n/Y] yKey for minion minion.com accepted.
#查看已经签名认证的客户端[root@master ~]# salt-key -LAccepted Keys:minion.comDenied Keys:Unaccepted Keys:Rejected Keys:
#签名完成,可以在被监控端看到生成的密钥minion_master.pub[root@minion ~]# cd /etc/salt/pki/minion/[root@minion minion]# lsminion_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项目

[root@minion minion]# vim /etc/salt/grains # 此文件没有,默认新建************************************************ role: zabbix_server env: test myname: minionlinux myhostname: minion.com************************************************ 
#重启minion服务[root@minion minion]# systemctl restart salt-minion
#查看是否存在自定义的项[root@master ~]# salt 'minion.com' grains.items env
#我们可以借助grains的一些属性信息来执行一些命令[root@master ~]# salt -G env:test 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



saltstack之pillar介绍

grains 用于存储静态不易变更的数据,而 pillar 一般用来存储动态的、敏感的数据;通过 minion 端和 master 端都可以配置设置或获取 grains 信息,而 pillar 信息只能在 master 端配置,再到 minion 端执行。

pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息,可以自定义变量等


#自定义配置pillar过程:[root@master ~]# vim /etc/salt/master +529 ************************************************ pillar_roots: #注释去掉即可 base: - /srv/pillar************************************************
#创建pillar文件的存放目录:[root@master ~]# mkdir -p /srv/pillar[root@master ~]# cd /srv/pillar/
#创建配置文件,编辑如下内容:[root@master pillar]# vim test.sls************************************************conf: /etc/123/conf #注意冒号后有空格myname: saltstack-server************************************************
#创建编写入口配置文件[root@master pillar]# vim /srv/pillar/top.sls************************************************ base: 'minion.com':          - test #注意- 后有空格************************************************
#重启服务[root@master pillar]# systemctl restart salt-master
#可以通过刷新来获取新的状态‘’[root@master pillar]# salt '*' saltutil.refresh_pillarminion.com: True
#查看:[root@master pillar]# salt '*' pillar.itemsminion.com: ---------- conf: /etc/123/conf myname: saltstack-server






运维管理工具之SaltStack

SaltStack配置管理服务



配置安装apache

[root@master pillar]#  vim /etc/salt/master +408#取消406-408行的注释************************************************ file_roots: base: - /srv/salt/************************************************
#创建配置文件存储目录[root@master pillar]# mkdir -p /srv/salt[root@master pillar]# cd !$
#创建入口配置文件[root@master salt]# vim top.sls************************************************ base: 'minion.com': - apache************************************************
#重启服务:[root@master salt]# systemctl restart salt-master
#创建编写apache模块的配置文件[root@master salt]# vim /srv/salt/apache.sls ************************************************apache-service: pkg.installed: - names: - httpd - httpd-devel service.running: - name: httpd    - enable: True************************************************- apache-service是ID的名称,自定义的。- pkg.installed为包安装函数,下面是要安装的包的名字。- service.running也是一个函数,来保证指定的服务启动,- enable表示开机启动。
#配置好文件,执行 [root@master salt]# salt 'minion.com' state.highstate
[ERROR ] Error parsing configuration file: /etc/salt/master - expected '<document start>', but found '<block mapping start>' in "<string>", line 529, column 2: pillar_roots: ^[ERROR ] Error parsing configuration file: /etc/salt/master - expected '<document start>', but found '<block mapping start>' in "<string>", line 529, column 2: pillar_roots: ^minion.com:---------- 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: ---------- apr-devel: ---------- new: 1.4.8-3.el7_4.1 old: apr-util-devel: ---------- new: 1.5.2-6.el7 old: cyrus-sasl-devel: ---------- new: 2.1.26-23.el7 old: expat-devel: ---------- new: 2.1.0-10.el7_3 old: httpd-devel: ---------- new: 2.4.6-89.el7.centos old: openldap: ---------- new: 2.4.44-21.el7_6 old: 2.4.44-20.el7 openldap-devel: ---------- 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



运维管理工具之SaltStack


查看被控端状态:[root@minion minion]# systemctl status httpd

运维管理工具之SaltStack




配置远程文件管理


#创建一个文件管理的模块[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

运维管理工具之SaltStack


客户端查看是否有/tmp/xuegodlinux.txt [root@minion minion]# ll /tmp/kawayilinux.txt -rw-r--r--. 1 root root 7 5月  27 18:00 /tmp/kawayilinux.txt

运维管理工具之SaltStack



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

自动化运维工具之SaltStack-1SaltStack介绍及安装

运维工具之saltstack

自动化运维工具之SaltStack-2SaltStack配置管理

自动化运维工具之saltstack

运维自动化之Saltstack使用详解