saltstack的安装部署及使用

1. saltstack

1. 简介

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

  • 远程命令执行
  • 配置管理(服务,文件,cron,用户,组)
  • 云管理。

支持系统:大多数都支持,windows 上不支持安装 master。

2. 安装配置

1. 准备工作

准备两台机器,这两台机器都关闭 selinux,清空 iptables 规则并保存。
master:192.168.44.201
slaver:192.168.44.202

2、编辑 hosts 文件

两台都设置,若机器太多,可以通过搭建 DNS,则不用在每台机器上设置这个

[root@localhost ~]# vim /etc/hosts

192.168.44.201 server.com
192.168.44.202 client.com

3.服务器端

[root@server ~]# wget https://repo.saltproject.io/yum/redhat/salt-repo-latest.el7.noarch.rpm
[root@server ~]# rpm -ivh salt-repo-latest.el7.noarch.rpm
[root@server ~]# yum install salt-master -y
[root@server ~]# yum install salt-minion -y

4. 客户端

[root@client ~]#  yum install salt-minion -y 

5. 配置客户端

[root@client ~]# vim /etc/salt/minion
master: 192.168.44.201

6. 启动服务

[root@server ~]# systemctl restart salt-master
[root@server ~]# systemctl restart salt-minion
[root@client ~]# systemctl restart salt-minion

3. 配置认证

1. 服务端操作

查看都有哪些minion端的密钥

[root@server ~]# salt-key
Accepted Keys:
Denied Keys:
Unaccepted Keys:
client.com
server.com
Rejected Keys:

在这里插入图片描述

同意minion端的key

[root@server ~]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
client.com
server.com
Proceed? [n/Y] y
Key for minion client.com accepted.
Key for minion server.com accepted.
[root@server ~]# salt-key
Accepted Keys:
client.com
server.com
Denied Keys:
Unaccepted Keys:
Rejected Keys:

在这里插入图片描述

说明:

  • -a :accept
  • -A:accept-all
  • -d:delete
    -D:delete-all
    可以使用 salt-key 命令查看到已经签名的客户端。此时我们在客户端的 /etc/salt/pki/minion 目录下面会多出一个minion_master.pub 文件。
  • -d 删除单个key,也支持*号模糊匹配删除 (针对key的操作)
  • -D 删除所有key,慎用 (针对key的操作)
  • -L 列表 (远程执行、列表key等)
  • -A 同意所有key (针对key的操作)
  • -a 同意单个,可以用*号迷糊匹配添加 (针对key的操作)
  • -G 匹配Grains (远程执行)
  • -I 匹配Pillar (远程执行)
  • -E 支持正则表达式 (远程执行)
  • -S 指定客户端的ip地址 (远程执行)
  • -C 一条远程执行的命令同时支持多个参数 (远程执行)
  • -N 支持节点组 (远程执行)

测试saltstack的master端与minion端通讯

[root@server ~]# salt '*' test.ping
client.com:
True
server.com:
True
[root@server ~]# salt 'client*' test.ping
client.com:
True

在这里插入图片描述

4. 模块使用

1. saltstack使用之远程执行shell命令

[root@server ~]# salt "*" cmd.run 'id robin'
server.com:
uid=1000(robin) gid=1000(robin) groups=1000(robin)
client.com:
uid=1000(robin) gid=1000(robin) groups=1000(robin)

在这里插入图片描述

2. saltstack远程执行之service模块

[root@server ~]# salt "*" service.available sshd
client.com:
True
server.com:
True

在这里插入图片描述

# reload重启服务
[root@server ~]# salt "*" service.reload sshd
client.com:
True
server.com:
True

在这里插入图片描述

# status查看服务状态
[root@server ~]# salt "*" service.status sshd
client.com:
True
server.com:
True

在这里插入图片描述

stop关闭服务
[root@server ~]# salt "*" service.stop httpd
client.com:
False
server.com:
False

在这里插入图片描述

