开发者社区> 玄学酱> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

通过 SaltStack 管理服务器配置

简介: 通过 SaltStack 管理服务器配置 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)。我发现Salt在配置和使用上都要比Puppet简单,当然这只是一家之言,你大可不必介怀。
+关注继续查看

通过 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@salt-master~]# yum install salt-master

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


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

安装并配置Salt下属


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

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

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


  1. # 列出所有密钥
  2. [root@salt-master~] salt-key -L
  3. Accepted Keys:
  4. Unaccepted Keys:
  5. minion.com
  6. Rejected Keys:
  7.  
  8. # 使用id 'minion.com'命令接受密钥
  9. [root@salt-master~]salt-key -a minion.com
  10.  
  11. [root@salt-master~] salt-key -L
  12. Accepted Keys:
  13. minion.com
  14. Unaccepted Keys:
  15. Rejected Keys:

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

Salt命令行实例


  1. # 检查下属是否启动并运行
  2. [root@salt-master~] salt 'minion.com' test.ping
  3. minion.com:
  4. True
  5. # 在下属客户机上运行shell命令
  6. [root@salt-master~]# salt 'minion.com' cmd.run 'ls -l'
  7. minion.com:
  8. total 2988
  9. -rw-r--r--. 1 root root 1024 Jul 31 08:24 1g.img
  10. -rw-------. 1 root root 940 Jul 14 15:04 anaconda-ks.cfg
  11. -rw-r--r--. 1 root root 1024 Aug 14 17:21 test
  12. # 安装/更新所有服务器上的软件
  13. [root@salt-master ~]# 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://docs.saltstack.com/en/latest/topics/targeting/grains.html

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

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

VIM状态文件实例


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

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


  1. [root@salt-master~]# vim /srv/salt/ssh.sls
  2. openssh-server:
  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: openssh-server

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

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


  1. [root@salt-master~]# vim /srv/salt/ssh.sls
  2. openssh-server:
  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: openssh-server
  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: openssh-server
  24. Function: pkg.installed
  25. Result: True
  26. Comment: Package openssh-server 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. +++
  42. @@ -14,7 +14,7 @@
  43. # SELinux about this change.
  44. # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
  45. #
  46. -Port 22
  47. +Port 422
  48. #AddressFamily any
  49. #ListenAddress 0.0.0.0
  50. #ListenAddress ::
  51.  
  52. ----------
  53. ID: sshd
  54. Function: service.running
  55. Result: True
  56. Comment: Service restarted
  57. Started: 13:01:56.473121
  58. Duration: 407.214 ms
  59. Changes:
  60. ----------
  61. sshd:
  62. True
  63.  
  64. Summary
  65. ------------
  66. Succeeded: 4 (changed=2)
  67. Failed: 0
  68. ------------
  69. Total states run: 4

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


  1. [root@salt-master~]# mkdir /srv/salt/ssh
  2. [root@salt-master~]# vim /srv/salt/ssh/init.sls
  3. openssh-server:
  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: openssh-server
  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@salt-master ~]# vim /etc/salt/master
  2. file_roots:
  3. base:
  4. - /srv/salt
  5. dev:
  6. - /srv/salt/dev

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


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

应用top文件配置


  1. [root@salt-master~]# salt '*' state.highstate
  2. minion.com:
  3. ----------
  4. ID: vim-enhanced
  5. Function: pkg.installed
  6. Result: True
  7. Comment: Package vim-enhanced is already installed.
  8. Started: 13:10:55
  9. Duration: 1678.779 ms
  10. Changes:
  11. ----------
  12. ID: openssh-server
  13. Function: pkg.installed
  14. Result: True
  15. Comment: Package openssh-server 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/

----------------------------------------------------------------------------------------------------------------------------

原文发布时间:2015-02-22
本文来自云栖合作伙伴“linux中国”

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
在服务器配置c++开发环境
在新开的服务器配置c++开发
0 0
puppet运维配置实列
http://downloads.puppetlabs.com/facter/ 可以yum install facter,用以检索主机的相关信息; 为什么要开发puppet 系统管理员都喜欢自己写点小工具来让自己的工作完成的更快或者更好, 不管是在大企业管理大量的服务器还是只管理两三台机器.
892 0
+关注
玄学酱
这个时候,玄酱是不是应该说点什么...
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Patroni安装部署指南
立即下载
ANSIBLE在生产环境中的实践
立即下载
低代码开发师(初级)实战教程
立即下载