- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
SaltStack 是一种基础设施自动化和配置管理工具,广泛用于管理大型 IT 基础设施。它能够自动化配置、部署、管理和监控服务器及应用程序.
.sls
结尾。主机名 | 系统 | IP |
---|---|---|
node1 控制节点 | openEuler22.03 | 192.168.200.179 |
node2 被控节点 | openEuler22.03 | 192.168.200.180 |
node3 被控节点 | openEuler22.03 | 192.168.200.172 |
官网提供2种安装方式 saltStack官网 。
这一步可选,如果被管理节点过多的话可以不用做,因为做了反而浪费时间 。
[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
官网有提供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
master节点需要安装2个包salt-master和salt-ssh,直接采用yum安装 。
[root@node01 ~]# yum install salt-master salt-ssh -y
minion节点就只需要安装一个包salt-minion 。
[root@node02 ~]# yum install salt-minion -y
[root@node03 ~]# yum install salt-minion -y
在安装好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
这段配置指定了以下内容:
/etc/salt/pki/master
目录中。/srv/salt/
,用于存放 state 文件和相关资源。/src/pillar
目录中。这是一个yaml格式的配置文件,不要使用tab键,使用空格来缩进,接下来我们启动master 。
[root@node01 salt]# mkdir -p /srv/salt/ /src/pillar
[root@node01 salt]# systemctl restart salt-master
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节点还没有接受他们的公钥 。
在接受之前我们可以先查看一下,在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
公钥都接收好了之后我们来试一下能不能管理节点了 。
[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一样定义主机组,但是定义的方式不用,我们来定义一个看看 。
在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变量与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 ,注意区别 。
[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
像ansible里面的ansible-doc一样,saltstack也可以查询模块的具体使用方式 。
# 查询pip模块
[root@node1 ~]# salt 'node3' sys.doc pip
执行这个会输出非常多的内容,你找到你想要的内容然后他里面是有写CLI Example的,你照着他的Example改就好了 。
要安装软件包与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并不知道你要控制的节点的系统,则需要手动指定 。
[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自动化工具的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 5 年前。 Improve t
背景 我有一个 Azure Runbook(名为 RunStoredProcedure2),定义如下: param( [parameter(Mandatory=$True)] [string] $Sq
我有一个名为“团队”的表,其中包含“非事件”列,另一个表“事件”,其中包含“时间”列。如果任何团队的“事件”中的最新日期发生在 X 时间之前,如何将“非事件”列更新(为 true)? 我知道这可以通过
下面的问题可能有点令人困惑,但我会尽力以最好的方式解释它。 假设我们为一家制造公司工作。它制造然后用于制造产品的组件。在以下示例中,有 3 个组件和 2 个最终产品。 组件和产品的需求如下: comp
我有代码可以让我在一个范围内选择一个项目: COleVariant vItems = cstrAddr; hr = AutoWrap(
我正在开发一个应用程序,该应用程序有 4 种语言的大约 50 个应用内购买,这给了我很多表单和子表单、框和子框,需要使用 iTunesConnect 的令人痛苦且设计糟糕的表单来填充。 我想知道是否有
我想在 Azure 自动化中使用 powershell 脚本来安排打开/关闭资源。 我想在不创建帐户的情况下执行此操作,因为我们的域强制重置密码。我知道自动化帐户会创建一个证书 - 当使用资源管理器(
我尝试从 azure 自动化 run book power shell 自动检索 azure SQL 数据库中的数据。我发现azure自动化帐户的模块中缺少SQL Server模块。我已经导入了该模块
我正在自动化 Outlook,并且需要控制电子邮件的发件人身份。用户将在 Outlook 中设置两个或多个帐户,我需要能够选择从哪个帐户发送电子邮件。有什么想法吗? 需要 Outlook 2003 及
我尝试从 azure 自动化 run book power shell 自动检索 azure SQL 数据库中的数据。我发现azure自动化帐户的模块中缺少SQL Server模块。我已经导入了该模块
假设我有一个网站,我可以(随时)登录并每隔 x 小时提交数据(单击登录后可见的链接),我将如何自动化此过程? 我构建了一个图形用户界面,它为用户(现在是我,为了我自己的方便)提供了一个包含一些信息的界
我正在开发一个程序,它的任务是我们为它定义一些号码(我们的一些手机号码)并且它应该在 Telegram 中注册它们,然后获取发送到该号码的所有消息。如您所知,在 Telegram 中注册需要提供电话号
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
最近我在处理 CSS Sprite 。一切正常。 我创建了一个 sprite、.css 文件和 html 结构。看起来像 .sprites{ background-image:url
我想为一款名为 Dune 2000 的策略游戏创建一个叠加层。令人讨厌的是,要创建 10 个士兵,每次完成一个都必须单击该图标。没有队列。因此,在不干扰游戏运行方式的情况下,我想听听鼠标移动的声音,当
我是 python 的初学者,我想从自动化开始。以下是我正在尝试执行的任务。 ssh -p 2024 root@10.54.3.32 root@10.54.3.32's password: 我尝试通过
当我将一些 urlencoded Javascript 粘贴到 Firefox 和 Chrome 上的 URL 时,我看到了一些奇怪的事情发生。是否可以使用此技术告诉 Chrome 访问 URL,然后
我需要将大量请求自动提交到基于云的数据库接口(interface) (Intelex)。没有任何方法可以批量提交某些操作,但是提交单个请求所必需的只是让经过身份验证的用户尝试打开 Web 链接。因此,
假设我有一个进程的内存转储。我想对其运行报告,所以基本上我想打开 WinDBG,加载 SOS 并运行一个脚本,该脚本运行一些命令,解析输出,然后基于此运行更多命令。 除了像 SendKeys 这样的
我正在使用 ffmpeg 创建视频剪辑。我想自动化该过程并保存剪辑,而无需手动为要保存的每个文件命名。这是我拥有的代码。它将创建并保存剪辑,但只能使用扩展名和不是名字。 @echo off cd /d
我是一名优秀的程序员,十分优秀!