Saltstack 시리즈 2 – Targeting

어제는 원래salt의 Web Ui-halite를 쓰려고 했는데, 생각해 보니, 우선'보이고 만질 수 있는'것들, 가장 기본적인 용도부터 쓰자.(맛을 좀 본 후에야 계속 연구할 수 있겠지...하하~)
그럼, Targeting은 무엇입니까?
공식 해명은 다음과 같다.
    Specifying which minions should run a command or execute a state by matching against hostnames, or system information, or defined groups, or even combinations thereof.
이거 다 읽었어. 알겠지..이미지 포인트의 예를 들어 우리는 이 명령으로 미니언 서버를 다시 시작할 수 있습니다. 웹 1 서버 위의apache라고 합니다.
    
salt web1 apache.signal restart

이 동시에, 우리는 top 파일에 죽을 수도 있다. 예를 들어 미니언 쪽의 웹 1만 웹 서버를 실행하도록 하는 것이다.sls
    
  
  base:
      ’web1’:
         - webserver

물론 정규 같은 것도 쓸 수 있다. 예를 들면:
   
    salt ’web?.example.net’ test.ping   #web1.example.net, web2.example.net . . .webN.example.net
    salt ’web[1-5]’ test.ping           #web1 web5
    salt ’web[1,3]’ test.ping           #web1 web3
    salt ’web-[x-z]’ test.ping          #web-x、web-y web-z

한 마디로 하면,salt에서는 특정한 미니언즈나 그룹을 제한하는 방법이 많다.
다음은compound matcher 테이블로 작업 목표를 대상으로 선별할 수 있습니다.
      Letter
Match Type
Example
         G
Grans glob
G@os:Ubuntu
         E
PCRE MinionID
E@web\d+\.(dev|qa|prod)\.loc
         P
Grains PCRE
P@os:(RedHat|Fedora|CentOS)
         L
List of minions
[email protected],minion3.domain.com orbl*.domain.com
         I
Pillar glob
I@pdata:foobar
         S
Subnet/IPaddress
[email protected]/24 or [email protected]
         R
Range cluster
R@%foo.bar
공식적인 개념과 소개는 여기까지입니다. 다음은 저희가 실제 조작을 해 보겠습니다.
먼저 제 실험 환경을 설명하겠습니다.
IP
OS
id
character
192.168.139.131
CentOS release 6.5 (Final)
192.168.139.131
master
192.168.139.128
CentOS release 6.5 (Final)
192.168.139.128-centos
minion
192.168.139.130
Ubuntu 12.04.4
192.168.139.130-ubuntu
minion
조작하기 전에 예를 들어salt-key를 보십시오.
[root@ www]# salt-key  -L
Accepted Keys:
192.168.139.128-centos
192.168.139.130-ubuntu
Unaccepted Keys:
Rejected Keys:

우리는 먼저 마스터 쪽에서 조작을 하고 먼저 그룹을 나눌 수 있다. 왜냐하면 2대밖에 없기 때문이다. 우리는 위의 표의 Grans glob에 따라 간단하게 그룹을 나눌 수 있다. (그룹을 나눌 때 이 부분을 중점적으로 고려해야 할 것 같다. 좋은 roles는 효율을 크게 향상시킬 수 있다. 그렇다면 서비스, OS, 업무에 따라 나눌 것인가, 아니면 그들 몇 개의 그룹을 나눌 것인가 등, 나도 아직 생각하지 못했다...하하...)
master 프로필을 열고 Node Groups를 찾아 수정합니다.
[root@ www]# vi /etc/salt/master
nodegroups:
  group1: 'G@os:Centos'
  group2: 'G@os:Ubuntu'

난입해...:여기에 갑자기 사용자 권한의 문제가 생각났다.예를 들어 내가 Tom에게 권한을 주면 테스트만 허용한다.ping과 status.uptime, 다른 권한이 없습니다.(예를 들어 cmd.runrm-f를 실행하면 오류가 발생합니다.)우리도 다시/etc/salt/master에서 이렇게 증가할 수 있다.
    client_acl:
       Tom:
         - test.ping
         - status.uptime
    
수정한 후salt-master 서비스를 다시 시작하고 다음 결과를 보십시오.
[root@ www]# service salt-master restart
Stopping salt-master daemon: [  OK  ]
Starting salt-master daemon: [  OK  ]
[root@ www]# salt -N group2 test.ping
192.168.139.130-ubuntu:
    True
[root@ www]# salt -N group1 test.ping
192.168.139.128-centos:
    True

또한 nodegroups를 수정하지 않고 명령줄에서 직접 선별 작업을 할 수 있습니다.주의해야 할 것은 이곳의 matchers도 and, or, not를 사용할 수 있다는 것이다.
    
[root@ www]# salt -C 'G@os:Ubuntu or 192*' test.ping
192.168.139.130-ubuntu:
    True
192.168.139.128-centos:
    True

마찬가지로 top 파일에서 제한할 수도 있습니다.
    
   
 base:
     ’G@os:Ubuntu or 192* ’:
        - match: compound
        - webserver