start启动服务
[root@server ~]# salt "*" service.start httpd
client.com:
False
server.com:
False
get_all显示所有运行的服务
[root@server ~]# salt "*" service.get_all

在这里插入图片描述

拷贝文件到远程
salt 'client.com' cp.get_file salt://top.sls /tmp/cp.txt

在这里插入图片描述

[root@server srv]# vim /etc/salt/master
file_roots:
base:
- /srv/salt/

在这里插入图片描述

[root@server salt]# ls /srv/salt/top.sls
/srv/salt/top.sls
拷贝目录到远程
[root@server salt]# salt 'client.com' cp.get_dir salt://test /tmp
client.com:
- /tmp/test/1.sh
- /tmp/test/test.txt
- /tmp/test/xx/123.txt

显示存活的客户端
[root@server salt]# salt-run manage.up

执行脚本
[root@server salt]# salt 'client.com' cmd.script salt://test/shell.sh

5. grains和pillar

1.grains

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

列出所有的 grains 项目名字

[root@server ~]# salt 'client.com' grains.ls

列出所有的 grains 项目名以及值

[root@server ~]# salt 'client.com' grains.items

获取指定项目

[root@server ~]# salt 'client.com' grains.item master
client.com:
----------
master:
192.168.0.201

在这里插入图片描述

grains的信息并不是动态的,并不会时时变更,它只是在 minion 启动时收集到的。grains 也可以做配置管理。

下面我们来自定义 grains
客户端上配置:

[root@client ~]# cat /etc/salt/grais
#grains:
#  roles:
#    - webserver
#    - memcache
#  deployment: datacenter4
#  cabinet: 13
#  cab_u: 14-15


或者

[root@client ~]# vim /etc/salt/minion
grains:
  roles:
    - nginx
  env:
    - test
  myname:
    - tpp

重启minion服务

[root@client ~]# systemctl restart salt-minion

服务端获取 grains

root@server ~]# salt 'client.com' grains.item role env myname

在这里插入图片描述

2. pillar

pillar是saltstack最重要的组件之一,其作用是定义与被控主机相关的任何数据,定义好的数据可以直接被其他组件使用,如被模板,state,api等使用。
pillar 和 grains 不一样,是在 master 上定义的,并且是针对 minion 定义的一些信息。像一些比较重要的数据(密码)可以存在 pillar 里,还可以定义变量等。

查看指定minion的 pillar 值:

[root@server ~]# salt 'client.com' pillar.items
client.com:
----------

在这里插入图片描述

pillar自定义配置

[root@server ~]# vim /etc/salt/master #找到如下内容,去掉#号
pillar_roots:
base:
- /srv/pillar

在这里插入图片描述

[root@server ~]# vim /etc/salt/master
[root@server ~]# mkdir /srv/pillar

自定义配置文件,内容如下

[root@server ~]# vim /srv/pillar/test.sls
[root@server ~]# cat /srv/pillar/test.sls
conf: /tmp/123.conf
myname: tpp

总入口文件,内容如下

[root@server ~]# cat /srv/pillar/top.sls
base:
'client.com':
- test
[root@server ~]# salt 'client.com' pillar.items
client.com:
----------
conf:
/tmp/123.conf
myname:
tpp

在这里插入图片描述

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

[root@server ~]# systemctl restart salt-master
[root@server ~]# salt '*' saltutil.refresh_pillar
client.com:
True
server.com:
True

在这里插入图片描述

[root@server ~]# salt 'client.com' pillar.items
client.com:
----------
conf:
/tmp/123.conf
myname:
tpp
[root@server ~]# salt 'client.com' pillar.item myname
client.com:
----------
myname:
tpp

[root@server ~]# salt 'client.com' pillar.item conf
client.com:
----------
conf:
/tmp/123.conf

在这里插入图片描述

6. 实例一

项目一

