분명히 말하면, 나는 솔트스택을 사용하는 "최선의 방법"을 요구하는 것이 아닙니다. 나는 솔트스택을 사용하는 방법이 무수히 많다는 것과 자신에게 맞는 방법이 효과가 있다는 것을 알고 있습니다. 내 질문은 특히 발견된 모범 사례 문서 페이지에 관한 것입니다.여기.
먼저 현재 환경이 어떤지 보여드리겠습니다.
(이것은 내 환경에만 국한된 것이 아닙니다. 이전에 이 질문을 본 적이 있지만 stackexchange.com에서는 본 적이 없습니다. 일반적으로소금 더미 irc)
처음으로 saltstack 문서를 읽은 후 나만의 환경을 구현하려고 시도했지만 여러 프로젝트가 서로 다른 패키지로 배포되면서 원하는 것을 어떻게 달성해야 할지 혼란스러웠습니다. 첫 번째 시도는 다음과 같습니다.
배포해야 하는 세 가지 다른 프로젝트가 있습니다.
프로젝트1,프로젝트2, 그리고프로젝트3.
/etc/salt/마스터
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
이 설정에서 마음에 들지 않는 점
- 중복 파일
공통 패키지가 있는 프로젝트가 있는 경우(예를 들어 세 프로젝트 모두 Apache가 있는 경우 해당 폴더 내부에 각 프로젝트에 대한 Apache 디렉터리가 있어야 합니다.) 아파치가 동일하게 구성되지 않았기 때문에 나쁘지는 않지만 saltstack이 허용하는 조직을 활용하고 있다고 생각하지 않습니다.
- 쉽게 읽을 수 없음
보시다시피 이 설정은 읽기가 좀 어렵습니다. /etc/salt/master
특정 프로젝트와 관련된 미니언을 추가하고 싶을 때마다 파일 의 노드 그룹에서 내 group-projectx를 편집해야 합니다 .
솔트스택 모범 사례
내 질문은 언급된 모범 사례 정책을 어떻게 구현하는가입니다.여기, 위에 지정된 환경에서. 이를 수행할 수 있는 방법이 많이 있다는 것을 알고 있지만 이해하기 쉽고 Apache가 있는 서버가 있을 때마다 새로운 Apache 디렉토리를 만들지 않아도 되는 방식으로 이 작업을 수행하고 싶습니다.
도움을 주시면 감사하겠습니다.
편집 1
내가 받은 몇 가지 제안은 superuser.com을 통하지 않고 노드 그룹을 모두 제거하고 내가 사용한 것과 동일한 형식을 사용하여 어떤 미니언이 어떤 상태로 이동하는지 top.sls 파일에 지정하는 것이었습니다. /etc/salt/master 파일(L@dev-project1,qa-project1,prod-project1)
또한 각 프로젝트마다 다른 솔트 마스터를 사용해야 한다는 제안도 있었습니다. 일리가 있고 그 답변이 마음에 들지만 VM이나 물리적 시스템을 위한 공간이 많지 않은 사람들에게는 어려울 수 있다고 생각합니다.
답변1
최상위 파일에서 직접 서버 유형별로 다양한 앱 구성을 다루고 있습니다.
# per server hostname : ie.
base:
'websrv*':
- oraclejava
- tomcat
- iptables-persistent
- postgresql
- apache
'monsrv*':
- snort
- pulledpork
- barnyard
- snorby
- apache
- mysql
미니언 이름 지정으로 인해 정규 표현식을 기반으로 분류할 수 없는 경우 그레인으로도 동일한 작업을 수행할 수 있습니다.
# 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에 있는 유일한 중복 데이터입니다. 기둥 키는 동일하지만 값이 달라 필요에 따라 환경을 구성합니다. 그런 다음 하나의 아파치 상태와 그 안의 특정 환경에 관련된 모든 것이 내 기둥의 값으로 렌더링된다고 가정하겠습니다.
기둥에는 다음과 같은 내용이 포함될 수 있습니다.
/top.sls
/apache /
| init.sls
| project1.sls
| project2.sls
| project3.sls