SaltStack 运维大全

1. 简述什么是SaltStack ?

SaltStack是一个开源配置管理和远程执行引擎.它跨所有机器远程执行命令.它是一个基于python的软件. Thomas S Hatch 是SaltStack的创建者和首席架构师. SaltStack使用ZeroMQ消息库来处理所有网络层的高速需求.盐简单,可扩展且快速.本教程将探讨SaltStack,SaltStack设置,Minion文件系统的基本原理,然后介绍远程执行步骤,配置管理,云管理,Python API操作,最后以完整的工作示例结束.

2. 简述SaltStack的组织架构 ?

SaltStack的体系结构旨在与任意数量的服务器协同工作,从本地网络系统到跨不同数据中心的其他部署.架构是一个简单的服务器/客户机模型,其中所需的功能内置于一组守护程序中.
SaltMaster : SaltMaster是主守护进程. SaltMaster用于向Salt从站发送命令和配置.一个主人可以管理多个主人.
SaltMinions : SaltMinion是奴隶守护进程. Salt Minion从SaltMaster接收命令和配置.
执行 : 模块和Adhoc命令从命令行对一个或多个小兵执行.它执行实时监控.
公式 : 配方是预先写好的盐国.它们与Salt States本身一样开放,可用于安装软件包,配置和启动服务,设置用户或权限以及许多其他常见任务等任务.
谷物 : Grains是一个提供特定于minion的信息的接口.通过grain界面提供的信息是静态的.盐奴才开始时谷物被加载.这意味着谷物中的信息是不变的.因此,谷物信息可能与运行的内核或操作系统有关.它不区分大小写.
Pillar : 支柱是生成和存储特定于特定小部件的高度敏感数据的接口,例如加密密钥和密码.它将数据存储在键/值对中,并以与盐状态树类似的方式管理数据.
顶级文件 : 将盐状态和支柱数据与Salt minions匹配.
跑步者 : 它是一个位于SaltMaster内部的模块,可执行诸如作业状态,连接状态,从外部API读取数据,查询连接的盐类等等任务.
回归者 : 从Salt minions返回到另一个系统的数据.
Reactor : 它负责在SaltStack环境中发生事件时触发反应.
SaltCloud : Salt Cloud提供了一个强大的界面来与云主机进行交互.
SaltSSH : 在不使用Salt minion的系统上通过SSH运行Salt命令.

3. 简述SaltStack 核心组件的安装命令和步骤 ?

Linux服务器(最新的Ubuntu服务器) ).
sudo 或 root access 到此服务器.
使用以下命令安装所有更新 :
sudo apt-get update
安装SaltMaster
使用以下apt-get命令从存储库安装SaltMaster.
sudo apt-get install salt-master
安装Salt Minion
使用以下apt-get命令从存储库安装Salt minion.
sudo apt-get install salt- minion
安装Salt syndic
使用以下apt-get命令从存储库安装Salt syndic.
sudo apt-get install salt-syndic
主配置
Salt配置非常简单.主服务器的默认配置适用于大多数安装.配置文件安装在’/etc/salt’目录中,并以各自的组件命名,例如 : /etc/salt/master和/etc/salt/minion.
#interface:0.0.0.0
interface:< local ip address>
更新配置文件后,使用以下命令重启Salt master.
sudo service salt-master restart
Minion Configuration
配置Salt Minion非常简单.默认情况下,Salt Minion将尝试连接到DNS名称"salt";
如果Minion能够正确解析该名称,则无需进行任何配置.重新定义minion配置文件中的"master"指令,通常为/etc/salt/minion ,如下面的代码所示 :
#master:salt
master:< local ip address>
更新配置文件后,使用以下命令重启Salt minion.
sudo service salt-minion restart
密钥管理
Salt使用 AES加密主人与仆从之间的所有交流. Master和Minion之间的通信通过可信,接受的密钥进行身份验证.
salt-key -L
它将产生以下输出 :
Accepted Keys:
Denied Keys:
Unaccepted Keys:

Rejected Keys:
通过发出以下命令接受所有密钥.
sudo salt-key -A
它将产生以下输出 :
The following keys are going to be accepted:
Unaccepted Keys:

Proceed? [n/Y] y
Key for minion bala-Inspiron-N4010 accepted.
现在再次发出盐键列表命令,
salt-key -L
它将产生以下输出 :
Accepted Keys:

Denied Keys:
Unaccepted Keys:
Rejected Keys:
发送命令
必须通过运行test.ping命令来验证Master和Minion之间的通信.
sudo salt ‘*’ test.ping
它将产生以下输出 :

True

4. 解释什么是VirtualBox环境 ?

VirtualBox是一个跨平台的虚拟化应用程序. VirtualBox允许您一次运行多个操作系统. VirtualBox可在Windows,Linux,Macintosh和Solaris上运行.它托管并支持大量的访客操作系统

5. 简述什么是Vagrant ?

Vagrant是一个开源工具,允许您通过易于使用的命令界面创建,配置和管理虚拟机盒。从本质上讲,它是安装在虚拟化工具(如VirtualBox,Docker,Hyper-V)和VM之间的软件层。
它通常用于软件开发中,以确保所有团队成员都针对相同的配置进行构建。它不仅共享环境,而且还共享代码。这允许一个开发人员的代码在另一个开发人员的系统上工作,使协作和协作开发成为可能
成功安装Vagrant后,您需要对其进行配置.在文件夹中创建名为 Vagrantfile 的单个文件,并描述机器的类型及其属性.
运行Vagrant : 要运行Vagrant,请发出以下命令 :
vagrant up
运行vagrant后,Vagrant创建并启动那些在后台使用VirtualBox在 Vagrantfile 中定义的计算机.这些机器将一直运行,直到你关闭它们.
停止流浪汉 : 要停止VirtualBox中所有正在运行的计算机,请键入以下命令 :
vagrant halt

