通过 SaltStack 管理服务器配置

Leo G 的头像

·

·

·

14,427 次阅读

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

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

salt '*' pkg.upgrade

安装SaltStack到Linux上

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

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

安装并配置Salt领主

[root@salt-master~]# yum install salt-master

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

[root@salt-master ~]# vim /etc/salt/master
# 默认是warning,修改如下
log_level: debug
log_level_logfile: debug

[root@salt-master ~]# systemctl start salt-master

安装并配置Salt下属

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

# 添加你的Salt领主的主机名
[root@salt-minion~]#vim /etc/salt/minion
master: salt-master.com
# 启动下属
[root@salt-minion~] systemctl start salt-minion

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

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

# 列出所有密钥
[root@salt-master~] salt-key -L
Accepted Keys:
Unaccepted Keys:
minion.com
Rejected Keys:

# 使用id 'minion.com'命令接受密钥
[root@salt-master~]salt-key -a minion.com

[root@salt-master~] salt-key -L
Accepted Keys:
minion.com
Unaccepted Keys:
Rejected Keys:

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

Salt命令行实例

      ID: vim-enhanced
Function: pkg.installed
  Result: True
 Comment: The following packages were installed/updated: vim-enhanced.
 Started: 09:36:23.438571
Duration: 94045.954 ms
 Changes:
          -
              new:
                  7.4.160-1.el7
              old:

Summary

Succeeded: 1 (changed=1)
Failed: 0

Total states run: 1


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

[root@salt-master~]# vim /srv/salt/ssh.sls
openssh-server:
pkg.installed

/etc/ssh/sshd_config:
file.managed:

  • user: root
  • group: root
  • mode: 600
  • source: salt://ssh/sshd_config

sshd:
service.running:

  • require:
    • pkg: openssh-server

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

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

[root@salt-master~]# vim /srv/salt/ssh.sls
openssh-server:
pkg.installed

/etc/ssh/sshd_config:
file.managed:

  • user: root
  • group: root
  • mode: 600
  • source: salt://sshd_config

sshd:
service.running:

  • watch:
    • pkg: openssh-server
    • file: /etc/ssh/sshd_config

[root@vps4544 ssh]# salt ‘minion.com’ state.sls ssh
seven.leog.in:
Changes:

      ID: /etc/ssh/sshd_config
Function: file.managed
  Result: True
 Comment: File /etc/ssh/sshd_config updated
 Started: 13:01:55.825731
Duration: 334.539 ms
 Changes:

              +++
              @@ -14,7 +14,7 @@
               # SELinux about this change.
               # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
               #
              -Port 22
              +Port 422
               #AddressFamily any
               #ListenAddress 0.0.0.0
               #ListenAddress ::


sshd:
True

Summary

Succeeded: 4 (changed=2)
Failed: 0

Total states run: 4


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

[root@salt-master~]# mkdir /srv/salt/ssh
[root@salt-master~]# vim /srv/salt/ssh/init.sls
openssh-server:
pkg.installed

/etc/ssh/sshd_config:
file.managed:

  • user: root
  • group: root
  • mode: 600
  • source: salt://ssh/sshd_config

sshd:
service.running:

  • watch:
    • pkg: openssh-server
    • file: /etc/ssh/sshd_config

[root@vps4544 ssh]# cp /etc/ssh/sshd_config /srv/salt/ssh/
[root@vps4544 ssh]# salt ‘minion.com’ state.sls ssh


### Top文件和环境

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

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

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

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

  • /srv/salt
    dev:
  • /srv/salt/dev

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

[root@salt-master ~]# vim /srv/salt/top.sls
base:
‘*’:

  • vim
    ‘minion.com’:

    • ssh

应用top文件配置

[root@salt-master~]# salt ‘*’ state.highstate
minion.com:

      ID: openssh-server
Function: pkg.installed
  Result: True
 Comment: Package openssh-server is already installed.
 Started: 13:10:55.
Duration: 2.156 ms


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

via: <http://techarena51.com/index.php/getting-started-with-saltstack/>

作者:[Leo G](http://techarena51.com/) 译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出

2 条回复

  1. 微博评论 的头像
    微博评论

    唉,前不久培训的Chef忘光光了[泪]

    来自开封
  2. 微博评论 的头像
    微博评论

    配置文件简单太吸引人了…

    来自宁波

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注