Ansible 배치 처리 실전 가이드¶
소프트웨어 개요¶
Ansible은 Python 기반의 자동화 운영 도구로, 여러 운영 도구(puppet, chef, func, fabric)의 장점을 통합하여 배치 시스템 구성, 배치 프로그램 배포, 배치 명령 실행 등의 기능을 제공합니다.
기능 특징¶
- 배포가 간편하며, 마스터 노드에만 Ansible 환경을 구성하면 되고, 대상 노드에는 별도 작업이 필요하지 않음
- 기본적으로 SSH 프로토콜을 사용하여 장비를 관리
- 다양한 일반 운영 작업 모듈을 제공하여 일상적인 대부분의 작업을 수행 가능
- 구성이 간단하고, 기능이 강력하며, 확장성이 뛰어남
- API 및 사용자 정의 모듈을 지원하며, Python을 통해 쉽게 확장 가능
- Playbooks를 통해 강력한 구성 및 상태 관리를 지원
기본 아키텍처¶
- Ansible: Ansible 핵심 프로그램
- HostInventory: Ansible이 관리하는 호스트 정보(포트, 비밀번호, IP 등)를 기록
- Playbooks: YAML 형식 파일로, 여러 작업을 하나의 파일에 정의하며, 호스트가 어떤 모듈을 호출하여 기능을 수행할지 정의
- CoreModules: 핵심 모듈로, 주로 핵심 모듈을 호출하여 관리 작업을 수행
- CustomModules: 사용자 정의 모듈로, 핵심 모듈로 수행할 수 없는 기능을 구현하며, 여러 언어를 지원
- ConnectionPlugins: 연결 플러그인으로, Ansible과 호스트 간 통신에 사용
작업 실행¶
Ansible 시스템은 제어 호스트가 관리 대상 노드를 조작하는 방식에 따라 ad-hoc과 playbook 두 가지로 나뉩니다
-
ad-hoc 모드(점대점 모드) 단일 모듈을 사용하며, 단일 명령을 배치로 실행할 수 있습니다. ad-hoc 명령은 빠르게 입력할 수 있고 저장할 필요가 없는 명령으로, bash의 한 줄 셸 명령과 유사합니다.
-
playbook 모드(스크립트 모드) Ansible의 주요 관리 방식이자 Ansible의 강력한 기능의 핵심입니다. playbook은 여러 task를 조합하여 웹 서비스 설치/배포, 데이터베이스 서버 배치 백업 등과 같은 기능을 수행합니다. playbook은 여러 ad-hoc 작업을 조합한 설정 파일로 이해하면 됩니다.
배치 처리 실전 가이드¶
환경 준비¶
| IP | 시스템 | 호스트명 | 설명 |
|---|---|---|---|
| 10.0.0.65 | CentOS 7.8 | ansible01 | Ansible 관리 노드 (DK 설치 완료) |
| 10.0.0.66 | CentOS 7.8 | ansible02 | 관리 대상 노드 1 |
| 10.0.0.67 | CentOS 7.8 | ansible03 | 관리 대상 노드 2 |
소프트웨어 설치¶
ansible01에 로그인하여 설치 명령을 실행합니다
주요 프로그램
/usr/bin/ansible메인 프로그램/usr/bin/ansible-doc설정 문서/usr/bin/ansible-playbook자동화 작업 및 스크립트 도구/usr/bin/ansible-pull원격 명령 실행 도구/usr/bin/ansible-vault파일 암호화 도구
주요 설정 파일
/etc/ansible/ansible.cfg메인 설정 파일/etc/ansible/hosts호스트 인벤토리(관리 대상 호스트를 이 파일에 추가)/etc/ansible/roles/역할을 저장하는 디렉터리
비밀번호 없는 로그인¶
ansible01에 로그인하여 키를 생성합니다. 기본 경로는 /root/.ssh/id_rsa, /root/.ssh/id_rsa.pub입니다
키를 관리 대상 노드에 배포합니다
호스트 인벤토리 파일 /etc/ansible/hosts를 수정하여 그룹 이름과 호스트 IP를 추가합니다
연결 상태를 확인합니다
주요 모듈¶
Shell 모듈¶
Shell 모듈은 원격 호스트에서 셸 인터프리터를 호출하여 명령을 실행할 수 있으며, 파이프 등 다양한 셸 기능을 지원합니다
- 현재 사용자 ID 확인
- 현재 시스템에 로그인한 사용자 확인
Copy 모듈¶
이 모듈은 파일을 원격 호스트로 복사하는 데 사용되며, 지정된 내용으로 파일 생성 및 권한 수정 등을 지원합니다
ansible.cfg파일을 원격 호스트로 복사하고 권한을 "읽기/쓰기"-rw-rw-rw-로 지정
원격 호스트의 ansible.cfg 파일 확인
- 내용을 지정하여 파일 생성
원격 호스트 파일 확인
File 모듈¶
이 모듈은 파일의 속성을 설정하는 데 사용되며, 파일 생성, 심볼릭 링크 파일 생성, 파일 삭제 등을 지원합니다
/tmp디렉터리 아래에app디렉터리 생성
/tmp 디렉터리 확인
- 이전에 ansible01에서 복사한
ansible.cfg파일 삭제
Fetch 모듈¶
이 모듈은 원격 호스트에서 파일을 가져와(복사하여) 로컬로 저장하는 데 사용됩니다
- 원격 호스트의
/tmp/hello파일을/root디렉터리로 가져오기
/root 디렉터리 아래에 두 개의 새 디렉터리(원격 호스트 IP가 디렉터리 이름이 됨)가 생성된 것을 확인할 수 있습니다
Guance 적용¶
배치 설치¶
Shell 모듈을 사용하여 DataKit 설치 (해당하는 token으로 변경 필요)
ansible guance -m shell -a 'DK_DATAWAY="https://openway.guance.com?token=token" bash -c "$(curl -L https://static.guance.com/datakit/install.sh)"'
프로세스가 실행 중인지 확인
배치 설정¶
- netstat 플러그인 활성화
shell 모듈을 사용하여 netstat.conf.sample 파일을 netstat.conf로 복사
ansible guance -m shell -a 'cp /usr/local/datakit/conf.d/host/netstat.conf.sample /usr/local/datakit/conf.d/host/netstat.conf'
DataKit 배치 재시작
배치 업그레이드¶
DataKit 업그레이드 yaml 파일 생성, /etc/ansible/dk_upgrade.yaml
- hosts: guance
remote_user: root
tasks:
- name: dk version check
shell: datakit --version|grep -i upgrade|wc -l
register: version
- name: dk upgrade
when: version.stdout > "0"
shell: DK_UPGRADE=1 bash -c "$(curl -L https://static.guance.com/datakit/install.sh)"
playbook 실행
DataKit 버전이 최신 버전으로 업데이트된 것을 확인
crontab -e에 예약 작업 추가 (매일 02시 02분에 배치 업그레이드 실행)















