SaltStack 配置管理
配置管理是 SaltStack 中最重要的概念之一。它用于创建一个可重用的配置模板,称为
状态。状态描述了将系统组件或应用程序置于已知配置中所需的一切。
Salt态
Salt态是系统特定部分的可重用配置。使用简单的 YAML 更容易理解和描述状态。
创建Salt状态
Salt态很容易创建。让我们在本章中创建一个简单的状态。移动到目录"salt-vagrant-demo/saltstack/salt/"并创建一个名为
samples.sls 的文件,并在其中添加以下几行。
samples.sls
install_network_packages:
pkg.installed:
-pkgs:
-rsync
-lftp
-curl
现在,保存文件并在 Salt Master 中运行以下命令。
root@saltmaster:/home/vagrant# salt 'minion1’ state.apply samples
在这里,我们通过
pkg.installed 模块安装了
rsync、lftp 和
curl 使用 Salt Minion 中的 Salt 状态,
minion1。如果它工作正常,您可以看到如下所示的响应。
它将产生以下
输出-
minion1:
----------
ID: install_network_packages
Function: pkg.installed
Result: true
Comment: All specified packages are already installed
Started: 08:08:48.612336
Duration: 545.385 ms
Changes:
Summary for minion1
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
Total run time: 545.385 ms
Apply Salt State
现在我们已经使用".sls"文件创建了一个状态,并通过专门调用它来应用它。 Salt 有一个名为
top.sls 文件的默认状态文件。顶层文件用于将多个状态文件应用于 Salt Minion。顶部文件描述了应该在哪里应用状态。好吧,
States 和
Top file 共同创建了 SaltStack 配置管理功能的核心。
现在让我们在目录
saltstack/salt 中创建一个简单的 top.sls 文件并添加以下内容。
top.sls
base:
'*':
-common
'minion1':
-samples
这里,
状态,通常
适用
所有系统状态,
samples适用于
minion1 .
接下来,运行 Salt Master 并应用如下所示的状态。
root@saltmaster:/home/vagrant# salt '*' state.apply
它将产生以下
输出-
minion1:
----------
ID: common_packages
Function: pkg.installed
Result: true
Comment: All specified packages are already installed
Started: 09:33:35.642355
Duration: 588.21 ms
Changes:
Summary for minion1
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
Total run time: 588.210 ms
minion2:
----------
ID: common_packages
Function: pkg.installed
Result: true
Comment: All specified packages are already installed
Started: 09:33:35.890331
Duration: 602.79 ms
Changes:
Summary for minion2
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
Total run time: 602.790 ms
Apply Batch Size
如果您有大量连接的 Minion,那么您可以限制一次更新的系统数量。它是通过使用
–batch-size 选项执行的,该选项定义如下。
root@saltmaster:/home/vagrant# salt--batch-size 5 '*' state.apply
它将产生以下
输出-
Executing run on ['minion2', 'minion1']
jid:
20170314094638482664
minion1:
----------
ID: common_packages
Function: pkg.installed
Result: true
Comment: All specified packages are already installed
Started: 09:46:41.228519
Duration: 582.24 ms
Changes:
Summary for minion1
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
Total run time: 582.240 ms
retcode:
0
jid:
20170314094638482664
minion2:
----------
ID: common_packages
Function: pkg.installed
Result: true
Comment: All specified packages are already installed
Started: 09:46:41.153609
Duration: 605.235 ms
Changes:
Summary for minion2
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
Total run time: 605.235 ms
retcode:
0
Salt State Functions
Salt 状态函数用于在远程系统上安装和配置应用程序。让我们使用 Salt 状态函数安装一个"Vim"包。
创建和应用状态函数
在"salt-vagrant-demo/saltstack/salt/sample.sls"目录下创建一个名为"sample.sls"的文件并添加以下内容-
sample.sls
install vim:
pkg.installed:
-name: vim
一旦 Vagrant 环境启动,运行 salt master 并通过运行以下命令应用 sample.sls。
root@saltmaster:/home/vagrant# sudo salt 'minion2’ state.apply sample
它将产生以下
输出-
minion2:
----------
ID: install vim
Function: pkg.installed
Name: vim
Result: true
Comment: package vim is installed
Started: 15:07:45.752764
Duration: 553.506 ms
Changes:
Summary for minion2
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
Total run time: 553.506 ms
现在,我们添加了一个包"Vim"。现在让我们使用Salt测试方法来测试这个包。
Salt State Testing
通过向状态添加"test = True"选项来强制测试运行。返回信息将显示将应用的状态为黄色,结果报告为"无"。
以下命令用于测试状态-
root@saltmaster:/home/vagrant# sudo salt 'minion2’ state.apply sample test = true
它将产生以下
输出-
minion2:
----------
ID: install vim
Function: pkg.installed
Name: vim
Result: true
Comment: package vim is already installed
Started: 15:07:45.752764
Duration: 553.506 ms
Changes:
Summary for minion2
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
Total run time: 553.506 ms
SaltStack ─ Pillar Component
Pillar 是使 Salt 状态可重用的重要组件。它用于为使用目标分配的 Minion 定义安全数据。 Salt pillar 数据存储端口、文件路径、配置参数和密码等值。
Pillar config File
主配置文件中
pillar_roots 的配置如下所示-
pillar_roots:
base:
-/srv/pillar
这里,文件在"/srv/pillar"目录中。
考虑,位于/srv/pillar/top.sls 的顶级文件具有以下结构-
现在,移至位于/srv/pillar/default.sls 中的 default.sls 文件并添加以下代码。
# default pillar values
apache
git
保存文件后,刷新支柱以更新所有更改。
Refreshing the Pillar
您可以使用以下命令刷新支柱。
root@saltmaster:/home/vagrant# salt '*' saltutil.refresh_pillar
以上命令用于刷新所有minion上的Salt pillar数据。
List Pillar Data
要列出支柱数据,您可以使用下面给出的命令。
root@saltmaster:/home/vagrant# salt '*' pillar.ls
它将产生以下
输出-
minion2:
-apache
-git
minion1:
-apache
-git
Pillar Items
设置 pillar 后,可以通过 pillar 模块在 minion 上查看数据。可以通过函数
pillar.items 访问它,该函数定义如下。
root@saltmaster:/home/vagrant# salt '*' pillar.items
它将产生以下
输出-
minion2:
----------
apache:
httpd
git:
git
minion1:
----------
apache:
httpd
git:
git
SaltStack – Include Component
‘Include’组件用于在多个地方定义相同的配置任务。它很容易执行。在状态文件的顶部,使用以下格式添加一个包含-
include:
-state file 1
-state file 2
此处,
状态文件 1 和
状态文件 2 是您要包含的 SLS 文件的名称。无需包含
.sls 扩展名。 Included Salt 状态被插入到当前文件的顶部。
子目录中的状态文件
您可以使用点 (.) 包含子目录状态文件。它充当目录分隔符。
Grains Interface
Grains 是一个用于获取底层系统信息的接口。针对操作系统、域名、IP 地址、内核、操作系统类型、内存和许多其他系统属性收集 Grain。
Grains Targeting
Grain 数据可用于定位 Minion,其定义在以下代码块中。
root@saltmaster:/home/vagrant# salt-G 'os:Ubuntu' test.ping
它将产生以下
输出-
minion1:
true
minion2:
true
Listing Grains
可以使用下面定义的"grains.ls"模块列出谷物。
root@saltmaster:/home/vagrant# salt '*' grains.ls
List Items
与 Pillar 一样,Grains 数据也可以使用"grains.items"列出。
root@saltmaster:/home/vagrant# salt '*' grains.items