1.下面进行的演示是远程通过 yum 方式安装 Apache
注意:环境: base、dev(开发环境)、test(测试环境)、prod(生产环境)。
pkg模块
参数:

  • installed:安装
  • latest:将软件更新到最新
  • removed:删除软件
  • pkgs:安装多个软件包时,一次全部安装(推荐)
  • names:安装多个软件包时,一次安装一个(不推荐)
[root@server srv]# vim /etc/salt/master
file_roots:
base:
- /srv/salt/
# 注: 修改此处配置时,需要先将之前修改的配置进行注释
[root@server srv]# mkdir /srv/salt/
[root@server ~]# vim /srv/salt/top.sls
[root@server srv]# cat /srv/salt/top.sls
base:
  'client.com':
    - apache
[root@server ~]# vim /srv/salt/apache.sls
[root@server srv]# cat /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 表示开机启动。

2.重启服务

[root@server srv]# systemctl restart salt-master

3.执行命令

[root@server srv]# salt 'client.com' state.highstate

在这里插入图片描述

后面由于是cat查看的,所以直接复制的话可能会出现错误。
使用salt ‘*’ pillar.items检查一下格式问题

项目二

文件管理
file.managed
参数:

  • user:用户
  • group:用户组
  • mode:文件属性(如644)
  • template:模板类型(比如:jinja)
  • makedirs:默认为False,如果被管理的文件父目录不存在则失败,如果为True,如果父目录不存在则会创建
  • dir_mode:设置创建目录的权限
  • replace:默认为True,若设置为False将不替换文件内容,但是会更改权限
  • context:覆盖文件上下文参数
  • default:默认上下文参数
  • backup:备份功能,有改动才备份,会备份到minion下 的:/var/cache/salt/minion/backup_files
  • show_off: 设置成False,则不显示更改的不同点,默认为True
  • create: 默认为True,如果设置为False,在文件存在的情况下则只更改文件
  • contents: 默认为空,添加字符串到文本中
[root@server srv]# cat /srv/salt/top.sls
base:
  'client.com':
    - filetest
[root@server srv]# cat /srv/salt/filetest.sls
file-test:
file.managed:
- name: /tmp/filetest.txt
- source: salt://test/test.txt
- user: root
- group: root
- mode: 777

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

[root@server srv]# mkdir /srv/salt/test/
[root@server srv]# cat /srv/salt/test/test.txt
123123
[root@server srv]# salt 'client.com' state.highstate

客户端验证:

[root@client ~]# cat /tmp/filetest.txt
123123

项目三:

目录管理:

[root@server srv]# cat /srv/salt/top.sls
base:
'client.com':
- filedir
[root@server srv]# cat /srv/salt/filedir.sls
file-dir:
file.recurse:
- name: /tmp/testdir
- source: salt://test/xx
- user: root
- file_mode: 777
- dir_mode: 777
- mkdir: True
- clean: True
[root@server srv]# mkdir /srv/salt/test/xx
[root@server srv]# cat /srv/salt/test/xx/xx.txt
aaaaa
[root@server srv]# salt 'client.com' state.highstate
clean: True 功能
[root@server srv]# rm -rf /srv/salt/test/xx /xx.txt
[root@server srv]# touch /srv/salt/test/xx/123.txt
[root@server srv]# salt 'client.com' state.highstate

客户端:

[root@client ~]# ls /tmp/testdir/
123.txt

项目四

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

  • name:要执行的命令
  • unless:用于检查的命令,只有unless指向的命令返回False时才执行name那行的命令
  • cwd:执行命令时的目录,默认为root
  • user:以指定用户身份运行命令
  • group:以指定用户组身份运行命令
  • run:运行name后的命令
  • require:确保某个模块执行之后才执行这个模块
[root@server srv]# cat /srv/salt/top.sls
base:
'client.com':
- cmdtest
[root@server srv]# cat /srv/salt/cmdtest.sls
cmd-test:
cmd.run:
- onlyif: test -f /tmp/xx.txt
- names:
- touch /tmp/cmdtest.txt
- mkdir /tmp/cmdtest
- user: root
[root@server srv]# salt 'client.com' state.highstate

