阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

通过 SaltStack 管理服务器配置

425次阅读
没有评论

共计 7650 个字符,预计需要花费 20 分钟才能阅读完成。

通过 SaltStack 管理服务器配置

我在搜索 Puppet 的替代品时,偶然间碰到了 Salt。我喜欢 puppet,但是我又爱上 Salt 了:)。我发现 Salt 在配置和使用上都要比 Puppet 简单,当然这只是一家之言,你大可不必介怀。另外一个爱上 Salt 的理由是,它可以让你从命令行管理服务器配置,比如:

要通过 Salt 来更新所有服务器,你只需运行以下命令即可

  1. salt ‘*’ pkg.upgrade

安装 SaltStack 到 Linux 上

如果你是在 CentOS 6/ 7 上安装的话,那么 Salt 可以通过 EPEL 仓库获取到。而对于 Pi 和 Ubuntu Linux 用户,你可以从这里添加 Salt 仓库。Salt 是基于 Python 的,所以你也可以使用‘pip’来安装,但是你得用 yum-utils 或是其它包管理器来自己处理它的依赖关系。

Salt 采用服务器 - 客户端模式,服务器端称为领主,而客户端则称为下属。

安装并配置 Salt 领主

  1. [root@saltmaster~]# yum install saltmaster

Salt 配置文件位于 /etc/salt 和 /srv/salt。Salt 虽然可以开箱即用,但我还是建议你将日志配置得更详细点,以方便日后排除故障。

  1. [root@saltmaster ~]# vim /etc/salt/master
  2. # 默认是 warning,修改如下
  3. log_level: debug
  4. log_level_logfile: debug
  5.  
  6. [root@saltmaster ~]# systemctl start saltmaster

安装并配置 Salt 下属

  1. [root@saltminion~]#yum install saltminion
  2.  
  3. # 添加你的 Salt 领主的主机名
  4. [root@saltminion~]#vim /etc/salt/minion
  5. master: saltmaster.com
  6. # 启动下属
  7. [root@saltminion~] systemctl start saltminion

在启动时,下属客户机会生成一个密钥和一个 id。然后,它会连接到 Salt 领主服务器并验证自己的身份。Salt 领主服务器在允许下属客户机下载配置之前,必须接受下属的密钥。

在 Salt 领主服务器上列出并接受密钥

  1. # 列出所有密钥
  2. [root@saltmaster~] saltkey L
  3. AcceptedKeys:
  4. UnacceptedKeys:
  5. minion.com
  6. RejectedKeys:
  7.  
  8. # 使用 id ‘minion.com’ 命令接受密钥
  9. [root@saltmaster~]saltkey a minion.com
  10.  
  11. [root@saltmaster~] saltkey L
  12. AcceptedKeys:
  13. minion.com
  14. UnacceptedKeys:
  15. RejectedKeys:

在接受下属客户机的密钥后,你可以使用‘salt’命令来立即获取信息。

Salt 命令行实例

  1. # 检查下属是否启动并运行
  2. [root@saltmaster~] salt ‘minion.com’ test.ping
  3. minion.com:
  4. True
  5. # 在下属客户机上运行 shell 命令
  6. [root@saltmaster~]# salt ‘minion.com’ cmd.run ‘ls -l’
  7. minion.com:
  8. total 2988
  9. rwrr–.1 root root 1024Jul3108:241g.img
  10. rw——-.1 root root 940Jul1415:04 anacondaks.cfg
  11. rwrr–.1 root root 1024Aug1417:21 test
  12. # 安装 / 更新所有服务器上的软件
  13. [root@saltmaster ~]# salt ‘*’ pkg.install git

salt 命令需要一些组件来发送信息,其中之一是下属客户机的 id,而另一个是下属客户机上要调用的函数。

在第一个实例中,我使用‘test’模块的‘ping’函数来检查系统是否启动。该函数并不是真的实施一次 ping,它仅仅是在下属客户机作出回应时返回‘真’。

‘cmd.run’用于执行远程命令,而‘pkg’模块包含了包管理的函数。本文结尾提供了全部内建模块的列表。

