SaltStack 환경에서 노드를 추가하고, 다양한 타겟팅 옵션과 모듈을 활용하여 인프라를 효율적으로 관리하는 방법을 설명합니다.
1. 신규 Minion 노드 확장 및 연결
기존 환경에 새로운 피제어 장비(Minion)를 추가하기 위해 Master 노드와 Minion 노드 간의 통신 환경을 설정합니다. 먼저 Master 노드의 /etc/hosts 파일에 신규 노드의 정보를 등록합니다.
[root@master-node ~]# cat /etc/hosts
127.0.0.1 localhost
10.0.0.10 master-node
10.0.0.11 web-server-01
10.0.0.12 web-server-02
10.0.0.13 db-server-01
신규 Minion 노드(db-server-01)에서 Master 서버의 주소와 고유 ID를 설정한 후 서비스를 시작합니다.
[root@db-server-01 ~]# vi /etc/salt/minion
master: 10.0.0.10
id: db-server-01
[root@db-server-01 ~]# systemctl start salt-minion
Master 노드에서 인증 대기 중인 키를 확인하고 승인합니다.
[root@master-node ~]# salt-key -L
Accepted Keys:
web-server-01
web-server-02
Unaccepted Keys:
db-server-01
[root@master-node ~]# salt-key -a db-server-01 -y
2. 타겟팅 옵션을 활용한 원격 명령 실행
SaltStack은 특정 기준에 따라 대상을 필터링하여 명령을 전달하는 강력한 기능을 제공합니다. 기본 형식은 salt '<target>' <function> [arguments]입니다.
정규표현식 매칭 (-E)
호스트 이름의 특정 패턴을 정규식으로 매칭하여 명령을 실행합니다.
# 'web-'로 시작하는 모든 노드의 상태 확인
[root@master-node ~]# salt -E '^web-.*' test.ping
리스트 매칭 (-L)
쉼표로 구분된 특정 호스트 리스트를 대상으로 지정합니다.
[root@master-node ~]# salt -L 'web-server-01,db-server-01' grains.item os
Grains 정보 활용 매칭 (-G)
시스템의 하드웨어, OS 정보 등 정적 데이터를 기반으로 필터링합니다.
# CentOS 운영체제를 사용하는 노드 대상
[root@master-node ~]# salt -G 'os:CentOS' cmd.run 'free -h'
Pillar 데이터 매칭 (-I)
사용자가 정의한 변수(Pillar) 값을 기준으로 대상을 선택합니다.
# 역할이 'database'로 설정된 노드 확인
[root@master-node ~]# salt -I 'role:database' test.ping
복합 매칭 (-C)
여러 조건을 논리 연산자(and, or, not)로 조합하여 정교하게 타겟팅합니다.
# 이름이 'web'으로 시작하면서 OS가 Ubuntu가 아닌 노드 대상
[root@master-node ~]# salt -C 'E@^web.* and not G@os:Ubuntu' test.ping
네트워크 범위 매칭 (-S)
IP 주소 대역 또는 서브넷 마스크를 기준으로 대상을 선택합니다.
[root@master-node ~]# salt -S '10.0.0.0/24' test.ping
3. Python API 활용 예시
명령행 인터페이스뿐만 아니라 Python 스크립트 내에서 SaltStack 기능을 직접 제어할 수 있습니다.
import salt.client
# LocalClient 인스턴스 생성
local_runner = salt.client.LocalClient()
# 모든 노드에 대해 ping 테스트 수행
result = local_runner.cmd('*', 'test.ping')
# 결과 출력 (딕셔너리 형태)
for minion_id, status in result.items():
print(f"Minion: {minion_id}, Online: {status}")
4. Archive 모듈을 이용한 압축 관리
파일 압축 및 해제 작업을 원격 노드에서 수행할 수 있는 모듈입니다. tar, gzip, zip 등 다양한 포맷을 지원합니다.
파일 압축 (Gzip)
[root@master-node ~]# salt '*' archive.gzip /var/log/app.log
Tar 아카이브 생성
# /data/config 디렉토리를 /tmp/config_backup.tar.gz로 압축
[root@master-node ~]# salt '*' archive.tar zcf /tmp/config_backup.tar.gz /data/config
아카이브 해제
# 지정된 경로에 압축 파일 해제
[root@master-node ~]# salt 'web-server-01' archive.tar xf /tmp/source.tar.gz dest=/opt/app/
5. 시스템 모듈 확인
현재 SaltStack 버전에서 사용 가능한 전체 모듈 리스트는 sys.list_modules를 통해 확인할 수 있습니다.
[root@master-node ~]# salt '*' sys.list_modules