Saltstack 最佳实践文档澄清

Saltstack 最佳实践文档澄清

需要说明的是,我并不是在问使用 saltstack 的“最佳方式”。我知道使用 saltstack 的方法有很多,适合你的方式才是有效的。我的问题是关于最佳实践文档页面这里

首先我要向你展示我当前的环境

(这不是我所处环境特有的。我以前也见过这个问题,但从来没有在 stackexchange.com 上,通常是在saltstack irc

第一次阅读 saltstack 文档后,我尝试实现自己的环境,但我不知道如何在多个项目都使用不同的包进行部署的情况下完成我想要的工作。以下是我的第一次尝试。

我有三个不同的项目需要部署,分别称为

项目1项目2, 和项目3

/etc/salt/master

file_roots:
  base:
    - /srv/salt
  project1:
    - /srv/salt/project1
  project2:
    - /srv/salt/project2
  project3:
    - /srv/salt/project3

#I have three projects that I need to deploy to, and each has a dev, qa, and prod machine.
nodegroups:
  group-project1: 'L@dev-project1,qa-project1,prod-project1'
  group-project2: 'L@dev-project2,qa-project2,prod-project2'
  group-project3: 'L@dev-project3,qa-project3,prod-project3'

/srv/salt/top.sls

project1:
  'group-project1':
    - match: nodegroup
    - oraclejava
    - tomcat
    - iptables-persistent
    - postgresql
    - apache
project2:
  'group-project2':
    - snort
    - pulledpork
    - barnyard
    - snorby
    - apache
    - mysql
project3:
  'group-project3':
    - match: nodegroup
    - oraclejava
    - tomcat
    - iptables-persistent
    - postgresql
    - apache

/srv/salt 内部的文件结构

/srv/salt 的内容

/srv/salt/project1, project2, project3, top.sls

/srv/salt/project1 的内容

/srv/salt/project1/oraclejava, tomcat, iptables-persistent, postgresql, ges, apache

/srv/salt/project2 的内容

/srv/salt/project2/snort, pulledpork, barnyard, snorby, apache, mysql

/srv/salt/project3 的内容

/srv/salt/project3/oraclejava, tomcat, iptables-persistent, postgresql, ges, apache

我不喜欢这个设置的地方

  1. 重复文件

如果我的项目有共同的包,例如所有三个项目都有 apache,那么我必须在它们的文件夹中为每个项目创建一个 apache 目录。这并不可怕,因为 apache 的配置并不相同,但我认为我没有利用 saltstack 允许的组织方式。

  1. 不易阅读

如您所见,此设置有点难以阅读。/etc/salt/master每次我想添加与特定项目关联的 minion 时,都必须在文件中的 nodegroups 中编辑我的 group-projectx。

Saltstack最佳实践

我的问题是,我该如何实施上述最佳实践政策这里,在上述环境中。我知道有很多方法可以做到这一点,但我真的想以一种更容易理解的方式来做到这一点,并且不需要每次在服务器上安装 apache 时都创建一个新的 apache 目录。

任何帮助都将受到赞赏。

编辑1

我收到了一些建议,这些建议不是通过 superuser.com 提出的,而是完全摆脱节点组,只在 top.sls 文件中指定哪些 minions 与哪个状态对应,使用与我在 /etc/salt/master 文件 (L@dev-project1,qa-project1,prod-project1) 中使用的相同格式。

另外,有人建议我也许应该为每个项目使用不同的 salt-master。这很有道理,我也喜欢这个答案,但我认为对于那些没有足够空间放置虚拟机或物理机的人来说,这可能很困难。

答案1

我直接在顶部文件处理每个服务器类型的不同应用程序配置。

# per server hostname : ie. 

base:
  'websrv*':
    - oraclejava
    - tomcat
    - iptables-persistent
    - postgresql
    - apache
  'monsrv*':
    - snort
    - pulledpork
    - barnyard
    - snorby
    - apache
    - mysql

如果你的 minions 命名不允许你根据正则表达式对它们进行分类,那么你可以对 Grains 执行相同的操作。

# per server grains : ie. 

base:
  'G@role:websrv': # or even a custom grain like 'G@project:1'
    - oraclejava
    - tomcat
    - iptables-persistent
    - postgresql
    - apache
  'G@role:monitoring': # or even a custom grain like 'G@project:1'
    - snort
    - pulledpork
    - barnyard
    - snorby
    - apache
    - mysql

然后,我对我的支柱数据执行相同的操作,允许我将不同的支柱分配给某些主机,因此这是我在 Salt 中拥有的唯一重复数据,具有相同的支柱键但不同的值来根据需要配置我的环境。然后,假设我有一个 Apache 状态,其中任何特定于环境的内容都使用我的支柱中的值进行渲染。

在你的支柱中,你可以有例如:

/top.sls
/apache /
        | init.sls
        | project1.sls
        | project2.sls
        | project3.sls

相关内容