颗粒实例

Salt 使用一个名为 颗粒(Grains)的界面来获取系统信息。你可以使用颗粒在指定属性的系统上运行命令。

  1. [root@vps4544 ~]# salt G ‘os:Centos’ test.ping
  2. minion:
  3. True

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2015-02/113823p2.htm 

通过状态文件系统进行包管理

为了使软件配置自动化,你需要使用状态系统,并创建状态文件。这些文件使用 YAML 格式和 Python 字典、列表、字符串以及编号来构成数据结构。将这些文件从头到尾研读一遍,这将有助于你更好地理解它的配置。

VIM 状态文件实例

  1. [root@saltmaster~]# vim /srv/salt/vim.sls
  2. vimenhanced:
  3. pkg.installed
  4. /etc/vimrc:
  5. file.managed:
  6. source: salt://vimrc
  7. user: root
  8. group: root
  9. mode:644

该文件的第一和第三行称为状态 id,它们必须包含有需要管理的包或文件的确切名称或路径。在状态 id 之后是状态和函数声明,‘pkg’和‘file’是状态声明,而‘installed’和‘managed’是函数声明。函数接受参数,用户、组、模式和源都是函数‘managed’的参数。

要将该配置应用到下属客户端,请移动你的‘vimrc’文件到‘/src/salt’,然后运行以下命令。

  1. [root@saltmaster~]# salt ‘minion.com’ state.sls vim
  2. minion.com:
  3. ———-
  4. ID: vimenhanced
  5. Function: pkg.installed
  6. Result:True
  7. Comment:The following packages were installed/updated: vimenhanced.
  8. Started:09:36:23.438571
  9. Duration:94045.954 ms
  10. Changes:
  11. ———-
  12. vimenhanced:
  13. ———-
  14. new:
  15. 7.4.1601.el7
  16. old:
  17.  
  18.  
  19. Summary
  20. ————
  21. Succeeded:1(changed=1)
  22. Failed:0
  23. ————
  24. Total states run:1

你也可以添加依赖关系到你的配置中。

  1. [root@saltmaster~]# vim /srv/salt/ssh.sls
  2. opensshserver:
  3. pkg.installed
  4.  
  5.  
  6. /etc/ssh/sshd_config:
  7. file.managed:
  8. user: root
  9. group: root
  10. mode:600
  11. source: salt://ssh/sshd_config
  12.  
  13. sshd:
  14. service.running:
  15. require:
  16. pkg: opensshserver

这里的‘require’声明是必须的,它在‘service’和‘pkg’状态之间创建依赖关系。该声明将首先检查包是否安装,然后运行服务。

但是,我更偏向于使用‘watch’声明,因为它也可以检查文件是否修改和重启服务。

  1. [root@saltmaster~]# vim /srv/salt/ssh.sls
  2. opensshserver:
  3. pkg.installed
  4.  
  5.  
  6. /etc/ssh/sshd_config:
  7. file.managed:
  8. user: root
  9. group: root
  10. mode:600
  11. source: salt://sshd_config
  12.  
  13. sshd:
  14. service.running:
  15. watch:
  16. pkg: opensshserver
  17. file:/etc/ssh/sshd_config
  18.  
  19. [root@vps4544 ssh]# salt ‘minion.com’ state.sls ssh
  20. seven.leog.in:
  21. Changes:
  22. ———-
  23. ID: opensshserver
  24. Function: pkg.installed
  25. Result:True
  26. Comment:Package opensshserver is already installed.
  27. Started:13:01:55.824367
  28. Duration:1.156 ms
  29. Changes:
  30. ———-
  31. ID:/etc/ssh/sshd_config
  32. Function: file.managed
  33. Result:True
  34. Comment:File/etc/ssh/sshd_config updated
  35. Started:13:01:55.825731
  36. Duration:334.539 ms
  37. Changes:
  38. ———-
  39. diff:
  40. +++
  41. @@14,7+14,7@@
  42. # SELinux about this change.
  43. # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
  44. #
  45. Port22
  46. +Port422
  47. #AddressFamily any
  48. #ListenAddress 0.0.0.0
  49. #ListenAddress ::
  50.  
  51. ———-
  52. ID: sshd
  53. Function: service.running
  54. Result:True
  55. Comment:Service restarted
  56. Started:13:01:56.473121
  57. Duration:407.214 ms
  58. Changes:
  59. ———-
  60. sshd:
  61. True
  62.  
  63. Summary
  64. ————
  65. Succeeded:4(changed=2)
  66. Failed:0
  67. ————
  68. Total states run:4