6. 简述Saltstack采用什么方式进行通讯 ?

saltstack是基于python开发的一套C/S自动化运维工具,通信采用了zeromq消息队列的(pub/sub)
ZeroMQ是由一套组件组成,内封装的有网络通信,消息队列,线程调度等功能并向上层提供了简洁的API接口,应用程序通过加载库文件,调用API函数来实现高性能网络通信。
ZeroMQ将网络通信分成4种模型,分别是一对一结对模型(Exclusive-Pair)、请求回应模型(Request-Reply)、发布订阅模型(Publish-Subscribe)、推拉模型(Push-Pull)。这4种模型总结出了通用的网络通信模型,在实际中可以根据应用需要,组合其中的2种或多种模型来形成自己的解决方案

7. 简述什么是SaltStack的作业ID?

Salt有缓存目录, cachedir .在其中,minions维护的目录称为 proc 目录.它位于以下目录/var/cache/salt/proc.
proc目录用于维护所有文件.执行这些文件时,它们将使用唯一的作业ID进行分配.此作业ID有助于识别minion上当前正在运行的作业,并允许查找作业.

8. 简述什么是Saltutil模块 ?

Salt引入了一个新的被称为Saltutil作业管理过程的模块.该模块包含管理作业的不同功能.这些功能用于管理minion级别的作业.这些功能简要描述如下 :
正在运行 : 返回在proc目录中找到的所有正在运行的作业数据.
find_job : 根据作业ID返回有关某个作业的特定数据.
signal_job : 允许给定的作业ID(jid)发送信号.
term_job : 发送指定作业的终止信号.
kill_job : 发送指定作业的终止信号.

9. 简述流程SaltStack 作业调度 ?

计划系统公开任务执行功能的执行功能或主人的任何跑步者.
执行通过以下方法 :
时间表 : master或minion config 文件中的schedule选项.
Minion支柱数据 : 它使用saltutil.refresh_pillar命令刷新minion柱数据.
计划状态或计划模块.
在小兵上执行盐状态.您可以传递位置参数并在配置文件中提供命名参数的 YAML dict ,如下所示.
schedule:
job1:
function: saltstate.sls
seconds: 3600
args:

  • httpd
    kwargs:
    test: True
    这里, job1 将执行函数 saltstate.sls 每小时指定的参数 httpd . test:True 是 saltstate.sls 中定义的 httpd 命令的附加参数.

10. 简述Saltru如何通过SSH管理salt-minion?

Salt使用 salt-minion 在远程系统中执行命令.这是正常的行为.在某些情况下,只能通过SSH协议访问远程系统.对于这些场景,Salt提供了仅使用SSH协议连接远程系统的选项,并通过SSH层执行命令.
Salt SSH 非常简单配置.唯一需要的配置是在称为名单文件的特殊文件中指定远程系统详细信息.该名册文件通常位于/etc/salt/roster 中.名单文件将包含有关远程系统的所有信息以及我们如何连接到它.配置名单文件后,所有Salt命令都使用 salt-ssh 而不是salt命令执行.
名册文件
名册系统专为Salt SSH设计.这是一个可插拔系统.名册系统的唯一目的是收集有关远程系统的信息.名单文件是基于YAML的配置文件,包含远程系统信息目标.这些目标是具有预定义属性集的特殊数据结构.名册文件包含一个或多个目标,每个目标由 Salt ID 标识.
名册文件的基本结构如下 :
:
host:
user:
passwd:
名册文件支持的所有其他属性都是可选的.它们如下:<
port : SSH端口号.
sudo : 是否通过sudo运行命令.
sudo_user : sudo用户名.
tty : 如果启用了sudo,则为true.
priv : 私钥.
超时 : SSH连接超时.
minion_opts : minion字典选择.
thin_dir : 目标系统的盐组件存储目录.
cmd_umask : umask强制执行salt-call命令.
示例名单文件如下 :
web:
host: 192.168.2.1
user: webuser
passwd: secret
sudo: True
db:
host: 192.168.2.2
部署SSH密钥
Salt SSH将生成默认公共/SSH登录的私钥对.默认路径为/etc/salt/pki/master/ssh/salt-ssh.rsa.可以使用 ssh-copy-id 命令将此密钥部署到远程系统,如下所示.
ssh -copy-id -i/etc/salt/pki/master/ssh/salt-ssh.rsa.pub user@web.company.com
执行命令
执行salt命令就像将 salt cli 命令更改为 salt-ssh 一样简单,如下所示.
salt-ssh’‘test.ping
Raw Shell Command
Salt SSH提供了一个选项(-r)来绕过salt模块和函数在远程系统中执行raw命令.
salt-ssh’
‘-r’ls’
使用Salt SSH定位
定位Salt SSH中的远程系统仅支持glob和regex目标.由于Salt SSH是一个单独的模块,因此它目前只提供有限的选项,并且在不久的将来会提供更多功能.

11. 简述Master与Minion认证流程 ?

minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了。
认证命令如下:
[root@10.252.137.14 ~]#salt-key -L #查看当前证书签证情况
Accepted Keys:
Unaccepted Keys:
10.252.137.141
Rejected Keys:
[root@10.252.137.14 ~]#salt-key -A -y #同意签证所有没有接受的签证情况
The following keys are going to be accepted:
Unaccepted Keys:
10.252.137.141
Key for minion 10.252.137.141 accepted.
[root@10.252.137.14 ~]#salt-key -L
Accepted Keys:
10.252.137.141
Unaccepted Keys:
Rejected Keys:

12. 请列举SaltStack远程执行命令以及相关参数 ?

[root@10.252.137.14 ~]#salt ‘’ test.ping
10.252.137.141:
True
[root@10.252.137.14 ~]#salt '
’ cmd.run ‘ls -al’
10.252.137.141:
total 40
drwx------ 4 root root 4096 Sep 7 15:01 .
drwxr-xr-x 22 root root 4096 Sep 3 22:10 …
-rw------- 1 root root 501 Sep 7 14:49 .bash_history
-rw-r–r-- 1 root root 3106 Feb 20 2014 .bashrc
drwx------ 2 root root 4096 Jan 30 2015 .cache
drwxr-xr-x 2 root root 4096 Apr 22 13:57 .pip
-rw-r–r-- 1 root root 140 Feb 20 2014 .profile
-rw-r–r-- 1 root root 64 Apr 22 13:57 .pydistutils.cfg
-rw------- 1 root root 4256 Sep 7 15:01 .viminfo
salt执行命令的格式如下:
salt ‘’ [arguments]
target:执行salt命令的目标,可以使用正则表达式
function:方法,由module提供
arguments:function的参数
target可以是以下内容:

  1. 正则表达式
    salt -E ‘Minion*’ test.ping #主机名以Minion开通
  2. 列表匹配
    salt -L Minion,Minion1 test.ping
  3. Grians匹配
    salt -G ‘os:CentOS’ test.ping
    os:CentOS(默认存在)是Grains的键值对,数据以yaml保存在minion上,可在minion端直接编辑/etc/salt/grains,yaml格式。或者在master端执行salt ‘*’ grains.setval key “{‘sub-key’: ‘val’, ‘sub-key2’: ‘val2’}” ,具体文档(命令salt * sys.doc grains查看文档)
  4. 组匹配
    salt -N groups test.ping
    如,在master新建/etc/salt/master.d/nodegroups.conf ,yaml格式
  5. 复合匹配
    salt -C ‘G@os:CentOS or L@Minion’ test.ping
  6. Pillar值匹配
    salt -I ‘key:value’ test.ping
    /etc/salt/master设置pillar_roots,数据以yaml保存在Master上
  7. CIDR匹配
    salt -S ‘10.252.137.0/24’ test.ping
    10.252.137.0/24是一个指定的CIDR网段
    function是module提供的方法
    通过下面命令可以查看所有的function:
    salt ‘10.252.137.141’ sys.doc cmd
    function可以接受参数:
    salt ‘10.252.137.141’ cmd.run ‘uname -a’
    并且支持关键字参数:
    #在所有minion上切换到/目录以salt用户运行uname -a命令。
    salt ‘10.252.137.141’ cmd.run ‘uname -a’ cwd=/ user=salt

13. 简述Slat - states文件配置 ?

Salt-master:/etc/salt/master
salt-minion:/etc/salt/minion
配置文件中包含很多可调整的参数,这些参数可以控制 master 和 minion 各个方面
salt-master
interface: 192.168.28.141 #绑定到本地的某个网络地址
publish_port: 4505 #默认端口4505,设置master与minion通信端口
user: root #运行salt进程的用户
max_open_files: 100000 #master可以打开的最大句柄数
worker_threads: 5 #启动用来接收或应答minion的线程数
ret_port: 4506 #master用来发送命令或接受minions的命令执行返回信息
pidfile: /var/run/salt-master.pid #指定master的pid文件位置
root_dir: / #该目录为salt运行的根目录,改变它可以使salt从另外一个目录运行,好比chroot
pki_dir: /etc/salt/pki/master #存放pki认证密钥
cachedir: /var/cache/salt #存放缓存信息,salt工作执行的命令信息
verify_env: True #启动验证和设置权限配置目录
keep_jobs: 24 #保持工作信息的过期时间,单位小时
job_cache: True #设置master维护的工作缓存.当minions超过5000台时,它将很好的承担这个大的架构
timeout: 5 #master命令执可以接受的延迟时间
output: nested #salt命令的输出格式
minion_data_cache: True #关于minion信息存储在master上的参数,主要是pilar和grains数据
auto_accept: False #默认值False. master自动接受所有发送公钥的minion
file_recv: False #允许minion推送文件到master上
file_recv_max_size: 100 #默认值100,设置一个hard-limit文档大小推送到master端
state_top: top.sls #状态入口文件
renderer: yaml_jinja #使用渲染器用来渲染minions的状态数据
failhard: False #当单个的状态执行失败后,将会通知所有的状态停止运行
salt-minion
master: #指定master 主机(默认为salt)
master_port: #指定认证和执行结果发送到master 的哪个端⼝, 与master 配置组件中的ret_port 对应(默认为4506)
id: #指定本minion的标识. salt内部使 id 作为标识(默认为主机名)
user: #指定运行minion的用户. 由于安装包,启动服务等操作需要特权用户, 推荐使用root( 默认为root)
cache_jobs : #minion 是否缓存执行结果(默认为False)
backup_mode: #在组件操作(file.managed 或file.recurse) 时, 如果组件发生变更,指定备份指标. 当前有效的值为minion, 备份在cachedir/file_backups⺫录下, 以原始组件名称加时间戳来命名(默认为Disabled)
providers : #指定模块对应的providers, 如在RHEL系列中, pkg对应的providers 是yumpkg5
renderer: #指定配置管理系统中的渲染器(默认值为:yaml_jinja )
file_client : #指定file clinet 默认去哪⾥(remote 或local) 寻找⽂件(默认值为remote)
loglevel: #指定⽇志级别(默认为warning)
tcp_keepalive : #minion 是否与master 保持keepalive 检查, zeromq3 以下版本存在keepalive bug,会导致某些情况下连接异常后minion重连master. 建议有条件的话升级到zeromq 3以上版本(默认为True)

