saltStack自动化工具
SaltStack自动化工具
SaltStack 是一种基础设施自动化和配置管理工具,广泛用于管理大型 IT 基础设施。它能够自动化配置、部署、管理和监控服务器及应用程序。
核心概念
1. Master 和 Minion
- Master:SaltStack 的主服务器,负责管理和控制多个 Minion。Master 发送命令,收集数据并进行协调。
- Minion:被管理的节点,接收 Master 的命令并执行。Minion 可以是物理服务器、虚拟机或容器。
2. State
- State:描述系统应该处于的状态,通常用 YAML 格式编写。例如,安装某个软件包,配置某个服务。
- State File:存储 state 的文件,通常以
.sls
结尾。
3. Pillar
- Pillar:存储敏感数据和配置信息,例如密码、密钥。Pillar 数据是 Master 特定的,不会被 Minion 共享。
4. Grains
- Grains:静态数据的集合,描述 Minion 的特性(如操作系统、IP 地址、内存等)。
5. Modules
- Modules:功能单元,用于执行特定任务。SaltStack 提供了丰富的内置模块,如执行命令、管理软件包、用户等。
6. Runner
- Runner:在 Master 上执行的任务,用于进行一些复杂的管理操作,如管理批量任务、监控等。
7. Reactor
- Reactor:事件响应系统,根据触发的事件自动执行预定义的操作。
工作流程
- 命令发送:管理员在 Master 上发送命令。
- 命令分发:Master 将命令分发给目标 Minion。
- 命令执行:Minion 接收到命令后执行相应操作。
- 结果返回:Minion 将执行结果返回给 Master。
- 结果汇总:Master 汇总并展示执行结果。
安装和配置
主机名 | 系统 | IP |
---|---|---|
node1 控制节点 | openEuler22.03 | 192.168.200.179 |
node2 被控节点 | openEuler22.03 | 192.168.200.180 |
node3 被控节点 | openEuler22.03 | 192.168.200.172 |
官网提供2种安装方式 saltStack官网
- bootstrap:自动化安装
- 通过官网的脚本可以执行并安装
- manual:手动安装
- 配置yum源手动安装并配置我们采取这种方式
1. 配置hosts解析
这一步可选,如果被管理节点过多的话可以不用做,因为做了反而浪费时间
[root@node01 ~]# cat /etc/hosts
127.0.0.1 localhost
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.179 node1
192.168.200.180 node2
192.168.200.172 node3
2. 配置yum源
官网有提供yum源,我们使用的是openEuler,选择RHEL的配置就行
sudo rpm --import https://repo.saltproject.io/salt/py3/redhat/8/x86_64/SALT-PROJECT-GPG-PUBKEY-2023.pub
curl -fsSL https://repo.saltproject.io/salt/py3/redhat/8/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo
直接执行官网的这2行命令就可以了,但是由于他配置的是国外的地址,我们下载软件包就会有点慢,我们可以将地址改为国内清华大学的
[root@node3 ~]# cat /etc/yum.repos.d/salt.repo
[salt-repo]
name=Salt repo for RHEL/CentOS 8 PY3
baseurl=https://repo.saltproject.io/salt/py3/redhat/8/x86_64/latest
skip_if_unavailable=True
priority=10
enabled=1
enabled_metadata=1
gpgcheck=1
gpgkey=https://repo.saltproject.io/salt/py3/redhat/8/x86_64/latest/SALT-PROJECT-GPG-PUBKEY-2023.pub
这个是执行完命令之后帮我们生成的yum源,我们将地址替换掉
[root@node01 ~]# cat /etc/yum.repos.d/salt.repo
[salt-repo]
name=Salt repo for RHEL/CentOS 8 PY3
baseurl=https://mirrors.tuna.tsinghua.edu.cn/saltstack/salt/py3/redhat/8/x86_64/latest/
skip_if_unavailable=True
priority=10
enabled=1
enabled_metadata=1
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/saltstack/salt/py3/redhat/8/x86_64/latest/SALT-PROJECT-GPG-PUBKEY-2023.pub
然后将yum源的repo文件发送到各个节点
Authorized users only. All activities may be monitored and reported.
salt.repo 100% 314 785.3KB/s 00:00
[root@node01 ~]# scp /etc/yum.repos.d/salt.repo node3:/etc/yum.repos.d/
Authorized users only. All activities may be monitored and reported.
salt.repo 100% 314 822.3KB/s 00:00
3. saltstack安装
3.1 master节点
master节点需要安装2个包salt-master
和salt-ssh
,直接采用yum安装
[root@node01 ~]# yum install salt-master salt-ssh -y
3.2 minion节点
minion节点就只需要安装一个包salt-minion
[root@node02 ~]# yum install salt-minion -y
[root@node03 ~]# yum install salt-minion -y
4. 配置saltstack
4.1 master节点配置
在安装好master节点所需要的包之后会在/etc/salt
目录下有一个master文件,这是默认的配置文件,我们最好不要去修改它,我们可以将它作为一个模板来抄配置,我们自己的配置文件可以放在/etc/salt/master.d/
这个目录下
[root@node01 ~]# vim /etc/salt/master.d/master.conf
interface: 0.0.0.0
publish_port: 4505
ret_port: 4506
pki_dir: /etc/salt/pki/master
file_roots:
base:
- /srv/salt/
pillar_roots:
base:
- /src/pillar
这段配置指定了以下内容:
- interface 0.0.0.0: Salt Master 监听所有网络接口上的请求。
- 使用端口 4505 来发布消息,使用端口 4506 来接收 Minion 返回的结果。
- 加密通信的密钥存放在
/etc/salt/pki/master
目录中。 - Salt 文件服务器的根目录为
/srv/salt/
,用于存放 state 文件和相关资源。 - Pillar 数据存放在
/src/pillar
目录中。
这是一个yaml格式的配置文件,不要使用tab键,使用空格来缩进,接下来我们启动master
[root@node01 salt]# mkdir -p /srv/salt/ /src/pillar
[root@node01 salt]# systemctl restart salt-master
4.2 配置minion节点
minion节点同样的,不要直接去修改/etc/salt/minion
,我们在/etc/salt/minion.d/
目录下去写配置
[root@node02 salt]# vim /etc/salt/minion.d/minion.conf
master: 192.168.200.179
id: 192.168.200.180 # 如果你写的hosts文件的话这里可以直接写主机名
[root@node03 minion.d]# vim minion.conf
master: 192.168.200.179
id: node3
将2中情况都写了出来,如果你配置了hosts文件可以采用下面这种方式
启动minion
[root@node2 minion.d]# systemctl restart salt-minion.service
[root@node3 minion.d]# systemctl restart salt-minion.service
这个时候服务就启动了,你如果使用systemctl status salt-minion
去看服务的状态的话,你会发现服务是有报错的
● salt-minion.service - The Salt Minion
Loaded: loaded (/usr/lib/systemd/system/salt-minion.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2024-07-12 15:55:26 CST; 3min 34s ago
Docs: man:salt-minion(1)
file:///usr/share/doc/salt/html/contents.html
https://docs.saltproject.io/en/latest/contents.html
Main PID: 2504 (python3.10)
Tasks: 7 (limit: 8917)
Memory: 57.2M
CGroup: /system.slice/salt-minion.service
├─ 2504 /opt/saltstack/salt/bin/python3.10 /usr/bin/salt-minion
└─ 2511 "/opt/saltstack/salt/bin/python3.10 /usr/bin/salt-minion MultiMinionProcessManager MinionProcessManager"
Jul 12 15:57:22 node03 salt-minion[2511]: [ERROR ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before>
Jul 12 15:57:32 node03 salt-minion[2511]: [ERROR ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before>
Jul 12 15:57:42 node03 salt-minion[2511]: [ERROR ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before>
Jul 12 15:57:52 node03 salt-minion[2511]: [ERROR ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before>
Jul 12 15:58:02 node03 salt-minion[2511]: [ERROR ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before>
Jul 12 15:58:12 node03 salt-minion[2511]: [ERROR ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before>
Jul 12 15:58:22 node03 salt-minion[2511]: [ERROR ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before>
Jul 12 15:58:33 node03 salt-minion[2511]: [ERROR ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before>
Jul 12 15:58:43 node03 salt-minion[2511]: [ERROR ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before>
Jul 12 15:58:53 node03 salt-minion[2511]: [ERROR ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before
这个报错我们不必理会,这是因为我们的master节点还没有接受他们的公钥
5. 接受认证公钥
在接受之前我们可以先查看一下,在master节点
[root@node01 salt]# salt-key
Accepted Keys:
Denied Keys:
Unaccepted Keys:
192.168.200.180
node3
Rejected Keys:
这里显示没有接受的公钥有2个,一个是192.168.200.180,另一个是node3
接下来我们接受公钥
# 接受某个公钥
[root@node01 salt]# salt-key -a 192.168.200.180
The following keys are going to be accepted:
Unaccepted Keys:
192.168.200.180
Proceed? [n/Y] y
Key for minion 192.168.200.180 accepted.
[root@node01 salt]# salt-key
Accepted Keys:
192.168.200.180
Denied Keys:
Unaccepted Keys:
node3
Rejected Keys:
# 接受全部公钥
[root@node01 salt]# salt-key -A
- -a :指定接受某一个公钥
- -A : 接受全部
- -d: 删除某一个公钥
- -D:删除全部
6. 测试
公钥都接收好了之后我们来试一下能不能管理节点了
[root@node1 ~]# salt '*' test.ping
node3:
True
192.168.200.180:
True
返回True就代表这个节点OK了
[root@node1 ~]# salt '*' cmd.run 'echo saltstack > /tmp/salt'
192.168.200.180:
node3:
这个命令就是输出saltstack并且重定向到/tmp/salt这个文件,我们可以到node2和node3上查看这个文件
[root@node1 ~]# salt '*' cmd.run 'cat /tmp/salt'
192.168.200.180:
saltstack
node3:
saltstack
saltstack也可以跟ansible一样定义主机组,但是定义的方式不用,我们来定义一个看看
7. 定义主机组
在master节点上的/etc/salt/master.d/
下创建一个文件
[root@node1 ~]# vim /etc/salt/master.d/groups.conf
nodegroups:
webserver:
- 192.168.200.180
- node3
这样我们就定义了一个webserver的主机组,里面包含2个主机
对主机组操作是这样的
[root@node1 ~]# salt -N 'webserver' test.ping
192.168.200.180:
True
node3:
True
需要加上 -N,然后指定主机组的名字
Grains变量
grains变量与ansible的facts变量是差不多的,ansible里面可以通过setup
模块来收集,saltstack里则是这样的
[root@node1 ~]# salt 'node3' grains.items |wc -l
385
内容非常的多,我就截取一点内容
node3:
----------
biosreleasedate:
11/12/2020
biosvendor:
Phoenix Technologies LTD
biosversion:
6.00
boardname:
440BX Desktop Reference Platform
cpu_flags:
- fpu
- vme
- de
- pse
- tsc
- msr
- pae
- mce
- cx8
- apic
- sep
- mtrr
……………………省略
我们还可以过滤内容
[root@node1 ~]# salt 'node3' grains.items |grep -A 3 ipv4
ipv4:
- 127.0.0.1
- 192.168.200.172
- 192.168.200.200
或者直接使用自带的过滤器
[root@node1 ~]# salt 'node3' grains.item
node3:
----------
[root@node1 ~]# salt 'node3' grains.item ipv4
node3:
----------
ipv4:
- 127.0.0.1
- 192.168.200.172
- 192.168.200.200
注意,列出全部的变量是grains.items
,而过滤指定的内容是grains.item
,注意区别
模块
1. 查询支持的模块
[root@node1 ~]# salt 'node3' sys.list_modules
node3:
- acl
- aliases
- alternatives
- archive
- artifactory
- baredoc
- beacons
- bigip
- btrfs
- buildout
- chroot
- cloud
- cmd
- composer
- config
- consul
- container_resource
- cp
…………省略
我这里一共是172个模块
[root@node1 ~]# salt 'node3' sys.list_modules |wc -l
172
2. 查询某个模块的具体使用方法
像ansible里面的ansible-doc一样,saltstack也可以查询模块的具体使用方式
# 查询pip模块
[root@node1 ~]# salt 'node3' sys.doc pip
执行这个会输出非常多的内容,你找到你想要的内容然后他里面是有写CLI Example
的,你照着他的Example改就好了
3. 被控节点安装软件
要安装软件包与ansible是不一样的,ansible里面你如果控制的是RHEL系列的包是使用yum,Debain系列使用apt,而在saltstack里则全都是使用pkg模块
# 安装一个vsftpd
[root@node1 ~]# salt '*' pkg.install pkgs='["vsftpd"]'
node3:
----------
vsftpd:
----------
new:
3.0.3-33.oe2203sp3
old:
192.168.200.180:
----------
vsftpd:
----------
new:
3.0.3-33.oe2203sp3
old:
这样ftp就被安装在各个节点上了,如果需要一次性安装多个则在中括号里面用逗号隔开,多写几个就可以了
如果只需要安装单个的包也可以这样写
[root@node1 ~]# salt '*' pkg.install httpd
192.168.200.180:
----------
apr:
----------
new:
1.7.0-6.oe2203sp3
old:
apr-util:
----------
new:
1.6.1-14.oe2203sp3
old:
httpd:
----------
new:
2.4.51-21.oe2203sp3
old:
httpd-filesystem:
----------
new:
2.4.51-21.oe2203sp3
old:
httpd-tools:
----------
new:
2.4.51-21.oe2203sp3
old:
mailcap:
----------
new:
2.1.53-3.oe2203sp3
old:
mod_http2:
----------
new:
1.15.25-3.oe2203sp3
old:
openEuler-logos-httpd:
----------
new:
1.0-8.oe2203sp3
old:
node3:
----------
apr:
----------
new:
1.7.0-6.oe2203sp3
old:
apr-util:
----------
new:
1.6.1-14.oe2203sp3
old:
httpd:
----------
new:
2.4.51-21.oe2203sp3
old:
httpd-filesystem:
----------
new:
2.4.51-21.oe2203sp3
old:
httpd-tools:
----------
new:
2.4.51-21.oe2203sp3
old:
mailcap:
----------
new:
2.1.53-3.oe2203sp3
old:
mod_http2:
----------
new:
1.15.25-3.oe2203sp3
old:
openEuler-logos-httpd:
----------
new:
1.0-8.oe2203sp3
old:
就是直接在install后面加上需要安装的软件包就行了
这里不需要指定yum或者apt的原因是因为,咱们是在被控节点安装了agent的,也就是salt-minion这个包,你装在不同的系统上这个包肯定就会不一样对吧,所以他是通过这个来区分的,而ansble需要指定是因为ansible是无代理的,直接使用ssh,而不管是RHEL还是Debain都是可以ssh的,所以ansible并不知道你要控制的节点的系统,则需要手动指定
4. 查询某个模块具体有哪些函数
[root@node1 ~]# salt 'node3' sys.doc pkg |grep ^pkg
pkg.available_version:
pkg.clean_metadata:
pkg.del_repo:
pkg.diff:
pkg.download:
pkg.file_dict:
pkg.file_list:
pkg.get_locked_packages:
pkg.get_repo:
pkg.group_diff:
pkg.group_info:
pkg.group_install:
pkg.group_list:
pkg.groupinstall:
pkg.hold:
pkg.info_installed:
pkg.install:
pkg.latest_version:
pkg.list_downloaded:
pkg.list_holds:
pkg.list_installed_patches:
pkg.list_patches:
pkg.list_pkgs:
pkg.list_repo_pkgs:
pkg.list_repos:
pkg.list_updates:
pkg.list_upgrades:
pkg.mod_repo:
pkg.modified:
pkg.normalize_name:
pkg.owner:
pkg.parse_arch:
pkg.purge:
pkg.refresh_db:
pkg.remove:
pkg.services_need_restart:
pkg.unhold:
pkg.update:
pkg.upgrade:
pkg.upgrade_available:
pkg.verify:
pkg.version:
pkg.version_cmp:
saltStack自动化工具的更多相关文章
- SaltStack 自动化工具
1.服务端安装master: # yum -y install salt-master # yum -y install salt-minion 2.客户端安装minion: # yum -y ins ...
- SaltStack自动化运维工具
一.SaltStack的了解 SaltStack管理工具允许管理员对多个操作系统创建一个一致的管理系统,包括VMware vSphere环境. SaltStack作用于仆从和主拓扑.SaltStack ...
- SaltStack(自动化运维工具)
SaltStack管理工具允许管理员对多个操作系统创建一个一致的管理系统,包括VMware vSphere环境.SaltStack作用于仆从和主拓扑.SaltStack与特定的命令结合使用可以在一个或 ...
- 使用Chef管理windows集群 | 运维自动化工具
但凡服务器上了一定规模(百台以上),普通的ssh登录管理的模式就越来越举步维艰.试想Linux发布了一个高危漏洞的补丁,你要把手下成百上千台机器都更新该补丁,如果没有一种自动化方式,那么至少要耗上大半 ...
- Saltstack自动化操作记录(2)-配置使用 【转】
之前梳理了Saltstack自动化操作记录(1)-环境部署,下面说说saltstack配置及模块使用: 为了试验效果,再追加一台被控制端minion机器192.168.1.118需要在master控制 ...
- Saltstack自动化操作记录(2)-配置使用
之前梳理了Saltstack自动化操作记录(1)-环境部署,下面说说saltstack配置及模块使用: 为了试验效果,再追加一台被控制端minion机器192.168.1.118需要在master控制 ...
- 运维自动化工具ansible
企业级自动化运维工具应用实战ansible 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出 ...
- 十个强大的DevOps基础设施自动化工具,不容错过
Devops基础设施自动化的工具 有许多工具用于基础设施自动化.使用哪个工具决定于体系结构和基础设施的需求.下面我们列出了一些伟大的工具,用于不同类别配置管理.编制.持续集成.监控等. 1.Chef ...
- saltstack自动化运维快速入门
saltstack自动化运维快速入门 关于saltstack 这个软件是干啥的 我这里就不介绍了 只是简单的说下是干啥的 网上的说法是 它是func的强化版本+ puppet的精简版 关于puppet ...
- Ansible 多机自动化工具 初学笔记
此文档仅张聪明同学个人笔记:新负责KTH-RPL Cluster GPU的漫漫学习长路 English Docs: https://docs.ansible.com/ansible/latest/in ...
随机推荐
- JDK源码阅读-------自学笔记(七)(二维数组的浅析)
实际开发中一般最多使用到二维数组,再高很少使用 二维数组很少用,实际开发中会使用容器代替使用 1.创建二维数组 1 // 二维数组初始化 2 int[][] secondDimensional = n ...
- .NET 代理模式(二) 动态代理-DispatchProxy
前言 我们都知道,在.NET中实现动态代理AOP有多种方案,也有很多框架支持,但大多框架的实现原理都是通过Emit配合Activator一起使用,从IL级别上实现动态代理. 其实在.NET中有一个更为 ...
- 🐬记一次MySQL执行修改语句超时问题
异常问题 原因分析 这个问题发生在开发环境,怀疑是提交事务时终止项目运行,没有提交该事务,造成死锁 调试该事务时时间太长,为什么说有这个原因呢,因为通过查找日志显示 The client was di ...
- 微软正式发布:.NET Aspire 云原生开发框架
前言 2024年5月22日北京时间,微软正式发布全新的.NET云原生开发框架-.NET Aspire. .NET Aspire 是一个新的平台无关.语言无关的框架,旨在简化 .NET云原生服务的开发, ...
- 企业级nginx内核优化篇
1. cpu核心配置 方法1: worker_processes auto; 自动调用[推荐] 方法2: worker_processes 4; 手工配置 检查CPU核心:yum install nu ...
- 电源电路E24系列反馈电阻计算表格
可调电源,包括DCDC.LDO电路的设计中,经常需要计算反馈电阻进行选型.为了提高效率,优化选型采购,抽空做了个表格进行快速计算. 1.一般反馈电阻电路如下. 输出电压公式为:Vout=Vfb*(Rh ...
- Centos7无法ping通内网、外网
主要检查网络的配置是否正确,我测试时使用的是VMware虚拟机,需要保证centos中的网络配置和VMware中的一致. (1)VMware的配置 网络适配器选择NAT模式 查看NAT设置,这里需要记 ...
- LeetCode 690. Employee Importance 员工的重要性(C++/Java)
题目: You are given a data structure of employee information, which includes the employee's unique id, ...
- IDEA:java: Compilation failed: internal java compiler error
java: Compilation failed: internal java compiler error 解决方法: 1.打开菜单 ,File - Project Structure - Proj ...
- Vue 3深度探索:自定义渲染器与服务端渲染
title: Vue 3深度探索:自定义渲染器与服务端渲染 date: 2024/6/14 updated: 2024/6/14 author: cmdragon excerpt: 这篇文章介绍了如何 ...