salt (Salt stack)

salt 는 배포 관리자이다. ansible 과 유사한 tool이다. 다만 ansible 이 ssh 를 사용하는데에 비해 salt 는 agent를 사용한다. 이는 장점이자 단점이 된다.

https://docs.saltstack.com/en/latest/contents.html

https://docs.saltstack.com/en/latest/topics/tutorials/index.html

salt의 설치

fedora에서는 설치가 간편한다. 왜냐면 공식 repo에 이미 있다.

# master install
$  sudo yum install salt-master

# minion install
$ sudo yum install salt-minion

디자인

salt 는 master를 하나 두고 각 node 마다 minion 을 둔다. minion 과 master 는 zeromq 로 통신한다. 이 연결은 ssl 로 보호 받는다. default port 는 4505 4506 두개이다.

기본적으로 설정은 크게 건들것 없이 minion 에 다음과 같은 설정을 하면 끝이다.

master:
  - {master의 주소}

fedora 에서는 systemctl 로 daemon을 띄울수 있지만 그냥 /usr/bin/salt-minion 혹은 /usr/bin/salt-master 을 실행해도 된다.

설정이 끝난 이후에는 salt master 에서 salt 명령어로 실행할수 있게 된다. ansible에 비해서 key distribution 과정이 없기 때문에 쉽게 사용할수 있다.

기본적으로는 node의 state를 지정하고 해당 state 를 만들어 주는 일련의 명령을 실행 하게끔 되어 있다. ansible 도 같은 방식을 택한것으로 보면 이런툴들이 기본적으로 택하는 구조인듯 하다.

개념

grain

https://docs.saltstack.com/en/latest/topics/grains/index.html

각 node 별 변수를 일겉는다. minion의 /etc/salt/grain과 /etc/salt/minion 설정에 해당 설정을 넣을수 있다. minion.d 에 넣는것이 변경을 쉽게 확인할수 있어서 편하다.

이후 Pillar의 top file에서 이것을 활용해서 특정 role을 가진 node에 특정 상태를 만들게 할수 있다.

python script로 작성이 가능하지만 여기 까지 custom 하는 일이 많지는 않을것 같다.

ansible의 fact와 비슷하지만 agent의 option 으로 설정하기 때문에 node의 값이라는것이 좀더 명확하다.

Pillar

https://docs.saltstack.com/en/latest/topics/tutorials/pillar.html#pillar-walk-through

여러 minion 에서 공유해야하는 설정값을 저장하는데 쓴다. 혹은 master에서 generate 할수도 있다. 특정 조건에 맞는 minion 에게 특정 값을 설정하거나 하는 일들도 가능하다.

실행

salt '{target}' state.apply {name}을 하게 되면 /src/salt/{name}.sls 를 {target} node를 대상으로 실행하게 된다. 이때 sls 는 다음과 같은 과정으로 실행된다.

  1. grain 과 pliar 에서 각 node에 적용된 vaule 값을 만들어 냄
  2. template engine을 거침
  3. yaml 파일을 parsing
  4. 정의된 상태로 만들기 위한 명령 실행