14. 请列举Master和Slaver的命令?

master 端命令
/usr/bin/salt #salt master 核心操作命令
/usr/bin/salt-cp #salt 文件传输命令
/usr/bin/salt-key #salt证书管理
/usr/bin/salt-master #salt master 服务命令
/usr/bin/salt-run #salt master runner命令

slave 端命令
/usr/bin/salt-call #拉取命令
/usr/bin/salt-minion #minion服务命令

15. 简述什么是 Salt for Cloud Infrastructure ?

Salt提供了一个单独的模块 Salt Cloud ,以提供各种云提供商的虚拟机,如Amazon AWS,Google Compute等.Salt Cloud是一个通用接口,用于配置和管理各种云提供商的VM .
Cloud Config : Salt Cloud的主要配置文件是/etc/salt/cloud,它适用于所有VM.主配置文件名为 Cloud Config .
云提供商 : 为了定位特定的云提供商,我们可以使用特定的配置文件,它们位于/etc/salt/cloud.providers.d
/.conf中,这些被称为云提供商.
云配置文件 : 要定位特定VM,我们还可以使用特殊配置文件,该文件仅适用于该特定VM,它们位于/etc/salt/cloud.profiles.d/
.conf,这些文件称为 Cloud个人资料.
对于虚拟机,首先应用云配置中的设置,然后在 Cloud Providers 中,最后覆盖由 Cloud Profiles 完成.

16. 请简述Salt中的事件系统中常用的Event ?

身份验证事件
当minion对主服务器执行身份验证检查时,会触发这些身份验证事件.它由salt/auth表示.
开始事件
只要一个minion连接到Salt master并且它由salt表示,就会触发启动事件/minion//start.
关键事件
当Salt master接受和拒绝Salt minion上的键时会触发Key事件.您可以使用salt-key命令访问此事件.
作业事件
每当新作业开始时都会触发作业事件.它由 salt/job//new 表示.这里,JID - 作业ID新 - 新工作
跑步者事件
当跑步者开始执行时,会触发跑步者事件.它由salt/run//new表示.
Presence Events
当连接或新连接或断开连接时,会触发此事件定期间隔.它由 - 盐/存在/存在和盐/存在/变化表示.在这里,
目前 : 表示Salt master目前已连接到minions列表.
更改 : 用于检测新的奴才 - 连接或断开连接.
云事件
盐 - 云事件在虚拟机上触发.除非其他事件,否则不会对小兵进行.您可以使用 - salt/cloud//创建来访问它.当Salt云启动虚拟机执行过程时会触发它.
事件工具
现在,让我们浏览一下事件工具和脚本.您可以使用CLI访问事件总线.它可以通过以下命令访问.
salt-run state.event pretty = True
这里,运行器旨在通过外部工具和shell脚本与事件总线进行交互.可以通过 REST API 远程访问Salt的事件总线.它由 - (示例网址)表示.
curl -SsNk https://salt-api.example.com:8000/events? token = 05A3.

17. 如何安装saltstack-web管理界面 ?

1、安装salt-master、salt-minion和salt-api
$ sudo yum install epel-release -y
$ sudo yum install salt-master salt-minion salt-api -y
#配置教程请看 文章 。
#启动并设置开机启动服务
$ sudo systemctl start salt-master
$ sudo systemctl enable salt-master
$ sudo systemctl start salt-minion
$ sudo systemctl enable salt-minion
$ sudo systemctl start salt-api
$ sudo systemctl enable salt-api
3、安装halite及其依赖文件
$ sudo yum install python-pip -y && sudo pip install --upgrade pip
$ sudo pip install -U halite
$ sudo pip install cherrypy
$ sudo pip install paste
$ sudo yum install python-devel gcc -y
$ sudo pip install gevent
$ sudo pip install pyopenssl
4、在配置文件master
$ sudo vim /etc/salt/master
external_auth:
pam:
testuser: //此用户设置为系统在用的用户

  • .*
  • ‘@runner’
    halite:
    level: ‘debug’
    server: ‘cherrypy’
    host: ‘0.0.0.0’
    port: ‘8080’
    cors: False
    tls: True
    certpath: ‘/etc/pki/tls/certs/localhost.crt’
    keypath: ‘/etc/pki/tls/certs/localhost.key’
    pempath: ‘/etc/pki/tls/certs/localhost.pem’
    5、运行命令
    $ sudo salt-call tls.create_self_signed_cert tls
    6、启动并设置自启动服务
    $ sudo systemctl restart salt-master
    $ sudo systemctl restart salt-minion
    $ sudo systemctl restart salt-api
    7、网页打开访问地址
    https://IP:8080//登录用户为刚刚设置的系统用户

18. 请列列举SaltStack master端命令参数 ?

