SaltStack的使用总结

发表于:2021-4-19 09:21

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:童安格粉丝    来源:CSDN

  SaltStack是一个开源的、新的基础平台管理工具,使用Python语言开发,同时提供Rest API方便二次开发以及和其他运维管理系统进行集成。相对于出道比较早的Puppet,SaltStack先天的优势就是简单、易用,可以非常快速的在团队中推广和使用,而且运行多平台。
  SaltStack目前拥有四大主要功能
  远程执行:就是在管理节点上实现在上百台、上千台机器上同时执行一个命令。
  配置管理:也可以称之为状态管理,你可以描述一个状态。例如,某台机器要安装Nginx软件包、Nginx必须是启动的状态、Nginx有一个配置文件(内容和某个地方的一样)。你用一种描述语法描述出来后交给SaltStack,SaltStack就可以帮你实现,而不用你手动进行Nginx软件包的安装、配置文件的修改、启动等。
  云管理:SaltStack有一个组件叫作salt-cloud,它可以帮你自动化的进行云主机的创建和管理,支持很多公有云或私有云,例如AWS、阿里云、HP云、OpenStack、CloudStack等。
  事件驱动:事件驱动基础设施是SaltStack最强大也是最神秘的功能,前面的远程执行和配置管理是最基础的的,事件驱动是指SaltStack在日常运行中可以产生和捕捉事件,并根据捕捉到的事件触发对应的操作。
  SaltStack的四种运行方式
  ·Local:在本地运行或者说单台使用SaltStack
  ·Minion/Master: 传统的客户端/服务器端(C/S)架构
  ·Syndic: 使用代理实现架构扩展,用于管理更多的节点
  ·Salt SSH: 无须安装客户端,直接通过SSH通信
  目标机器匹配方法
  SaltStack有以下几种方式来选择目标机器,灵活而又强大。大的来讲分为两大类:
  1. 基于Minion ID
  Minion ID是客户端(minion)的唯一标识符。可以在minion配置文件里面使用ID选项进行配置,如果不指定,其默认是主机的FQDN名。Minion ID是不能变动的,因为在进行key认证的时候,生成的文件名是以Minion ID命名的。如果Minion发生变动,就需要使用salt-key -d删除老的Minion ID,然后重新加入新的Minion ID。
  ·Globbing(通配符)
  ·regex(正则表达式)
  ·list(列表)
  2. 不基于Minion ID
  ·子网/IP地址
  ·Grains
  ·Grains PCRE
  ·Pillar
  ·Compound matchers(复合匹配)
  ·Node groups(节点组)
  ·Batching execution(批处理执行)
  演示
  指定Minion ID是最直接的选择目标的方法
  查看所有minion节点
  [root@salt ~]# salt-key  -L
  Accepted Keys:
  Denied Keys:
  Unaccepted Keys:
  128.docker.itnotebooks.com
  Rejected Keys:
  授权minion节点
  可以修改/etc/salt/master的配置auto_accept:True自动认证
  [root@salt ~]# salt-key -a 128.docker.itnotebooks.com
  The following keys are going to be accepted:
  Unaccepted Keys:
  128.docker.itnotebooks.com
  Proceed? [n/Y] y
  Key for minion 128.docker.itnotebooks.com accepted.
  ·salt-key -L: 显示已经或未认证的minion节点,Accepted Keys为已认证清单
  ·salt-key -D: 删除所有Minion节点的证书
  ·salt-key -d id: 删除单个minion节点的证书
  ·salt-key -A: 接受所有minion节点的请求
  ·salt-key -a id: 接受单个minion节点的请求
  Globbing是指在Minion ID的基础上,通过通配符来定位Minion。SaltStack默认使用Shell风格通配符(如“” “?” “[]”)来匹配Minion ID。不过需要注意的是,使用salt命令时必须将’’放在单引号中,或是用’\’转义,用来避免shell解析。
  匹配所有itnotebooks.com域的所有minion
  [root@salt ~]# salt '*.itnotebooks.com' test.ping
  匹配docker后面单个任意字符的Minion
  [root@salt ~]# salt 'docker?.itnotebooks.com' test.ping
  匹配docker节点1到节点3的Minion
  [root@salt ~]# salt 'docker[1-3].itnotebooks.com' test.ping
  匹配docker不是节点1和节点3的Minion
  [root@salt ~]# salt 'docker[!13].itnotebooks.com' test.ping
  list和直接Minion ID都是最基本的模式,可以列出每一个Minion ID来指定多个目标机器,使用选项’-L’
  [root@salt ~]# salt -L 'docker1.itnotebooks.com,docker2.itnotebooks.com' test.ping
  Salt可以使用Perl风格的正则表达式来匹配Minion ID,使用选项-E
  [root@salt ~]# salt -E 'linux-(node1|node2)*' test.ping
  规范的Minion ID可以很好的反映出该服务器运行的相关服务及所在位置
  redis-node1-redis03-idc04-soa.itnotebooks.com
  ·redis-node1:运行的服务是Redis,这是第一个节点
  ·redis03:说明这个redis是Redis集群编号03里面的节点
  ·idc04:这台服务器运行在编号04的IDC机房中
  ·soa:这台服务器是给SOA服务使用的
  ·itnotebooks.com:运行的服务器是itnotebooks.com业务
  也可以使用IP地址或CIDR子网来指定目标,目前仅支持IPv4的地址
  [root@salt ~]# salt -S '192.168.18.33' test.ping
  [root@salt ~]# salt -S '192.168.18.0/24' test.ping
  也可以使用Grains对Trageting进行匹配,使用选项’-G’
  匹配所有CentOS系统的Minion
  [root@salt ~]# salt -G 'os:CentOS' test.ping
  通过Grain匹配非常灵活,如果你想进行更复杂的基于Grains的匹配,SaltStack提供了Grain PCRE,可以在Grains的基础上使用正则表达式
  [root@salt ~]# salt --grain-pcre 'os_family:Red(Hat|Flag)' test.ping
  Pillar的数据可以用来定位Minion,为定位Minions提供了灵活性和终极控制
  [root@salt ~]# salt -I 'apache:httpd' test.ping
  Compound matchers(混合匹配)可以使用布尔操作符连接多个目标条件。混合匹配可以用前面讨论的多种方式实现精确的匹配。混合配匹配默认使用Globbing,如果要使用其它匹配方式,需要加上类型前缀字母如下表所示。
  复合匹配中也可以使用and、or、not操作符,例如要匹配主机名以及webserv开始且运行Debain系统的Minion,还能匹配主机名满足正则表达式web-dc1-srv.*的Minion
  [root@salt ~]# salt -C 'webserv* and G@os:Debian or E@web-dc1-srv.*' test.ping
  ·G表示用shell通配符匹配Grains
  ·E表示用正则表达式匹配Minion ID
  需要注意的是not不能用于第一个条件,需要用时可以像下面这样写:
  [root@salt ~]# salt -C '* and not G@kernel:Darwin' test.ping
  Node group是在Master中nodegroup用复合条件字义的一组Minion
  [root@salt ~]# vim /etc/salt/master
  nodegroups:
    group1: 'L@linux-node1.itnotebooks.com,linux-node2.itnotebooks.com'
  [root@salt ~]# systemctl restart salt-master
  [root@salt ~]# salt -N group1 test.ping
  linux-node2.itnotebooks.com
      True
  linux-node1.itnotebooks.com
      True
  远程执行命令-查看内存使用
  [root@salt ~]# salt 'linux-node1.itnotebooks.com' cmd.run 'free -m'
                total        used        free      shared  buff/cache   available
  Mem:           1838         749         119           0         969         887
  Swap:             0           0           0
  远程执行命令-查看操作系统类型
  [root@salt ~]# salt 'linux-node1.itnotebooks.com' grains.item osfullname
  linux-node1.itnotebooks.com:
    osfullname: CentOS
  远程执行命令-查看指定发行版本号为6.4的主机的python版本
  [root@salt ~]# salt -G 'osrelease:6.4' cmd.run 'python -V'
  linux-node1.itnotebooks.com:
    Python 2.6.6
  远程执行命令-解压文件
  [root@salt ~]# salt 'linux-node1.itnotebooks.com' archive.gunzip /tmp/jdk-8.1.0.gz
  远程执行命令-压缩文件
  [root@salt ~]# salt 'linux-node1.itnotebooks.com' archive.gzip /tmp/test.txt
  除了上面所提到的外,其它类似的模块还有很多很多
  如cp、cron、file、iptables、network、dnsuti、service、pkg等等,详细的自己用过就知道了,当然你也可以在cmd.run里面去完成这一切。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号