客户端:

[root@client ~]# ls /tmp/
cmdtest
cmdtest.txt

项目五

远程执行脚本:

[root@server srv]# cat /srv/salt/top.sls
base:
'client.com':
- shelltest
[root@server srv]# cat /srv/salt/shelltest.sls
shell-test:
cmd.script:
- source: salt://test/1.sh
- user: root
[root@server srv]# cat /srv/salt/test/1.sh
#!/bin/bash
useradd tom
[root@server srv]# salt 'client.com' state.highstate

客户端:

[root@client ~]# id tom
uid=1003(tom) gid=1004(tom) 组=1004(tom)

计划任务

[root@server srv]# cat /srv/salt/top.sls
base:
'client.com':
- crontest
[root@server srv]# cat /srv/salt/crontest.sls
cron-test:
cron.present:
- name: /usr/sbin/useradd jerry
- user: root
- minute: "*"
- hour: 20
- daymonth: 21-25
- month: '9,10'
- dayweek: '*'
[root@server srv]# salt 'client.com' state.highstate

客户端

[root@client ~]# crontab -l
# Lines below here are managed by Salt, do not edit
# SALT_CRON_IDENTIFIER:/usr/sbin/useradd jerry
* 20 21-25 9,10 * /usr/sbin/useradd jerry

删除计划任务

vim /srv/salt/crontest.sls把 cron.present: 改成 cron.absent:
注意:两者不能共存,要想删除一个 cron,那之前的 present 就得替换掉或者删除掉。
user模块
present:创建用户
absent:删除用户
fullname:用户名
password:密码
uid:
gid:
createhome:True为创建家目录,False不创建家目录
home:用户家目录
hwg:
user.present:
- fullname: Jim
- shell: /bin/bash
- home: /home/hwg
- uid: 600
- gid: 600
- groups:
- wheel
- storage
- games
sysctl.present:修改系统内核参数
vm.swappiness:
  sysctl.present:
    - value: 0

net.ipv4.ip_local_port_range:
  sysctl.present:
   - value: 10000 61000

fs.file-max:
sysctl.present:
   - value: 186981

1我依赖谁? require
2我被谁依赖? require_in
3我监控谁? watch (包含require)
4我被谁监控?watch_in

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SaltStack是一套基于Python开发的配置管理工具,它采用C/S架构,包括一个服务器端(Master)和多个客户端(Minion)。安装部署SaltStack的过程如下: 1. 首先启动SaltStack服务,通过以下命令启动Master和Minion服务: systemctl start salt-master systemctl start salt-minion 2. 安装SaltStack,可以通过以下步骤进行: - 在Master和Minion上安装SaltStack软件包。 - 配置Master和Minion的配置文件,其中包括指定Master地址和端口等信息。 - 启动Master和Minion服务。 3. SaltStack的工作机制如下: - Master监听配置文件中定义的端口,用于接收Minion的请求。 - Minion在运行时会自动连接到配置文件中定义的Master地址和端口,并进行连接认证。 - 当Master和Minion成功建立通信后,就可以进行配置管理和远程执行等操作。 4. SaltStack的主要功能包括: - 配置管理:可以通过SaltStack对多台机器进行配置管理,实现统一的配置管理和更新。 - 远程执行:可以通过SaltStack在多台机器上进行并行执行命令和任务。 - 云管理:可以通过SaltStack进行云平台的管理和扩展。 总结起来,安装部署SaltStack需要先启动Master和Minion服务,然后安装配置SaltStack软件,最后通过配置文件进行连接认证。安装完成后,可以利用SaltStack进行配置管理、远程执行和云管理等操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [saltstack安装部署](https://blog.csdn.net/qq_54947566/article/details/114492742)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [SaltStack安装及简单部署](https://blog.csdn.net/weixin_42446031/article/details/92769652)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

脑子是空的啊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值