#查看在主服务器上已被接受的客户端
salt-key
-A 将所有的客户端加入accept keys下
-L 显示已经或者是未被认证的被控端ID
-D 删除所有认证主机的ID证书
-d id 删除单个ID证书(ID为被控端的ID)
-a id 接受单个id证书的请求
-l 显示指定状态的key(支持正则表达式)
-r 拒绝等待认证的key
-R 拒绝所有等待认证的key
–include-all 显示所有状态的key
-p 打印指定的public key
-P 打印所有的public key
-f 显示指定key指纹信息
-F 显示所有key指纹信息
#salt
#master 客户端命令
可以先使用rpm -ql salt-master查看master都安装了什么
/etc/rc.d/init.d/salt-master //salt-master启动脚本
/etc/salt/master //salt-mater配置文件
/usr/bin/salt //salt-master核心命令
/usr/bin/salt-cp //salt-master文件传输命令
/usr/bin/salt-key //salt-master证书管理命令
/usr/bin/salt-master //salt-master 服务命令
/usr/bin/salt-run //salt-master runner 命令
/usr/bin/salt-unity

salt [options] ‘’ [arguments]
参数:
file.managed 管理文件
pkg.installed 安装软件
cron.absent 删除计划任务
cron.present 添加计划任务
cmd.run 后面跟cmd命令
service.running 启动服务
–version 查看saltstack程序的版本
–version-report 查看saltstack程序以及依赖的版本
-h 查看帮助信息
-c 指定配置文件的目录
-t 指定timeout时间
–hard-crash 捕捉到original异常不退出
-s 以组的形式返回所有的minion的数据
–async 异步执行
–show-timeout 显示minion timeout的状态
–show-jid 显示任务jid
-b 按照百分比执行任务
-a 指定外部的认证方式
-T 生成master token
–return=RETURNER 指定saltstack return
-d 查看指定模块或者所有模块的文档
–args-separator=ARGS_SEPARATOR 设置多个传参直接分隔符
–summary 显示汇总信息
–username=USERNAME 指定外部认证用户名
–password=PASSWORD 指定外部认证密码

Logging options:
-l LOG_LEVEL,–log-level=LOG_LEVEL 指定日志的级别
–log-file=LOG_FILE 指定日志记录文件

Target options:
-E 正则匹配
-L 列表匹配,以主机id名列表的形式进行过滤,格式与Python的列表相似,即不同主机id名称使用逗号分离。
-G grains匹配,根据被控主机的grains信息进行匹配过滤,格式为::
–grain-pcre grains加正则匹配
-N 组匹配,根据主控端master配置文件中的分组名称进行过滤。
-R 范围匹配
-C 综合匹配,根据条件运算符not、and、or去匹配不同规则的主机信息
-I pillar值匹配,根据被控主机的pillar信息进行匹配过滤,格式为:“对象名称”:“对象值”
-S minion网段地址匹配,根据被控主机的IP地址或IP子网进行匹配

Output options:
–out=OUTPUT 指定输出格式
–out-file=OUTPUT_FILE 指定输出文件
–no-color 关闭所有颜色显示
–force-color 强制输出颜色显示
–state-output=STATE_OUTPUT 指定state输出格式

salt ‘’ test.ping 测试minion是否连接正常
salt '
’ disk.usage disk.usage用来查看磁盘的使用情况
salt ‘’ network.interfaces 列出minion上的所有接口,以及IP和子网掩码等
salt '
’ cmd.run ‘ls /root’ cmd.run 用于执行shell命令
salt ‘’ pkg.install vim pkg.install 查看安装包
salt '
’ service.status mysql 查看mysql的服务状态
salt -E ‘*’ ‘1’ test.ping 满足正则匹配的minion端是否能够通信
salt -L ‘192.168.1.131’ grains.item osfullname 过滤主机并获取其完整的操作系统发行版本
salt -G ‘osfullname:CentOS Linux’ cmd.run ‘python -V’ 过滤grain信息 获取对应Python的版本号

19. 简述 SlatStack Master 端的Archive模块使用方法 ?

主要是实现系统层面的压缩包调用,支持gzip、gunzip、rar、unrar、unzip等
salt ‘192.168.1.131’ archive.tar xf mongodb-linux-x86_64-rhel62-3.0.7.tgz 远程解压mongo包

20. 简述 SlatStack Master 端的cmd模块使用方法 ?

cmd.has_exec: 如果可执行文件在minion上可用,返回true,否则返回false
例如:salt ‘’ cmd.has_exec ifconfig 这里只能是单个命令
cmd.retcode: 在minion执行一个shell命令并返回命令的返回码,0表示成功,0以外的表示失败,如我们可以查看一个文件是否存在根据返回码来判断,或者执行一个脚本等,引号里面就是你要执行的命令。正好跟cmd.has_exec相反
例如:salt '
’ cmd.retcode pwd
cmd.run: 这个执行shell命令,会显示返回结果,cmd.run_stderr意思只会在出问题的时候返回信息。
cmd.script和cmd.script_retcode: 从远程salt服务器或者ftp服务器或者http服务器下载脚本到本地执行
cmd.shell和cmd.shells: cmd.shell跟cmd.run一样,一般是用cmd.run,cmd.shell是通过/etc/shells文件列出此系统上有效的shell
cmd.which和cmd.which_bin:查找执行文件的所在位置
例如:salt ‘*’ cmd.which ifconfig

21. 简述 SlatStack Master 端的cp模块使用方法

cp.get_dir和cp.get_file:管理节点从被管理节点获取文件夹或者文件
salt ‘’ cp.get_dir salt://path/to/dir/ /minion/dest #从salt master递归复制目录到minion客户端的/minion/dest目录下面。
salt '
’ cp.get_file salt://path/to/file /minion/dest #从服务端拷贝单个文件到minion端的/minion/dest目录下面。
salt ‘*’ cp.get_file “salt://{{grains.os}}/vimrc” /etc/vimrc template=jinja #所有Salt minions从与其os粒度相同名称的目录下载vimrc,并将其复制到/etc/vimrc
cp.get_url: 用于从URL获取单个文件
cp.list_master和cp.list_master_dirs:用于查看salt master本地的file服务器有哪些文件或者目录

