共计 7650 个字符,预计需要花费 20 分钟才能阅读完成。
我在搜索 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
- AcceptedKeys:
- UnacceptedKeys:
- minion.com
- RejectedKeys:
- # 使用 id ‘minion.com’ 命令接受密钥
- [root@salt–master~]salt–key –a minion.com
- [root@salt–master~] salt–key –L
- AcceptedKeys:
- minion.com
- UnacceptedKeys:
- RejectedKeys:
在接受下属客户机的密钥后,你可以使用‘salt’命令来立即获取信息。
Salt 命令行实例
- # 检查下属是否启动并运行
- [root@salt–master~] salt ‘minion.com’ test.ping
- minion.com:
- True
- # 在下属客户机上运行 shell 命令
- [root@salt–master~]# salt ‘minion.com’ cmd.run ‘ls -l’
- minion.com:
- total 2988
- –rw–r—r–.1 root root 1024Jul3108:241g.img
- –rw——-.1 root root 940Jul1415:04 anaconda–ks.cfg
- –rw–r—r–.1 root root 1024Aug1417:21 test
- # 安装 / 更新所有服务器上的软件
- [root@salt–master ~]# salt ‘*’ pkg.install git
salt 命令需要一些组件来发送信息,其中之一是下属客户机的 id,而另一个是下属客户机上要调用的函数。
在第一个实例中,我使用‘test’模块的‘ping’函数来检查系统是否启动。该函数并不是真的实施一次 ping,它仅仅是在下属客户机作出回应时返回‘真’。
‘cmd.run’用于执行远程命令,而‘pkg’模块包含了包管理的函数。本文结尾提供了全部内建模块的列表。
颗粒实例
Salt 使用一个名为 颗粒(Grains)的界面来获取系统信息。你可以使用颗粒在指定属性的系统上运行命令。
- [root@vps4544 ~]# salt –G ‘os:Centos’ test.ping
- minion:
- True
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2015-02/113823p2.htm
通过状态文件系统进行包管理
为了使软件配置自动化,你需要使用状态系统,并创建状态文件。这些文件使用 YAML 格式和 Python 字典、列表、字符串以及编号来构成数据结构。将这些文件从头到尾研读一遍,这将有助于你更好地理解它的配置。
VIM 状态文件实例
- [root@salt–master~]# vim /srv/salt/vim.sls
- vim–enhanced:
- pkg.installed
- /etc/vimrc:
- file.managed:
- – source: salt://vimrc
- – user: root
- –group: root
- – mode:644
该文件的第一和第三行称为状态 id,它们必须包含有需要管理的包或文件的确切名称或路径。在状态 id 之后是状态和函数声明,‘pkg’和‘file’是状态声明,而‘installed’和‘managed’是函数声明。函数接受参数,用户、组、模式和源都是函数‘managed’的参数。
要将该配置应用到下属客户端,请移动你的‘vimrc’文件到‘/src/salt’,然后运行以下命令。
- [root@salt–master~]# salt ‘minion.com’ state.sls vim
- minion.com:
- ———-
- 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:
- ———-
- vim–enhanced:
- ———-
- 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: openssh–server
- Function: pkg.installed
- Result:True
- Comment:Package openssh–server is already installed.
- Started:13:01:55.824367
- Duration:1.156 ms
- 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:
- ———-
- diff:
- —
- +++
- @@–14,7+14,7@@
- # SELinux about this change.
- # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
- #
- –Port22
- +Port422
- #AddressFamily any
- #ListenAddress 0.0.0.0
- #ListenAddress ::
- ———-
- ID: sshd
- Function: service.running
- Result:True
- Comment:Service restarted
- Started:13:01:56.473121
- Duration:407.214 ms
- Changes:
- ———-
- 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: vim–enhanced
- Function: pkg.installed
- Result:True
- Comment:Package vim–enhanced is already installed.
- Started:13:10:55
- Duration:1678.779 ms
- Changes:
- ———-
- ID: openssh–server
- Function: pkg.installed
- Result:True
- Comment:Package openssh–server is already installed.
- Started:13:10:55.
- 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/
我在搜索 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
- AcceptedKeys:
- UnacceptedKeys:
- minion.com
- RejectedKeys:
- # 使用 id ‘minion.com’ 命令接受密钥
- [root@salt–master~]salt–key –a minion.com
- [root@salt–master~] salt–key –L
- AcceptedKeys:
- minion.com
- UnacceptedKeys:
- RejectedKeys:
在接受下属客户机的密钥后,你可以使用‘salt’命令来立即获取信息。
Salt 命令行实例
- # 检查下属是否启动并运行
- [root@salt–master~] salt ‘minion.com’ test.ping
- minion.com:
- True
- # 在下属客户机上运行 shell 命令
- [root@salt–master~]# salt ‘minion.com’ cmd.run ‘ls -l’
- minion.com:
- total 2988
- –rw–r—r–.1 root root 1024Jul3108:241g.img
- –rw——-.1 root root 940Jul1415:04 anaconda–ks.cfg
- –rw–r—r–.1 root root 1024Aug1417:21 test
- # 安装 / 更新所有服务器上的软件
- [root@salt–master ~]# salt ‘*’ pkg.install git
salt 命令需要一些组件来发送信息,其中之一是下属客户机的 id,而另一个是下属客户机上要调用的函数。
在第一个实例中,我使用‘test’模块的‘ping’函数来检查系统是否启动。该函数并不是真的实施一次 ping,它仅仅是在下属客户机作出回应时返回‘真’。
‘cmd.run’用于执行远程命令,而‘pkg’模块包含了包管理的函数。本文结尾提供了全部内建模块的列表。
颗粒实例
Salt 使用一个名为 颗粒(Grains)的界面来获取系统信息。你可以使用颗粒在指定属性的系统上运行命令。
- [root@vps4544 ~]# salt –G ‘os:Centos’ test.ping
- minion:
- True
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2015-02/113823p2.htm