- 서버 정보
- 서버 사양
– IwinV 가상 서버 환경에서 진행하였습니다.
CPU | Mem | Disk | OS |
---|---|---|---|
4Core | 8GB | 50GB | Rocky Linux 8 |
- Network
– Master Agent 개념과 동일하지만 대부분 Ansible Server와 Node로 표현하고 있어 아래와 같이 설정하였습니다.
Node Name | Host Name | Private IP |
---|---|---|
Ansible-Server | Ans-SRV | 10.101.0.3 |
Ansible-Node1 | Ans-N01 | 10.101.0.4 |
Ansible-Node2 | Ans-N02 | 10.101.0.8 |
2. 기본 설정
- 방화벽 서비스 설정
– 테스트를 위해서 기본 방화벽 disable 후 진행하였지만 실제 ansible에 사용하실 용도라면 권유드리지 않습니다.
systemctl stop firewalld && systemctl disable firewalld
- 패키지 업데이트
dnf update -y
- 계정 일치화
– 사용할 root 계정을 일치화하여 생성해둡니다.
3. Ansible Core 설치
- Ansible Core란?
Ansible Core란 Ansible 동작에 필요한 최소한의 유틸이 포함된 패키지를 의미하며, Ansible 설치는 대체로 Ansible Core 설치를 뜻합니다.
-
Ansible Config Files
ansible.cfg
: /etc/ansible/ansible.cfg 에 설치되며, 앤서블 실행 관련 옵션을 기재합니다.
hosts
: /etc/ansible/hosts 에 설치되며, 앤서블 서버에 연결되는 노드들의 정보를 기재합니다.
- 설치
dnf install -y ansible
– 설치가 정상적으로 완료되었다면 /usr/bin 하단에 ansible 관련 실행 명령어가 설치되어 있습니다.
4. Node 연결
- Ansible-Server 설정파일에 호스트 정보 추가
– 파일 위치 : /etc/ansible/hosts
vi /etc/ansible/hosts ## db-[99:101]-node.example.com // 해당 구문 밑에 추가 # 추가할 Node Server IP 한 개 당 한 줄씩 기재 10.101.0.4 10.101.0.8
- Node Server known_hosts_key value
– 이 과정에서 주의해야 할 점은 입력한 hosts 파일의 서버 갯수만큼 [yes]를 입력해야 한다는 점입니다.
ansible all -m ping
- Ansible Server와 Node Server 간 통신 테스트
– 아래 그림처럼 출력되면 성공입니다.
ansible all -m ping -k
– all 옵션을 쓴다면 /etc/ansible/hosts 에 등록된 모든 Node Server를 목적지로 설정합니다.
– host를 별도로 지정해도 무관하나 all 옵션을 제외한 채로 사용해야 합니다.
– 모든 Node 서버가 아니지만 공통점을 가진 특정한 Node 서버들을 목적지로 설정하려면 그룹으로 묶어서 사용할 수 있습니다.
그룹 설정 시 [그룹명]을 상단에 기재하고 Node 서버 IP들을 입력하면 됩니다.
vi /etc/ansible/hosts [Rocky8_Node] # 단 그룹 명은 띄어쓰기 불가 10.101.0.4 10.101.0.8
ansible Rocky8_Node -m ping -k
- 별도의 Custom host 파일 생성
– 기본 host 등록 파일 위치가 아닌 직접 생성하여서 사용해도 괜찮습니다.
단, ansible은 실행 시 자동으로 /etc/ansible/hosts 파일을 읽어들여 실행하기 때문에 별도의 파일을 작성했다면
해당 파일을 커맨드 상에 -i
옵션과 함께 매번 기재하여 실행해야 합니다.
echo "10.101.0.4" > /etc/ansible/custom_hosts.lst echo "10.101.0.8" >> /etc/ansible/custom_hosts.lst # 파일 내 모든 노드를 목적지로 설정 시 (all과 동일) ansible -i /etc/ansible/custom_hosts.lst -m ping -k # 파일 내 특정 노드를 목적지로 설정 시 ansible -i /etc/ansible/custom_hosts.lst 특정_NODE_IP -m ping -k
5. Ansible Option
- 자주 사용되는 몇 개의 옵션
-i : (--inventory-file) 명령 커맨드 적용 노드 선택
① 별도의 호스트 등록 파일을 생성하여 사용하는 경우
② 별도의 호스트 등록 파일에서 특정 노드를 지정하는 경우
ex) ansible -i /etc/ansible/custom_hosts.lst 10.101.0.4 -m ping -k
-m : (--module-name) 사용 모듈 선택
모듈의 종류에는 많은 것들이 있지만 주로 ping, shell, user, yum 등 자주 사용되는 것들이 정해져 있습니다.
cisco 장비와 연동하여 사용하는 모듈도 있어 네트워크 장비의 모니터링도 가능합니다. 단, ansible 서버의 이더넷을 통해 모니터링하는 구조로 사용되므로 이 점을 인지하고 사용해야 합니다.
-k : (--ask-pass) 암호 묻기 설정
비밀번호 인증을 사용하겠다는 의미로 Permission Denied 에러 발생을 막기 위해 붙여서 사용하는 것이 좋습니다.
-ㅣ : (--list-hosts) 적용 노드 확인 // 소문자 L
– help 커맨드로 모든 옵션 확인 시
ansible –help
usage: ansible [-h] [–version] [-v] [-b] [–become-method BECOME_METHOD] [–become-user BECOME_USER]
[-K | –become-password-file BECOME_PASSWORD_FILE] [-i INVENTORY] [–list-hosts] [-l SUBSET] [-P POLL_INTERVAL]
[-B SECONDS] [-o] [-t TREE] [–private-key PRIVATE_KEY_FILE] [-u REMOTE_USER] [-c CONNECTION] [-T TIMEOUT]
[–ssh-common-args SSH_COMMON_ARGS] [–sftp-extra-args SFTP_EXTRA_ARGS] [–scp-extra-args SCP_EXTRA_ARGS]
[–ssh-extra-args SSH_EXTRA_ARGS] [-k | –connection-password-file CONNECTION_PASSWORD_FILE] [-C] [–syntax-check]
[-D] [-e EXTRA_VARS] [–vault-id VAULT_IDS] [–ask-vault-password | –vault-password-file VAULT_PASSWORD_FILES]
[-f FORKS] [-M MODULE_PATH] [–playbook-dir BASEDIR] [–task-timeout TASK_TIMEOUT] [-a MODULE_ARGS] [-m MODULE_NAME]
pattern
Define and run a single task ‘playbook’ against a set of hosts
positional arguments:
pattern host pattern
options:
–ask-vault-password, –ask-vault-pass
ask for vault password
–become-password-file BECOME_PASSWORD_FILE, –become-pass-file BECOME_PASSWORD_FILE
Become password file
–connection-password-file CONNECTION_PASSWORD_FILE, –conn-pass-file CONNECTION_PASSWORD_FILE
Connection password file
–list-hosts outputs a list of matching hosts; does not execute anything else
–playbook-dir BASEDIR
Since this tool does not use playbooks, use this as a substitute playbook directory. This sets the relative
path for many features including roles/ group_vars/ etc.
–syntax-check perform a syntax check on the playbook, but do not execute it
–task-timeout TASK_TIMEOUT
set task timeout limit in seconds, must be positive integer.
–vault-id VAULT_IDS the vault identity to use
–vault-password-file VAULT_PASSWORD_FILES, –vault-pass-file VAULT_PASSWORD_FILES
vault password file
–version show program’s version number, config file location, configured module search path, module location,
executable location and exit
-B SECONDS, –background SECONDS
run asynchronously, failing after X seconds (default=N/A)
-C, –check don’t make any changes; instead, try to predict some of the changes that may occur
-D, –diff when changing (small) files and templates, show the differences in those files; works great with –check
-K, –ask-become-pass
ask for privilege escalation password
-M MODULE_PATH, –module-path MODULE_PATH
prepend colon-separated path(s) to module library (default={{ ANSIBLE_HOME ~
“/plugins/modules:/usr/share/ansible/plugins/modules” }})
-P POLL_INTERVAL, –poll POLL_INTERVAL
set the poll interval if using -B (default=15)
-a MODULE_ARGS, –args MODULE_ARGS
The action’s options in space separated k=v format: -a ‘opt1=val1 opt2=val2’ or a json string: -a ‘{“opt1”:
“val1”, “opt2”: “val2”}’
-e EXTRA_VARS, –extra-vars EXTRA_VARS
set additional variables as key=value or YAML/JSON, if filename prepend with @
-f FORKS, –forks FORKS
specify number of parallel processes to use (default=5)
-h, –help show this help message and exit
-i INVENTORY, –inventory INVENTORY, –inventory-file INVENTORY
specify inventory host path or comma separated host list. –inventory-file is deprecated
-k, –ask-pass ask for connection password
-l SUBSET, –limit SUBSET
further limit selected hosts to an additional pattern
-m MODULE_NAME, –module-name MODULE_NAME
Name of the action to execute (default=command)
-o, –one-line condense output
-t TREE, –tree TREE log output to this directory
-v, –verbose Causes Ansible to print more debug messages. Adding multiple -v will increase the verbosity, the builtin
plugins currently evaluate up to -vvvvvv. A reasonable level to start is -vvv, connection debugging might
require -vvvv.
Privilege Escalation Options:
control how and which user you become as on target hosts
–become-method BECOME_METHOD
privilege escalation method to use (default=sudo), use `ansible-doc -t become -l` to list valid choices.
–become-user BECOME_USER
run operations as this user (default=root)
-b, –become run operations with become (does not imply password prompting)
Connection Options:
control as whom and how to connect to hosts
–private-key PRIVATE_KEY_FILE, –key-file PRIVATE_KEY_FILE
use this file to authenticate the connection
–scp-extra-args SCP_EXTRA_ARGS
specify extra arguments to pass to scp only (e.g. -l)
–sftp-extra-args SFTP_EXTRA_ARGS
specify extra arguments to pass to sftp only (e.g. -f, -l)
–ssh-common-args SSH_COMMON_ARGS
specify common arguments to pass to sftp/scp/ssh (e.g. ProxyCommand)
–ssh-extra-args SSH_EXTRA_ARGS
specify extra arguments to pass to ssh only (e.g. -R)
-T TIMEOUT, –timeout TIMEOUT
override the connection timeout in seconds (default=10)
-c CONNECTION, –connection CONNECTION
connection type to use (default=smart)
-u REMOTE_USER, –user REMOTE_USER
connect as this user (default=None)
Some actions do not make sense in Ad-Hoc (include, meta, etc)
◆ Ansible 다른 글 더 보기 ◆
- 앤서블이 무엇인가요?
- 간단한 playbook 사례