在单一目录中维护所有的配置文件是一项复杂的大工程,因此,你可以创建子目录并在其中添加配置文件 init.sls 文件。

  1. [root@saltmaster~]# mkdir /srv/salt/ssh
  2. [root@saltmaster~]# vim /srv/salt/ssh/init.sls
  3. opensshserver:
  4. pkg.installed
  5.  
  6. /etc/ssh/sshd_config:
  7. file.managed:
  8. user: root
  9. group: root
  10. mode:600
  11. source: salt://ssh/sshd_config
  12.  
  13. sshd:
  14. service.running:
  15. watch:
  16. pkg: opensshserver
  17. file:/etc/ssh/sshd_config
  18.  
  19. [root@vps4544 ssh]# cp /etc/ssh/sshd_config /srv/salt/ssh/
  20. [root@vps4544 ssh]# salt ‘minion.com’ state.sls ssh

Top 文件和环境

top 文件(top.sls)是用来定义你的环境的文件,它允许你映射下属客户机到包,默认环境是‘base’。你需要定义在基本环境下,哪个包会被安装到哪台服务器。

如果对于一台特定的下属客户机而言,有多个环境,并且有多于一个的定义,那么默认情况下,基本环境将取代其它环境。

要定义环境,你需要将它添加到领主配置文件的‘file_roots’指针。

  1. [root@saltmaster ~]# vim /etc/salt/master
  2. file_roots:
  3. base:
  4. /srv/salt
  5. dev:
  6. /srv/salt/dev

现在,添加一个 top.sls 文件到 /src/salt。

  1. [root@saltmaster ~]# vim /srv/salt/top.sls
  2. base:
  3. ‘*’:
  4. vim
  5. ‘minion.com’:
  6. ssh

应用 top 文件配置

  1. [root@saltmaster~]# salt ‘*’ state.highstate
  2. minion.com:
  3. ———-
  4. ID: vimenhanced
  5. Function: pkg.installed
  6. Result:True
  7. Comment:Package vimenhanced is already installed.
  8. Started:13:10:55
  9. Duration:1678.779 ms
  10. Changes:
  11. ———-
  12. ID: opensshserver
  13. Function: pkg.installed
  14. Result:True
  15. Comment:Package opensshserver is already installed.
  16. Started:13:10:55.
  17. Duration:2.156 ms

下属客户机将下载 top 文件并搜索用于它的配置,领主服务器也会将配置应用到所有下属客户机。


这仅仅是一个 Salt 的简明教程,如果你想要深入学习并理解,你可以访问下面的链接。如果你已经在使用 Salt,那么请告诉我你的建议和意见吧。

更新:Foreman 已经通过插件支持 salt。

阅读链接

  • http://docs.saltstack.com/en/latest/ref/states/top.html#how-top-files-are-compiled
  • http://docs.saltstack.com/en/latest/topics/tutorials/states_pt1.html
  • http://docs.saltstack.com/en/latest/ref/states/highstate.html#state-declaration

颗粒

  • http://docs.saltstack.com/en/latest/topics/targeting/grains.html

Salt 和 Puppet 的充分比较

  • https://mywushublog.com/2013/03/configuration-management-with-salt-stack/

内建执行模块的完全列表

  • http://docs.saltstack.com/en/latest/ref/modules/all/

通过 SaltStack 管理服务器配置

我在搜索 Puppet 的替代品时,偶然间碰到了 Salt。我喜欢 puppet,但是我又爱上 Salt 了:)。我发现 Salt 在配置和使用上都要比 Puppet 简单,当然这只是一家之言,你大可不必介怀。另外一个爱上 Salt 的理由是,它可以让你从命令行管理服务器配置,比如:

要通过 Salt 来更新所有服务器,你只需运行以下命令即可

  1. salt ‘*’ pkg.upgrade

安装 SaltStack 到 Linux 上

如果你是在 CentOS 6/ 7 上安装的话,那么 Salt 可以通过 EPEL 仓库获取到。而对于 Pi 和 Ubuntu Linux 用户,你可以从这里添加 Salt 仓库。Salt 是基于 Python 的,所以你也可以使用‘pip’来安装,但是你得用 yum-utils 或是其它包管理器来自己处理它的依赖关系。

Salt 采用服务器 - 客户端模式,服务器端称为领主,而客户端则称为下属。

安装并配置 Salt 领主

  1. [root@saltmaster~]# yum install saltmaster

Salt 配置文件位于 /etc/salt 和 /srv/salt。Salt 虽然可以开箱即用,但我还是建议你将日志配置得更详细点,以方便日后排除故障。

  1. [root@saltmaster ~]# vim /etc/salt/master
  2. # 默认是 warning,修改如下
  3. log_level: debug
  4. log_level_logfile: debug
  5.  
  6. [root@saltmaster ~]# systemctl start saltmaster

安装并配置 Salt 下属

  1. [root@saltminion~]#yum install saltminion
  2.  
  3. # 添加你的 Salt 领主的主机名
  4. [root@saltminion~]#vim /etc/salt/minion
  5. master: saltmaster.com
  6. # 启动下属
  7. [root@saltminion~] systemctl start saltminion

在启动时,下属客户机会生成一个密钥和一个 id。然后,它会连接到 Salt 领主服务器并验证自己的身份。Salt 领主服务器在允许下属客户机下载配置之前,必须接受下属的密钥。

在 Salt 领主服务器上列出并接受密钥

  1. # 列出所有密钥
  2. [root@saltmaster~] saltkey L
  3. AcceptedKeys:
  4. UnacceptedKeys:
  5. minion.com
  6. RejectedKeys:
  7.  
  8. # 使用 id ‘minion.com’ 命令接受密钥
  9. [root@saltmaster~]saltkey a minion.com
  10.  
  11. [root@saltmaster~] saltkey L
  12. AcceptedKeys:
  13. minion.com
  14. UnacceptedKeys:
  15. RejectedKeys:

在接受下属客户机的密钥后,你可以使用‘salt’命令来立即获取信息。

Salt 命令行实例

  1. # 检查下属是否启动并运行
  2. [root@saltmaster~] salt ‘minion.com’ test.ping
  3. minion.com:
  4. True
  5. # 在下属客户机上运行 shell 命令
  6. [root@saltmaster~]# salt ‘minion.com’ cmd.run ‘ls -l’
  7. minion.com:
  8. total 2988
  9. rwrr–.1 root root 1024Jul3108:241g.img
  10. rw——-.1 root root 940Jul1415:04 anacondaks.cfg
  11. rwrr–.1 root root 1024Aug1417:21 test
  12. # 安装 / 更新所有服务器上的软件
  13. [root@saltmaster ~]# salt ‘*’ pkg.install git

salt 命令需要一些组件来发送信息,其中之一是下属客户机的 id,而另一个是下属客户机上要调用的函数。

在第一个实例中,我使用‘test’模块的‘ping’函数来检查系统是否启动。该函数并不是真的实施一次 ping,它仅仅是在下属客户机作出回应时返回‘真’。

‘cmd.run’用于执行远程命令,而‘pkg’模块包含了包管理的函数。本文结尾提供了全部内建模块的列表。

颗粒实例

Salt 使用一个名为 颗粒(Grains)的界面来获取系统信息。你可以使用颗粒在指定属性的系统上运行命令。

  1. [root@vps4544 ~]# salt G ‘os:Centos’ test.ping
  2. minion:
  3. True

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2015-02/113823p2.htm 

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计7650字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19352
评论数
4
阅读量
8148488
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用 AI 做了一个 1978 年至 2019 年中国大陆企业注册的查询网站 最近星哥在 GitHub 上偶然...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...