주의해야 할 것은 not의 시작은 위의 컴퓨터 matchers 표를 지원하지 않는다는 것이다. 우리는 이렇게 회피할 수 있다.
    
    salt -C ’* and not G@kernel:Darwin’ test.ping
    salt -C ’* and not web-dc1-srv’ test.ping

다음은 파일의 수동 전송에 대해 이야기합시다.
우선,master단의/srv/salt/아래에test라는 파일을 만듭니다. 그 안에 아무렇게나 연결되어 있습니다.adada.그리고salt를 통해minion단,root 디렉터리로 전송하고 1234로 이름을 바꿉니다.   
[root@ salt]# pwd
/srv/salt
[root@ salt]# cat test 
adada
[root@ salt]# salt '*' cp.get_file salt://test /root/1234
192.168.139.128-centos:
    /root/1234
192.168.139.130-ubuntu:
    /root/1234

그리고 미니언으로 가서 결과를 봅시다.
root@ubuntu:~# ll
total 36
drwx------  4 root root 4096 Jul 28 06:09 ./
drwxr-xr-x 22 root root 4096 Jul  1 23:55 ../
-rw-r--r--  1 root root    6 Jul 28 06:09 1234
-rw-------  1 root root  525 Jul 28 02:01 .bash_history
-rw-r--r--  1 root root 3106 Apr 19  2012 .bashrc
drwx------  2 root root 4096 Jul  2 00:02 .cache/
-rw-r--r--  1 root root  140 Apr 19  2012 .profile
drwxr-xr-x  2 root root 4096 Jul 28 02:47 .rpmdb/
-rw-------  1 root root  749 Jul 28 01:52 .viminfo
root@ubuntu:~# cat 1234
adada
[root@ ~]# cd /root/
[root@ ~]# ll
total 24
-rw-r--r--. 1 root root    6 Jul 29 12:06 1234
-rw-------. 1 root root 1090 Apr 10 00:44 anaconda-ks.cfg
-rw-r--r--. 1 root root 9017 Apr 10 00:44 install.log
-rw-r--r--. 1 root root 3091 Apr 10 00:41 install.log.syslog
[root@ ~]# cat 1234 
adada

흠.파일 전송 시연이 됐습니다.에이, 내가 수동으로 그 서버에 가서 하나씩 고치는 게 더 빠르지 않겠어?확실히 (수량이 적은 상황에서 게으름 피우고 싶지 않으면 아무도 너를 막을 수 없다...).한 마디로 하면salt는 일정한 규모의 서버가 있어야만 그 매력을 나타낼 수 있다. 
또한 우리는master단에서salt를 통해 특정한 데스크톱, 일부 또는 모든 미니언즈에 대한 조작을 할 수 있다.(위에서 언급한compound matcher 테이블과 and or not 기억하십니까?)
[root@ salt]# salt '*'  cmd 'ps -ef|grep http'
192.168.139.130-ubuntu:
    'cmd' is not available.
192.168.139.128-centos:
    'cmd' is not available.
[root@ salt]# salt '*'  cmd.run 'ps -ef|grep http'
192.168.139.130-ubuntu:
    root      3584  3583  0 02:14 ?        00:00:00 /bin/sh -c vi /etc/www/httpd/conf/httpd.conf
    root      3585  3584  0 02:14 ?        00:00:00 vi /etc/www/httpd/conf/httpd.conf
    root      5724  5723  0 06:24 ?        00:00:00 /bin/sh -c ps -ef|grep http
    root      5726  5724  0 06:24 ?        00:00:00 grep http
192.168.139.128-centos:
    root     28979     1  0 09:40 ?        00:00:00 /usr/sbin/httpd
    apache   30026 28979  0 11:19 ?        00:00:00 /usr/sbin/httpd
    apache   30027 28979  0 11:19 ?        00:00:00 /usr/sbin/httpd
    apache   30028 28979  0 11:19 ?        00:00:00 /usr/sbin/httpd
    apache   30029 28979  0 11:19 ?        00:00:00 /usr/sbin/httpd
    apache   30030 28979  0 11:19 ?        00:00:00 /usr/sbin/httpd
    apache   30031 28979  0 11:19 ?        00:00:00 /usr/sbin/httpd
    apache   30032 28979  0 11:19 ?        00:00:00 /usr/sbin/httpd
    apache   30033 28979  0 11:19 ?        00:00:00 /usr/sbin/httpd
    root     30566 30565  0 12:21 ?        00:00:00 /bin/sh -c ps -ef|grep http
    root     30568 30566  0 12:21 ?        00:00:00 grep http
[root@ salt]# salt '*'  cmd.run 'date'
192.168.139.130-ubuntu:
    Mon Jul 28 06:24:17 EDT 2014
192.168.139.128-centos:
    Tue Jul 29 12:21:34 CST 2014
[root@ salt]# salt -N group1  cmd.run 'df -h'
192.168.139.128-centos:
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/mapper/VolGroup-lv_root
                           19G  1.3G   17G   8% /
    tmpfs                 242M     0  242M   0% /dev/shm
    /dev/sda1             485M   53M  407M  12% /boot

기본적인 조작이 얼마 남지 않았는데, 재미를 보았느냐, 그럼 우리 후속 업데이트를 보자~

좋은 웹페이지 즐겨찾기