前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Centos7上Saltstack 安装配置详解

Centos7上Saltstack 安装配置详解

作者头像
菲宇
发布2022-12-02 14:30:47
1.7K0
发布2022-12-02 14:30:47
举报
文章被收录于专栏:菲宇菲宇

一、saltstack简介

Saltstack 比 Puppet 出来晚几年,是基于Python 开发的,也是基于 C/S 架构,服务端 master 和客户端 minions ;Saltstack 和 Puppet 很像,可以说 Saltstatck 整合了 Puppet 和 Chef 的功能,更加强大,更适合大规模批量管理服务器,并且它比 Puppet 更容易配置。

三大功能: 远程命令执行,配置管理(服务,文件,cron,用户,组),云管理。 支持系统:大多数都支持,windows 上不支持安装 master。

salt的具体步骤如下:

第一步:salt stack的master与minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc。 第二步:salt命令,以ls查看为例,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jobid,根据jobid获取命令执行结果。 第三步:master接收到命令后,将要执行的命令发送给客户端minion。 第四步:minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理。 第五步:minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后,调用minion._return_pub方法,将执行结果通过消息总线返回给master。 第六步:master接收到客户端返回的结果,调用master._handle_aes方法,将结果写的文件中。 第七步:salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端

二、saltstack安装与配置 1、准备工作

准备两台机器,这两台机器都关闭 selinux,清空 iptables或firewall 规则并保存。

centos7.3 192.168.0.23 master

centos7.3 192.168.0.27 minion

2、安装与配置

1)服务端安装与配置

代码语言:javascript
复制
yum install -y salt-master salt-minion

/etc/salt/master /file_roots #file_roots: #  base: #    - /srv/salt 去掉#注释 file_roots:   base:     - /srv/salt /pillar_roots #pillar_roots: #  base: #    - /srv/pillar 去掉注释: pillar_roots:   base:     - /srv/pillar

2)客户端安装

代码语言:javascript
复制
 yum install -y salt-minion

/etc/salt/minion #master: server 修改为 master: 192.168.0.27 #id 修改为 id: mysql

3、启动服务 1)服务端

代码语言:javascript
复制
systemmctl start salt-master && systemmctl enable salt-master
systemmctl start salt-minion && systemmctl enable salt-minion

2)客户端

代码语言:javascript
复制
systemmctl start salt-minion && systemmctl enable salt-minion

3、master配置文件详解

saltstack大部分配置都已经指定了默认值,只需要根据实际需求进行修改就行。

# vim /etc/salt/master

配置项及默认值

注释

主配置设置:

default_include: master.d/*.conf

指定include的目录和文件

interface: 0.0.0.0

端口监听地址

ipv6: FALSE

IPV6地址是否监听

publish_port:

ZeroMQ消息发布端口

user: root

saltstack运行的用户

max_open_files: 100000

最大文件打开限制不能高于硬限制,每个连接至少要使用一个文件描述符。

worker_threads: 5

saltstack工作的线程数目,不能低于3

ret_port:4506

saltstack的消息接听端口

pidfile: /var/run/salt-master.pid

salt-master的进程pid文件位置

root_dir: /

salt-stack工作的根目录,改变它可以使salt从另外一个目录开始运行,好比chroot

pki_dir: /etc/salt/pki/master

公钥存储目录

cachedir: /var/cache/salt/master

jobs和cache的缓存目录

extension_modules: <no default>

自定义模块的目录

module_dirs: <no default>

自定义模块的同步目录

verify_env: True

服务启动时进行权限设置与验证

keep_jobs: 24

设置jobs缓存的过期时间,单位是小时

timeout: 5

设置salt命令和api的默认超时值。 默认值为5秒。

loop_interval: 60

saltstack进程检测周期,清理作业缓存并执行调度程序等。单位秒

output: nested

设置salt命令使用的默认输出器。

show_timeout: True

开启minion timeout提示

color: True

开启output颜色提示

strip_colors: False

不要从嵌套结果和状态输出中剥离彩色输出(默认情况下为true)。

sock_dir: /var/run/salt/master

设置用于保存unix套接字的目录

enable_gpu_grains: False

设置grains收集主控制器的GPU信息

job_cache: True

jobs缓存,对于大型部署(超过5000次)可能是负担,不建议开启。

minion_data_cache: True

开启minion的grains和pillar数据的缓存

event_return: mysql

设置return存储

event_return_queue: 0

启用event_returns可能会对存储系统造成重大负担。默认情况不排队。

max_event_size: 1048576

允许消息的最大大小,该值以字节表示。

ping_on_rotate: False

建议通过使用'key'标签监听'aes_key_rotate'事件来处理此事件,并适当地执行。

preserve_minion_cache: False

删除key时是否删除cache数据

con_cache: False

此高速缓存并大大提高了max_minions的性能。

安全设定:

open_mode: False

Ture的话,就会关闭身份验证,这仅适用于高度安全的环境

auto_accept: False

设置自动签证,默认是False不自动签证

autosign_timeout: 120

自动签证的超时时间,单位是秒

autosign_file: /etc/salt/autosign.conf

定义自动签名规则文件,支持正则表达式以及全局行

autoreject_file: /etc/salt/autoreject.conf

定义自动拒绝签证的规则文件,可以覆盖autosign_file定义的成员资格

permissive_pki_access: False

设置pki文件访问权限

client_acl:

定义用户模块执行限制

client_acl_blacklist:

定义模块和用户黑名单

sudo_acl: False

关闭利用sudo后client_acl限制

external_auth:

指定外部认证方式

token_expire: 43200

token过期时间,单位是秒,默认是12小时

file_recv: False

是否允许minions推送文件到master端

file_recv_max_size: 100

对可以推送到主机的文件的大小设置一个硬限制。单位是MB 默认值:100

Salt-SSH配置:

roster_file: /etc/salt/roster

roster文件的路径

ssh_minion_opts:

salt-ssh不使用本地配置。 可以在名册上(“minion_opts”)上以覆盖方式覆盖

主模块管理

runner_dirs: []

管理主模块的加载方式。

cython_enable: False

是否为主模块启用Cython

状态系统设置

state_top: top.sls

设置state入口文件

master_tops:

设置其他的top方式

external_nodes: None

允许Salt收集通常放在顶级文件中的数据是将返回ENC数据的可执行文件。

renderer: yaml_jinja

设置呈现状态数据的方式

jinja_trim_blocks: False

如果这被设置为True,则在删除Jinja块后的第一个换行符。默认为False

jinja_lstrip_blocks: False

如果将此设置为True,则前导空格和制表符将从行的开头移除到块。 默认为False

failhard: False

failhard选项会在状态执行中检测到第一个故障后立即停止,默认为False

state_verbose: True

state_output: full

默认情况下,打印所有数据。

state_aggregate: False

自动聚合支持mod_aggregate的所有状态或传递状态模块名称列表以自动聚合这些类型。

state_events: False

在状态运行中的每个功能完成执行时发送进度事件。

文件服务器设置

file_roots:

文件服务器的根目录

hash_type: md5

文件检验的hash类型,支持md5,sha1,sha224,sha256,sha384和sha512。

file_buffer_size: 1048576

文件服务器中的缓冲区大小

file_ignore_regex:

设置同步file忽略文件正则

file_ignore_glob:

fileserver_backend:

Salt支持一个模块化的文件服务器后端系统,该系统允许master直接链接到第三方系统来收集和管理可用于客户端的文件。

fileserver_followsymlinks: False

设置fireserver允许文件链接

fileserver_ignoresymlinks: True

忽略fireserver允许文件链接

fileserver_limit_traversal: False

设置fireserver的遍历限制

fileserver_events: False

文件服务器可以在每次更新文件服务器时触发事件,默认情况下禁用

gitfs_provider: gitpython

Gitfs驱动可以由两个python模块之一提供:GitPython或pygit2。 如果使用pygit2,则还必须安装libgit2和git。

gitfs_remotes:

fileserver gitfs_remotes地址

gitfs_ssl_verify: True

gitfs_ssl_verify选项指定在联系gitfs后端时是否忽略ssl证书错误。默认值True以外的任何值都是安全性问题

gitfs_root: somefolder/otherfolder

gitfs_root选项可以从存储库中的子目录中提供文件。 路径是相对于存储库的根而定义的,默认为存储库根。

Pillar设置

pillar_roots:

设置pillar_roots目录

ext_pillar:

设置ext_pillar方式

ext_pillar_first: False

ext_pillar_first选项允许在文件系统illar之前填充外部pillar源。

pillar_gitfs_ssl_verify: True

开启证书验证,将此标志设置为除默认值True以外的任何值都是安全性问题

pillar_opts: False

开启pillar读取opts参数

pillar_safe_render_error: True

因为错误可能包含模板数据,将提供不该有的信息,如密码。当设置为true时,错误消息将仅显示:呈现SLS'my.sls'失败。

pillar_source_merging_strategy: smart

配置不同来源之间的合并策略,它接受四个值:recurse,aggregate,overwrite或smart。

Syndic settings

order_masters: False

设置开启syndic

syndic_master: masterofmaster

如果这个master将运行一个salt syndic守护进程,设置syndic_master的地址

syndic_master_port: 4506

设置syndic_master的监听端口

syndic_pidfile: /var/run/salt-syndic.pid

设置syndic的pid文件

syndic_log_file: syndic.log

设置syndic的日志文件

对等发布设置

peer:

对等设置

peer_run:

此设置与对等设置相同,除了打开运行程序而不是模块功能。 所有对等运行程序支持都默认关闭,必须在使用前启用。

日志设置

log_file: /var/log/salt/master

naster日志文件位置

log_level: warning

日志级别

log_level_logfile: warning

日志记录级别

log_datefmt: '%H:%M:%S'

日志时间格式

log_datefmt_logfile: '%Y-%m-%d %H:%M:%S'

日志文件的记录的时间格式

log_fmt_console:

设置console日志格式

log_fmt_logfile:

设置日志记录日志格式

log_granular_levels: {}

设置指定lib库的日志级别

节点组

nodegroups:

设置了一个节点组后面指定组以及组里面有哪些主机,配置文件里面有例子

范围集群设置

range_server: range:80

提供集群信息的范围服务器(和可选端口)

windows软件回收设置

win_repo: '/srv/salt/win/repo'

回收主机的文件

win_repo_mastercachefile:

master的回购缓存文件的位置

win_gitrepos:

git存储库列表包含在本地的repo中

Returner设置

return: mysql

minion返回的结果被什么使用

4、 minion配置文件详解

# vim /etc/salt/minion

配置文件及默认值

注释

主配置文件设置

default_include: minion.d/*.conf

include配置文件

master: salt

master端的地址

random_master: False

设置多master随机请求

master_shuffle: False

如果master_type设置为故障转移这里启用

master_type: str

配置为故障转移,通过将此值设置为“str”来配置多个热主机。

master_alive_interval: 30

设置了故障转移,默认是30秒轮询检查一次,要完全禁用间隔,请将值设置为-1。

ipv6: False

设置Ipv6地址监听

retry_dns: 30

解析master主机名失败之后30秒再尝试,设置为0为不尝试

master_port: 4506

设置主应答和认证服务器使用的端口。

user: root

运行salt的用户

sudo_user: saltdev

设置sudo_user将导致salt将sudo下的所有执行模块运行到sudo_user中给出的用户。

pidfile: /var/run/salt-minion.pid

守护进程的pid文件

root_dir: /

saltstack的工作目录

pki_dir: /etc/salt/pki/minion

存储pki信息的目录

id:

明确地声明这个使用的id,如果设置,id将是python调用返回的主机名。

append_domain:

将域附加到主机名这对于socket.getfqdn()不会产生FQDN(例如Solaris)的系统

grains:

设置grains信息

cachedir: /var/cache/salt/minion

minion的cache数据目录

verify_env: True

在启动时验证并设置配置目录的权限。

cache_jobs: False

是否开启jobs的缓存

sock_dir: /var/run/salt/minion

minion的sock目录

output: nested

设置salt-call命令使用的默认输出器。 默认值为“nested”。

color: True

默认输出为彩色。 要禁用彩色输出,请将颜色值设置为False。

strip_colors: False

从嵌套结果和状态输出中剥离彩色输出。

backup_mode: minion

设置备份文件,唯一有效的设置是minion,默认禁用

acceptance_wait_time: 10

等待master接收minion的公钥,10秒尝试一次直到成功。

acceptance_wait_time_max: 0

等待公钥认证的最大值。 如果设置为零,重新连接尝试之间的时间将保持不变。

rejected_retry: False

设置如果master拒绝minion的公钥,是否继续尝试而不是退出。

random_reauth_delay: 60

当主密钥更改时,minion将尝试重新认证,设置随机数防止客户端同时向master端请求。

auth_timeout: 60

设置等待认证的超时时间为60秒,然后再重新发起请求直到成功连接为止。

auth_tries: 7

尝试验证时可接受的SaltReqTimeoutError连续数。

auth_safemode: False

在ping_interval期间SaltReqTimeoutError导致身份验证失败是否重新启动子服务进程。

ping_interval: 0

Ping Master确保连接活着(单位分钟)。

loop_interval: 60

在评估调度程序和运行清理任务之间等待几分钟的时间。这默认为60秒

grains_refresh_every: 1

定期检查其grains,10分钟是合理值,单位是分钟。

grains_cache: False

是否做grains的缓存

grains_cache_expiration: 300

启用grains缓存之后这里才有作用,缓存过期时间,单位是秒

ipc_mode: ipc

Windows平台缺少posix IPC,必须依赖于较慢的基于TCP的进程间通信。

tcp_pub_port: 4510

tcp模式下minion的pub端口

tcp_pull_port: 4511

tcp模式下minion的pull端口

max_event_size: 1048576

最大消息的大小,单位为字节。

master_alive_interval: 30

轮询检测master是否从故障恢复的秒数。

minion模块设置

disable_modules: [cmd,test]

禁用特定的模块

disable_returners: []

modules_max_memory: -1

为导入的模块指定最大大小单位是字节。此功能目前仅支持* nix操作系统需要psutil。

状态管理设置

renderer: yaml_jinja

状态管理系统执行所有状态模板默认渲染器是yaml_jinja。

failhard: False

failhard选项会在状态执行中检测到第一个故障后立即停止。 默认为False。

autoload_dynamic_modules: True

在运行之前自动加载动态模块

clean_dynamic_modules: True

如果动态模块不在服务器上面将会自动从服务器中删除

environment: None

设置minion的运行环境。用来做环境隔离用的。

state_top: top.sls

设置state入口文件

文件目录设置

file_client: remote

设置文件客户端。 默认是remote远程。可以设置为local从本地查找文件。

file_roots:/srv/salt

本地文件的file服务目录

fileserver_limit_traversal: False

Salt文件服务器是否将完全递归到所有定义的环境中以尝试查找文件。

hash_type: md5

文件检验hash类型

pillar_roots:/srv/pillar

果file_client设置为local,则会在本地搜索Salt pillar,这里是其目录

安全设定

open_mode: False

Ture的话,就会关闭身份验证,这仅适用于高度安全的环境

permissive_pki_access: False

设置pki文件访问权限

state_verbose: True

设置可用于更改状态系统数据打印到显示器的方式。 默认情况下打印所有数据。

state_output: full

state_output_diff: False

是否忽略混乱日志

state_output_profile: True

更改每个状态运行时是否显示配置文件信息。

master_finger: ''

在主密钥交换之前,主公钥的指纹验证salt主人的身份。这里是master的指纹。

线程设置

multiprocessing: True

是否开启多线程支持接,收到一个发布时,会生成一个新进程,并在其中执行该命令。

日志设置

log_file: /var/log/salt/minion

minion的日志文件位置

log_level: warning

日志级别

log_level_logfile: warning

日志记录级别

log_datefmt: '%H:%M:%S'

日志时间格式

log_datefmt_logfile: '%Y-%m-%d %H:%M:%S'

日志文件的记录的时间格式

log_fmt_console:

设置console日志格式

log_fmt_logfile:

设置日志记录日志格式

log_granular_levels: {}

设置指定lib库的日志级别

zmq_monitor: False

是否记录的所有事件将包括字符串'ZeroMQ事件'。

长连接配置

tcp_keepalive: True

是否开启tcp长连接

tcp_keepalive_idle: 300

默认300在5分钟后发送第一个keepalive,在Linux上,OS默认(-1)通常为7200秒

tcp_keepalive_cnt: -1

多少个丢失的探测器来考虑连接丢失。默认值-1使用操作系统默认值通常在Linux上为9

tcp_keepalive_intvl: -1

keepalives的检测频率。 默认值-1使用操作系统默认值,通常在Linux上为75秒

Returner设置

return: mysql

minion返回的结果被什么使用

三、配置认证

1)在服务端上操作

salt-key -L

说明:-a :accept ,-A:accept-all,-d:delete,-D:delete-all。可以使用 salt-key 命令查看到已经签名的客户端。此时我们在客户端的 /etc/salt/pki/minion 目录下面会多出一个minion_master.pub 文件。 2)测试验证 示例1: salt '*' test.ping                  //检测通讯是否正常,也可以指定其中一个 'slaver.test.com'

示例2:  salt '*' cmd.run   'df -h'        //远程执行命令

说明: 这里的 * 必须是在 master 上已经被接受过的客户端,可以通过 salt-key 查到,通常是我们已经设定的 id 值。关于这部分内容,它支持通配、列表以及正则。 比如两台客户端 web10、web11, 那我们可以写成  salt 'web*'    salt 'web1[02]'  salt -L 'web10,web11'   salt -E 'web(10|11)' 等形式,使用列表,即多个机器用逗号分隔,而且需要加-L,使用正则必须要带-E选项。 它还支持 grains 和 pillar,分别加 -G 和 -I 选项,下面会介绍到。 salt-key命令用法:     -a 后面跟主机名,认证指定主机     -A 认证所有主机     -r 跟主机名,拒绝指定主机     -R 拒绝所有主机     -d 跟主机名,删除指定主机认证     -D 删除全部主机认证

    -y 省略掉交互,相当于直接按了y

如果出现salt '*' test.ping出错Minion did not return. [Not connected]

解决这种错误,需要删除minion端的key,重新认证。

# rm -rf /etc/salt/pki/minion/minion_master.pub # service restart salt-minion  //重启minion端

四、grains 和 pillar 下面来介绍 grains 和 pillar 1、grains grains 是在 minion(客户端)启动时收集到的一些信息,比如操作系统类型、网卡ip等。  使用命令:

代码语言:javascript
复制
[iyunv@master ~]# salt 'slaver.test.com' grains.ls            //列出所有的 grains 项目名字
[iyunv@master ~]# salt 'slaver.test.com' grains.items      //列出所有的 grains 项目名以及值

grains的信息并不是动态的,并不会时时变更,它只是在 minion 启动时收集到的。grains 也可以做配置管理。 下面我们来自定义 grains 1)客户端上配置

代码语言:javascript
复制
[iyunv@slaver ~]# vim /etc/salt/grains               //添加如下,注意冒号后有空格
role: nginx
env: test
myname: tpp

或者

代码语言:javascript
复制
[iyunv@slaver ~]# vim /etc/salt/minion            //在最下面添加或更改
grains:
  role:
    - nginx
  env:
    - test
  myname:
    - tpp

重启minion服务 systemctl restart salt-minion

2)服务端获取 grains

代码语言:javascript
复制
[iyunv@master ~]# salt 'slaver.test.com' grains.item role env myname       //列出多个
代码语言:javascript
复制
[iyunv@master ~]# salt 'slaver.test.com' grains.get myname                    //列出单个

注意:grains 在远程执行命令时很方便。我们可以按照 grains 的一些指标来操作。比如把所有的 web 服务器的 grains 的 role 设置为 nginx,那这样我们就可以批量对 nginx 的服务器进行操作了:

代码语言:javascript
复制
[iyunv@master ~]# salt -G role:nginx cmd.run 'hostname'
[iyunv@master ~]# salt -G os:CentOS cmd.run 'hostname'

2、pillar pillar 和 grains 不一样,是在 master 上定义的,并且是针对 minion 定义的一些信息。像一些比较重要的数据(密码)可以存在 pillar 里,还可以定义变量等。 查看指定minion的 pillar 值:

代码语言:javascript
复制
[iyunv@master ~]# salt 'slaver.test.com' pillar.items1)服务端自定义配置 pillar
代码语言:javascript
复制
[iyunv@master ~]# vim /etc/salt/master                    //找到如下内容,去掉#号
pillar_roots:
  base:
    - /srv/pillar
[iyunv@master ~]# mkdir /srv/pillar
[iyunv@master ~]# vim /srv/pillar/test.sls                   //自定义配置文件,内容如下
conf: /etc/123.conf
myname: tpp
[iyunv@master ~]# vim /srv/pillar/top.sls                   //总入口文件,内容如下
base:
  'slaver.test.com':
    - test

重启master

代码语言:javascript
复制
[iyunv@master ~]# /etc/init.d/salt-master restart

注意:当更改完 pillar 配置文件后,我们可以通过刷新 pillar 配置来获取新的 pillar 状态:

代码语言:javascript
复制
[iyunv@master ~]# salt '*' saltutil.refresh_pillar

2)验证:

代码语言:javascript
复制
[iyunv@master ~]# salt 'slaver.test.com' pillar.items
代码语言:javascript
复制
[iyunv@master ~]# salt 'slaver.test.com' pillar.item conf
[iyunv@master ~]# salt 'slaver.test.com' pillar.item myname

pillar 同样可以用来作为 salt 的匹配对象。比如:

代码语言:javascript
复制
[iyunv@master ~]# salt -I 'conf:/etc/123.conf' test.ping
[iyunv@master ~]# salt -I 'conf:/etc/123.conf' cmd.run 'w'

五、配置管理安装Apach

下面进行的演示是远程通过 yum 方式安装 Apache。步骤如下:

1、配置

代码语言:javascript
复制
[iyunv@master ~]# vim /etc/salt/master        //打开如下内容的注释
file_roots:
  base:
    - /srv/salt

注意:环境: base、dev(开发环境)、test(测试环境)、prod(生产环境)。

代码语言:javascript
复制
[iyunv@master ~]# mkdir /srv/salt
[iyunv@master ~]# vim /srv/salt/top.sls
base:
  'slaver.test.com':
    - apache

注意:若换成 '*',则表示在所有的客户端执行 apache 模块。

代码语言:javascript
复制
[iyunv@master ~]# vim /srv/salt/apache.sls
apache-service:
  pkg.installed:
    - names:                //如果只有一个服务,那么就可以写成 –name: httpd 不用再换一行
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True

注意:apache-service 是自定义的 id 名。pkg.installed 为包安装函数,下面是要安装的包的名字。service.running 也是一个函数,来保证指定的服务启动,enable 表示开机启动。 2、执行命令

代码语言:javascript
复制
[iyunv@master ~]# salt 'slaver.test.com' state.highstate         //执行时间比较长,因为要安装httpd

如上图所示,说明 Apache 远程安装已成功。 六、文件目录管理

1、文件管理 1)服务端配置 接着编辑之前的 top.sls 文件

代码语言:javascript
复制
[iyunv@master ~]# vim /srv/salt/top.sls              //修改为如下
base:
  'slaver.test.com':
    - filetest

新建 filetest.sls 文件

代码语言:javascript
复制
[iyunv@master ~]# vim /srv/salt/filetest.sls
file-test:
  file.managed:
    - name: /tmp/filetest.txt
    - source: salt://test/123/1.txt
    - user: root
    - group: root
    - mode: 644

注意:第一行的 file-test 为自定的名字,表示该配置段的名字,可以在别的配置段中引用它;source指定文件从哪里拷贝,这里的 test 目录相当于是 /srv/salt/test 目录;name指定远程客户端要生成的文件。 新建所要测试的源文件

代码语言:javascript
复制
[iyunv@master ~]# mkdir -p /srv/salt/test/123/
[iyunv@master ~]# vim /srv/salt/test/123/1.txt
msiyuetian.blog.iyunv.com

执行命令:

代码语言:javascript
复制
[iyunv@master ~]# salt 'slaver.test.com' state.highstate

2)客户端验证

2、目录管理 1)服务端配置

接着编辑之前的 top.sls 文件

代码语言:javascript
复制
[iyunv@master ~]# vim /srv/salt/top.sls              //修改为如下
base:
  'slaver.test.com':
    - filedir

新建 filedir.sls 文件

代码语言:javascript
复制
[iyunv@master ~]# vim /srv/salt/filedir.sls
file-dir:
  file.recurse:
    - name: /tmp/testdir
    - source: salt://test1/234
    - user: root
    - file_mode: 644
    - dir_mode: 755
    - mkdir: True
    - clean: True

注意:clean: True 源删除文件或目录,目标也会跟着删除,否则不会删除。可以默认设置为 False。 新建所要测试的源目录

代码语言:javascript
复制
[iyunv@master ~]# mkdir -p /srv/salt/test1/234
[iyunv@master ~]# vim /srv/salt/test1/234/2.txt
msiyuetian.blog.iyunv.com

执行命令:

代码语言:javascript
复制
[iyunv@master ~]# salt 'slaver.test.com' state.highstate

2)客户端验证

3)测试增删功能 在服务端新建 mydir 目录以及 testdir.add 文件,删除 2.txt 文件:

代码语言:javascript
复制
[iyunv@master ~]# mkdir /srv/salt/test1/234/mydir
[iyunv@master ~]# touch /srv/salt/test1/234/mydir/111.txt
[iyunv@master ~]# touch /srv/salt/test1/234/testdir.add
[iyunv@master ~]# rm -rf /srv/salt/test1/234/2.txt

执行命令:

代码语言:javascript
复制
[iyunv@master ~]# salt 'slaver.test.com' state.highstate

客户端验证

注意:由上图可知,成功在客户端 /tmp/testdir/ 目录下创建了 mydir 目录以及 testdir.add 文件,并删除 2.txt 文件。这里值得注意的是要成功创建 mydir 目录,前提是 mydir 目录下要有文件,如这里的111.txt 文件,如若没有,客户端是不会创建 mydir 目录的。 七、远程执行


前面提到远程执行命令 test.ping,cmd.run,点前面的是模块,点后面的是函数;这样总归是不太规范化,下面详细介绍怎么远程执行命令和脚本。

1、远程执行命令

1)服务端配置

接着编辑之前的 top.sls 文件

代码语言:javascript
复制
[iyunv@master ~]# vim /srv/salt/top.sls              //修改为如下
base:
  'slaver.test.com':
    - cmdtest

新建 cmdtest.sls 文件

代码语言:javascript
复制
[iyunv@master ~]# vim /srv/salt/cmdtest.sls
cmd-test:  cmd.run:
    - onlyif: test -f /tmp/123.txt
    - names:
      - touch /tmp/cmdtest.txt
      - mkdir /tmp/cmdtest
    - user: root

注意:条件 onlyif 表示若 /tmp/123.txt 文件存在,则执行后面的命令;可以使用 unless,两者正好相反。 执行命令:

代码语言:javascript
复制
[iyunv@master ~]# salt 'slaver.test.com' state.highstate

2)客户端验证

2、远程执行脚本 1)服务端配置

接着编辑之前的 top.sls 文件

代码语言:javascript
复制
[iyunv@master ~]# vim /srv/salt/top.sls              //修改为如下
base:
  'slaver.test.com':
    - shelltest

新建 shelltest.sls 文件

代码语言:javascript
复制
[iyunv@master ~]# vim /srv/salt/shelltest.sls
shell-test:
  cmd.script:
    - source: salt://test/1.sh
    - user: root

新建 1.sh 脚本文件

代码语言:javascript
复制
[iyunv@master ~]# vim /srv/salt/test/1.sh
#!/bin/bash
touch /tmp/shelltest.txt
if [ -d /tmp/shelltest ]
then
    rm -rf /tmp/shelltest
else
    mkdir /tmp/shelltest
fi

执行命令:

代码语言:javascript
复制
[iyunv@master ~]# salt 'slaver.test.com' state.highstate

2)客户端验证

注意:通过上面的例子,我们实现了远程执行脚本;如果我们想一键远程安装 LAMP 或者 LNMP,那么只需把本例中的 1.sh 脚本替换成 一键安装的脚本就行。 八、管理任务计划


1、建立 cron 1)服务端配置 编辑 top.sls 文件

代码语言:javascript
复制
[iyunv@master ~]# vim /srv/salt/top.sls              //修改为如下
base:
  'slaver.test.com':
    - crontest

编辑 crontest.sls 文件

代码语言:javascript
复制
[iyunv@master ~]# vim /srv/salt/crontest.sls
cron-test:
  cron.present:
    - name: /bin/touch /tmp/111.txt
    - user: root
    - minute: '*'
    - hour: 20
    - daymonth: 1-10
    - month: '3,5'
    - dayweek: '*'

注意,*需要用单引号引起来。当然我们还可以使用 file.managed 模块来管理 cron,因为系统的 cron都是以配置文件的形式存在的。

执行命令:

代码语言:javascript
复制
[iyunv@master ~]# salt 'slaver.test.com' state.highstate

2)客户端验证

2、删除 cron

1)服务端配置 我们只需修改 crontest.sls 文件

代码语言:javascript
复制
[iyunv@master ~]# vim /srv/salt/crontest.sls

把 cron.present: 改成 cron.absent: 注意:两者不能共存,要想删除一个 cron,那之前的 present 就得替换掉或者删除掉。 执行命令:

代码语言:javascript
复制
[iyunv@master ~]# salt 'slaver.test.com' state.highstate

2)客户端验证

代码语言:javascript
复制
[iyunv@slaver ~]# crontab -l           //可查看到该任务计划已删除

九、Saltstack 常用命令 1、拷贝文件到客户端

代码语言:javascript
复制
[iyunv@master ~]# salt 'slaver.test.com' cp.get_file salt://apache.sls /tmp/cp.txt
slaver.test.com:
    /tmp/cp.txt

2、拷贝目录到客户端

代码语言:javascript
复制
[iyunv@master ~]# salt 'slaver.test.com' cp.get_dir salt://test /tmp
slaver.test.com:
    - /tmp/test/1.sh
    - /tmp/test/123/1.txt

3、显示存活的客户端

代码语言:javascript
复制
[iyunv@master ~]# salt-run manage.up

4、命令下执行服务端的脚本

代码语言:javascript
复制
[iyunv@master ~]# vim /srv/salt/test/shell.sh

#! /bin/bash
echo "msiyuetian.blog.iyunv.com" > /tmp/shell.txt
[iyunv@master ~]# salt 'slaver.test.com' cmd.script salt://test/shell.sh

客户端查看

参考文档

https://docs.saltstack.com/en/latest/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、saltstack简介
    • 3、master配置文件详解
    • 三、配置认证
    相关产品与服务
    多因子身份认证
    多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档