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

在这里,我们通过使用 Salt 状态在 Salt minion minion1 中安装了rsync、lftpcurl。如果它正常工作,您将看到如下所示的响应。

它将产生以下输出-

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

应用 Salt 状态

现在我们已经使用“.sls”文件创建了一个状态,并通过专门调用它来应用它。Salt 有一个名为top.sls文件的默认状态文件。顶部文件用于将多个状态文件应用于 Salt minion。顶部文件描述了应该在哪里应用状态。好吧,状态顶部文件共同创建了 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

应用批处理大小

如果您有大量连接的 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 状态函数

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 状态测试

测试运行需要通过向状态添加“test = True”选项来强制执行。返回信息将以黄色显示将应用的状态,结果报告为“None”。

以下命令用于测试状态-

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 组件

Pillar 是使 Salt 状态可重用的重要组件。它用于为使用目标分配的 minion 定义安全数据。Salt pillar 数据存储诸如端口、文件路径、配置参数和密码等值。

Pillar 配置文件

master 配置文件中pillar_roots的配置如下所示-

pillar_roots:
   base:
      - /srv/pillar

这里,文件位于“/srv/pillar”目录中。

考虑一下位于 /srv/pillar/top.sls 中的顶部文件,它具有以下结构-

base:
   '*':
      - default

现在,移动到位于 /srv/pillar/default.sls 中的 default.sls 文件,并添加以下代码。

# Default pillar values
apache
git

保存文件后,刷新 pillar 以更新所有更改。

刷新 Pillar

您可以使用以下命令刷新 pillar。

root@saltmaster:/home/vagrant# salt '*' saltutil.refresh_pillar

以上命令用于刷新所有 minion 上的 Salt pillar 数据。

列出 Pillar 数据

要列出 pillar 数据,您可以使用以下命令。

root@saltmaster:/home/vagrant# salt '*' pillar.ls

它将产生以下输出-

minion2:
   - apache
   - git
minion1:
   - apache
   - git

Pillar 项目

设置 pillar 后,可以通过 pillar 模块在 minion 上查看数据。可以通过函数pillar.items访问它,该函数定义如下。

root@saltmaster:/home/vagrant# salt '*' pillar.items

它将产生以下输出-

minion2:
   ----------
   apache:
      httpd
   git:
      git
minion1:
   ----------
   apache:
      httpd
   git:
      git

SaltStack – Include 组件

‘Include’组件用于在多个位置定义相同的配置任务。它易于执行。在状态文件的顶部,使用以下格式添加 include-

include:
   - state file 1 
   - state file 2

这里,状态文件 1状态文件 2是要包含的 SLS 文件的名称。无需包含.sls扩展名。包含的 Salt 状态将插入当前文件的顶部。

子目录中的状态文件

您可以使用点(.)包含子目录状态文件。它充当目录分隔符。

include:
   - dir.sls1 

Grains 接口

Grains 是用于获取有关底层系统信息的接口。为操作系统、域名、IP 地址、内核、操作系统类型、内存和许多其他系统属性收集 Grains。

Grains 定位

在定位 minion 时可以使用 Grain 数据,这在以下代码块中定义。

root@saltmaster:/home/vagrant# salt -G 'os:Ubuntu' test.ping

它将产生以下输出-

minion1:
   True
minion2:
   True

列出 Grains

可以使用‘grains.ls’模块列出 Grains,该模块定义如下。

root@saltmaster:/home/vagrant# salt '*' grains.ls

列出项目

与 Pillar 一样,也可以使用'grains.items'列出 Grains 数据。

root@saltmaster:/home/vagrant# salt '*' grains.items
广告