22. 简述 SlatStack Master 端的file模块使用方法 ?

file.access: f代表存在,rwx代表读写执行
例如:salt ‘’ file.access /root/test1.frm f 就是查看这个文件是否存在
也可以使用salt '
’ file.file_exists /root/test1.frm 来检查,返回是一样的
file.get_mode 后面指定目录或者文件,可以查看授权的情况
例如:salt ‘’ file.get_mode /root/test1.frm
file.is_blkdev: 检查文件是否存在并且是块设备
file.is_chrdev: 检查文件是否存在并且是字符设备
file.is_fifo: 检查文件是否存在并且是FIFO
file.is_link: 检查路径是否是符号链接
file.stats: 返回一个文件或者是目录的统计信息(包括类型,时间,属组,权限等)
例如:salt '
’ file.stats /root/anaconda-ks.cfg
file.append和file.write: 前者是将内容追加到文件的末尾,后者是直接覆盖
PS1:注意单引号和双引号的区别,如果有特殊字符最好使用单引号,有变量使用双引号。
例如:
salt ‘’ file.append /root/test.txt ‘hostname hello !’
salt '
’ file.append /root/test.txt “hostname hello "
显示的效果:
hostname hello !
localhost.localdomain hello
PS2:注意换行符的使用
例如:
salt ‘’ file.append /root/test.txt “kk”“kk kk”
salt '
’ file.append /root/test.txt “ll” “ll”
显示的效果:
kkkk kk
ll
ll
PS3:如果有=号的话可以使用args
例如:salt ‘’ file.append /root/test.txt args=[‘hostname=hostname’,‘rel=ls /root’]
显示效果:
hostname=hostname
rel=ls /root
file.chgrp、file.chown和file.set_mode: 前者是更改文件的属组,中者是更改文件数的属主属组,后者是更改文件或目录的权限.
例如:
salt '
’ file.chgrp /root/test.txt admin #将minion端的/root/test.txt文件更改用户组为admin,如果客户端有此用户组则返回None,没有此用户组则返回用户组不存
salt ‘’ file.chown /root/test.txt root admin #第一个是用户,第二个是用户组,固定格式必须存在,将/root/test.txt的用户组设置为root,用户组设置为admin.
salt '
’ file.set_mode /root/test.txt 0550 #设置/root/test.txt目录权限为0550,如果授权成功会显示授权后的权限,如果没有此文件或目录会提示
file.comment和file.comment_line: 注释指定内容的行,每次操作前都会更新文件名命令的.bak备份文件
例如:
salt ‘’ file.comment /root/test.txt kk 是将/root/test.txt文件中以kk开头的行注释掉,如果注释会显示注释信息,如果没有会显示false
salt '
’ file.comment /root/test.txt ^h.`$ 表达式支持正则,这里是已h开头已结尾的行注释 salt '*' file.comment /root/test.txt ^r.*\$ - 后面也可以指定加什么样的字符在开头,默认是#
file.copy: 复制文件或者目录到指定的目录下面,如果成功返回True,如果失败会有提示。
file.move: 移动文件
例如:
salt '
’ file.copy /data/test.sql /root/test.sql 把文件拷贝到minion对应的目录下面,切记这里一定要指定目标路径的文件名
salt ‘’ file.copy /data/ /root/haha/ recurse=true 拷贝目录,如果haha目录不存在,那么/data目录会改名成haha
salt '
’ file.copy /data/ /root/haha/data recurse=true 这种才是正确的写法,如果haha不存在会自动创建
salt ‘’ file.copy /data/ /root/haha/ recurse=true remove_exiting=True 这种就是完全覆盖的形式
file.dirextory_exists和file.dirname的用法:前者检查一个目录是否存在,后者是取出文件的路径
salt '
’ file.directory_exists /root/haha 检查haha目录是否存在,如果存在就会返回True,如果不存在就会返回false
salt ‘’ file.dirname ‘/root/haha/’ 如果后面加/就会认为这两个都是目录,如果不加就会认为前面是目录后面是文件
file.find: 和find命令很相似,查找文件或者目录使用
例如:
salt '
’ file.find / type=f name=*.sql size=+1m
查找/下文件类型为(a:所有文件类型,b:块设备,c:字节设备,d:目录,p:FIFO(命名管道),f:普通文件,l:符号链接,s:套接字),名称为.sql结尾的(支持正则),大小大于1Mb的文件(b:字节,k:千字节,m:兆字节,g:GB,t:TB)
salt ‘’ file.find /var mtime=+30d size=+10m print=path,size,mtime
查找/var目录下,最后一次更改时间是30天以前(w:周,d:天,h:小时,m:分钟,s:秒),大小大于10MB的文件,并打印文件的路径,大小,更改时间(可打印的内容有:group:组名,md5:文件内容的MD5摘要,mode:文件权限(以整数形式),mtime:最后修改时间,name:文件基础名称,path:文件绝对路径,size:文件大小(以字节为单位),type:文件类型,user:用户名)。
salt '
’ file.find /data name=*.[0-9] mtime=+10d size=+10m delete
find的匹配条件有(name区分大小写,iname不区分大小写,type类型,user用户,group用户组,size[±]大小,mtime修改时间,grep搜索文件内容),最后执行的动作除了delete和print,还有exec command。
file.get_gid、file.get_uid和file.get_group、file.get_user: 前一组是返回文件的gid喝uid号,后一组是返回文件或者是目录的group和user
file.grep:类似于grep命令,过滤使用
例如:
salt ‘’ file.grep /root/test.txt kk 过滤test.txt包含kk的行,会输出pid:grep运行的pid号,retcode:状态码,0是成功过滤,1是失败过滤,stderr:错误输出,stdout:正常输出过滤的内容
salt '
’ file.grep /root/test.txt kk " -i” 如果加上-i表示不区分大小写
file.link和file.makedirs: 前者创建硬链接,后者创建软连接
file.mkdir和file.mkdirs: 都是创建目录,前者会受/的影响,后者不会
file.remove、file.rmdir和filr.rename: 前者是删除文件,中间是删除空目录,后者是重新命名文件或者目录
file.touch和file.truncate: 前者是创建文件,后者是删除内容
例如:salt ‘*’ file.truncate /root/passwd 3 将文件第三个字段之后的内容全部删除掉,那么久只剩下roo三个字段

23. 简述 SlatStack Master 端的host模块使用方法 ?

host.add_host、host.rm_host和host.set_host: 前者是追加,中间是删除,后者是覆盖
例如:
salt ‘’ hosts.add_host 192.168.1.113 test.xxx hosts.add会先判断/etc/hosts里面有没有这个IP192.168.1.113,如果有test.xxx会将alias名追加到这个IP后面,跟之前的解析别名一起使用这个IP,如果没有就会新创建一行hosts记录。
salt '
’ hosts.set_host 192.168.1.114 test.XXX hosts.set_host这个的不同之处就是,如果这个IP不存在则创建新的一条hosts记录,如果hosts存在这个IP的解析记录。会完全覆盖掉。也就是旧的IP解析记录完全变成现在的结果.
salt ‘*’ hosts.rm_host 192.168.1.114 test.xxx 删除192.168.1.114 test.xxx这条解析记录。如果192.168.1.114这行有多条解析记录,而只会删除test.xxx这条记录,其他的192.168.1.114 xxx.xxx,还会存在不会删除,可以说是有选择性的删除。

salt ‘’ hosts.get_alias 192.168.1.114 192.168.1.114这个IP对应的别名解析,如果有则返回对应的hosts别名解析记录。没有则什么都不返回。
salt '
’ hosts.get_ip xxxx 这个就是返回xxxx在/etc/hosts里面对应的IP,但是有个问题,如果有多条只会返回文件最上方的那一条对应的IP地址.
salt ‘’ hosts.has_pair 192.168.1.113 xxxxx 如果有这条别名解析记录,则返回True,如果没有则返回False.
salt '
’ hosts.list_hosts 类似于cat /etc/hosts的操作,但是不同的是,这相当于一个汇总,会以第一行是IP:下一行是其对应的别名解析的方式来呈现,比如一个IP有好几行的解析,这所有的解析记录都会汇总到这个IP下面,注释过的别名解析的行不会出现在这个汇总信息里面。

24. 简述 SlatStack Master 端的cron模块使用方法 ?

cron.raw_cron:cron.list_tab和cron.ls的效果和其一样,格式也是要指定一个用户,都是显示指定用户crontab文件里面的定时任务
例如:salt ‘*’ cron.raw_cron root #必须指定用户,这里是显示root的crontab文件里面的内容,注释的行也会显示

cron.set_job: 为用户设置一个定时任务
salt ‘’ cron.set_job root ‘0’ ‘0’ '’ ‘’ '’ ‘/bin/bash /data/text.sh >/dev/null 2>&1’
如果’/bin/bash /data/test.txt >/dev/null 2>&1’这一部分存在了,那么这一步操作就是update,也就是更新前面执行crontab的时间,如果不存在,这就相当于一条添加定时任务的操作返回内容为new。

25. 简述 SlatStack Master 端的network模块使用方法 ?

salt ‘’ network.get_hostname 返回minion的主机名
salt '
’ network.hw_addr eth0 返回指定网络接口的mac地址
salt ‘’ network.in_subnet 192.168.1.0/24 查看主机在某个子网内就返回True,如果不在的话就返回False,多子网用空格隔开。
salt '
’ network.ip_addrs 查看minion端绑定的IP地址,多IP也会显示出来,127.0.0.1除外。(#salt ‘’ network.interfaces会显示所有接口的详细信息,但是别名的网卡类似于eth0:1这种不会显示。)
salt '
’ network.interface_ip eth0 显示指定网卡接口上面的IP,只会显示IP不会显示其他内容。(network.interface会连网关子网掩码也显示)
salt ‘’ network.mod_hostname test1.salt 修改某一个minion的主机名,显然这一步操作只适合在初始化的时候而且不适合执行所有主机。
salt '
’ network.ping www.baidu.com return_boolean=True timeout=3 如果不加return_boolean=True显示的是ping的结果信息,加了就是如果ping通了就返回True,ping不通就返回False。timeout=3就是ping的时间,3秒超时这样能快速返回结果。
salt ‘*’ network.subnets 返回主机所属的子网

26. 简述 SlatStack Master 端的sys模块使用方法 ?

sys.argspec:返回salt执行模块中函数的参数说明,对于后期写.sls文件有帮助
salt ‘’ sys.argspec pkg.install 查看pkg.install函数的参数说明
salt '
’ sys.argspec sys 查看sys模块里面所有函数的规则说明。
sys.doc: 显示模块下函数的使用文档信息
salt ‘’ sys.doc cmd 查看cmd模块的使用方法
sys.list_functions和sys.list_modules: 前者是列出所有模块下面的函数,多模块也是用空格隔开,后者是将所有的模块全部列出。
salt '
’ sys.list_functions ‘sys.list_’ 可以用这种方法将所有sys.list开头的函数列出来。
salt '
’ sys.list_modules 列出所有的模块
salt ‘’ sys.list_modules 's’ 列出所有以s开头的模块。

27. 简述 SlatStack Master 端的service模块使用方法 ?

salt ‘’ service.available sshd 查看某个命令的服务是否可用,这里是查看sshd服务是否可用,可用返回True,不可用返回False.
salt '
’ service.disable postfix 禁止某个服务开机启动,这里是禁止postfix服务开机启动。
salt ‘’ service.disabled postfix 查看某个服务是否已经开机不启动,这里是以postfix服务为例,是返回True,否则返回False.
salt '
’ service.enable postfix 设置某个服务开机启动,这里以postfix为例
salt ‘’ service.enabled postfix 查看某个服务是否开机启动,这里以postfix服务为例
salt '
’ service.get_all 查看所有的服务项
salt ‘’ service.get_enabled 查看所有开机启动的服务
salt '
’ service.reload 重新加载指定名称的服务
salt ‘’ service.restart 重新启动指定名称的服务
salt '
’ service.start 启动指定名称的服务
salt ‘’ service.status 查看指定服务的状态,启动状态是True,关闭状态是False。
salt '
’ service.stop 关闭指定名称的服务

28. 简述 SlatStack Master 端的pkg模块使用方法 ?

pkg.install: 安装传递的包,在安装包之前,添加refresh=true来清理yum的数据库
salt ‘’ pkg.install httpd 如这就相当于在minion端执行yum install httpd -y操作
salt '
’ pkg.install httpd refresh=True 如果是第一个yum的话,还是可以refresh参数,相当于yum clean all操作。
salt ‘’ pkg.install pkgs=‘[“foo”, “bar”]’
salt '
’ pkg.install pkgs=‘[“foo”, {“bar”: “1.2.3-4.el5”}]’
salt ‘*’ pkg.install sources=‘[{“foo”: “salt://foo.rpm”}, {“bar”: “salt://bar.rpm”}]’

name:要安装的软件包的名称。如果传递了“pkgs”或“sources“”此参数则会被忽略
skip_verify:跳过GPG验证检查
version:安装包的特定版本
fromrepo:指定从哪个repo库来安装软件。
pkgs : 指定多个软件包,一定是要以列表传递。
sources:要安装的RPM软件包列表。 其中的键是包名称,值作为包的源URI或本地路径。

pkg.latest_version: 更新包到最新的版本
salt ‘*’ pkg.latest_version 更新指定的软件包,若阁请以逗号隔开

pkg.remove:删除软件包
salt ‘*’ pkg.remove 卸载指定的软件,多软件可以使用逗号隔开

pkg.version:查看软件的版本
salt ‘*’ pkg.version 查看指定软件的版本号,多软件请以逗号隔开

29. 简述 SlatStack Master 端的grains模块使用方法 ?

Grains是saltstack组件中非常重要之一,在配置部署时候回经常使用,Grains记录minion的静态信息,比如常用属性,CPU、内存、磁盘、网络信息等。信息以键值对形式存储。配置文件/etc/salt/grains。

grains的基本用法:
salt ‘’ grains.ls 列出所有grains方法
salt '
’ grains.items 列出主机所有Grains数据
salt ‘*’ grains.item os id host 列出主机的os,id,host的值

grains -G的用法:
salt -G ‘os:CentOS’ test.ping 对os:CentOS的主机进行ping操作
salt -G ‘osrelease:7*’ test.ping
salt ‘’ grains.item fqdn_ip4 找出IP地址
salt '
’ grains.setval cpu_num 8 自定义cpu_num为8
alt ‘’ grains.setval cpu_info ‘[“Intel”,“Xeon”,“10”]’
salt '
’ grains.item cpu_info
salt ‘*’ grains.delval cpu_info 删除cpu_num

30. 请列举SaltStack minion配置文件项 ?

1 主要的配置
#default_include: minion.d/*.conf 设置include配置文件
#master salt 设置master地址
#random_master: False 设置多master随机请求
#retry_dns: 30 设置dns解析失败的时间
#master_port: 4506 设置master认证端口
#root_dir: / 工作目录
#pki_dir: /etc/salt/pki/minion pki信息存储目录
#id: 设置minion ID
#grains: 设置grains信息
#cachedir: /var/cache/salt/minion 设置缓存目录
#sock_dir: /var/run/salt/minion 设置sock目录
#backup_mode: minion 设置备份文件
#acceptance_wait_time: 10 设置等待master公钥的时间
#acceptance_wait_time_max: 0 设置等待master公钥的最大时间
#rejected_retry: False 拒绝后是否等待
#random_reauth_delay: 60 设置从新认证的时间
#auth_timeout: 60 设置认证timeout的时间
#auth_tries: 7 在saltReqTimeoutError重试次数
#auth_safemode: False 设置safemode模式
#ping_interval: 0 设置ping master间隔

2 模块配置
#disable_modules: disable模块配置
#disable_returners: [] disable return 模块
#modules_max_memory: -1 设置模块最大内存

3 长链接配置
#tcp_keepalive: True 开启tcp长链接
#tcp_keepalive_idle: 300 长链接发送时间
#tcp_keepalive_cnt: -1 认定连接失败发送多个tcp探测包
#tcp_keepalive_intvl: -1 设置长连接探测频率


  1. 0-9 ↩︎

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我思故我在6789

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值