카이도스의 Tech Blog
Ansible 기본1(설치 후 기본 활용) 본문
728x90
반응형
2024.03.26 - [Ansible] - Ansible 기본2(변수)
Ansible 실무에 활용 전 vm 통해 테스트하는 방법 안내하도록 하겠습니다.
관련하여 Ansible 사용하실분들은 참고하여 실무에 적용하시면 좋을 것 같습니다.
무작정 따라하시기보다, 내용 변경해가며 따라하시는걸 추천드립니다.
서버 정보
ansible-control | Ubuntu 22.04 | 4vcore | 8GB | 80GB | 10.10.x.123 |
ansible1 | Ubuntu 22.04 | 4vcore | 8GB | 80GB | 10.10.x.124 |
ansible2 | Ubuntu 22.04 | 4vcore | 8GB | 80GB | 10.10.x.125 |
ansible3 | Ubuntu 22.04 | 4vcore | 8GB | 80GB | 10.10.x.126 |
기본 셋팅
# 호스트네임 설정
sudo su -
## hostnamectl hostname <호스트이름>
hostnamectl hostname ansible-control
hostnamectl hostname ansible1~3
#
systemctl stop ufw && systemctl disable ufw
systemctl stop apparmor && systemctl disable apparmor
#
apt update && apt install -y bat jq
echo 'alias cat=batcat' >> /etc/profile
[ansible-control] 앤서블 설치
# 파이썬 버전 확인
python3 --version
Python 3.10.12
# 설치
apt install software-properties-common -y
add-apt-repository --yes --update ppa:ansible/ansible
apt install ansible -y
# 확인
ansible --version
ansible [core 2.16.4]
config file = /etc/ansible/ansible.cfg
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/bin/ansible
python version = 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] (/usr/bin/python3)
jinja version = 3.0.3
libyaml = True
IP를 이용한 인벤토리 파일 생성
# 디렉터리 생성
mkdir -p ansible && cd ansible
# 각자 자신의 tnode1~3의 VM IP 변수 지정
tnode1ip=10.10.x.124
tnode2ip=10.10.x.125
tnode3ip=10.10.x.126
echo $tnode1ip $tnode2ip $tnode3ip
# inventory 파일 생성
cat <<EOT>> inventory
$tnode1ip
$tnode2ip
$tnode3ip
EOT
# inventory 파일 확인
cat inventory
# inventory 검증 : -i 특정 인벤토리 지정
ansible-inventory -i inventory --list | jq
호스트명을 이용한 인벤토리 파일 생성
# 디렉터리 생성
mkdir -p ansible && cd ansible
# 각자 자신의 tnode1~3의 VM IP 변수 지정
tnode1ip=10.10.x.124
tnode2ip=10.10.x.125
tnode3ip=10.10.x.126
echo $tnode1ip $tnode2ip $tnode3ip
# /etc/hosts에 자동화 대상 호스트 등록
cat <<EOT>> /etc/hosts
$tnode1ip ansible1
$tnode2ip ansible2
$tnode3ip ansible3
EOT
# /etc/hosts 파일 확인
cat /etc/hosts
# inventory 파일 생성
cat <<EOT > inventory
ansible1
ansible2
ansible3
EOT
# inventory 파일 확인
cat inventory
# inventory 검증
ansible-inventory -i inventory --list | cat -p -l json
인벤토리 그룹 구성
# inventory 그룹 구성
cat <<EOT > inventory
[web]
ansible1
ansible2
[db]
ansible3
[all:children]
web
db
EOT
# inventory 검증
ansible-inventory -i inventory --list | jq
ansible-inventory -i inventory --graph
# ansible.cfg 파일 생성
cat <<EOT > ansible.cfg
[defaults]
inventory = ./inventory
EOT
# 확인
cat ansible.cfg
# inventory 목록 확인
ansible-inventory --list | jq
노드 셋팅
# Create SSH Keypair
ssh-keygen -t rsa -N "" -f /root/.ssh/id_rsa
# 공개 키를 관리 노드에 복사
for i in {1..3}; do ssh-copy-id root@ansible$i; done
# 복사 확인
for i in {1..3}; do echo ">> tnode$i <<"; ssh root@ansible$i cat ~/.ssh/authorized_keys; echo; done
# ssh 접속 테스트
ssh ansible1
ssh ansible2
ssh ansible3
# ansible.cfg 파일 수정
cd ~/ansible
cat <<EOT > ansible.cfg
[defaults]
inventory = ./inventory
remote_user = root
ask_pass = false
[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false
EOT
# 확인
cat ansible.cfg
# inventory 파일 확인
cat inventory -p
# 확인
ansible -m ping web
ansible2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
ansible1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
ansible -m ping db
ansible3 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
# 옵션 설정으로 암호 입력 후 실행 확인
ansible -m ping --ask-pass web
SSH password: <암호입력>
# 다른 사용자 계정으로 실행 확인
ansible -m ping web -u ubuntu
ansible -m ping web -u ubuntu --ask-pass
ansible -m ping db -u ubuntu --ask-pass
플레이북 셋팅
#
cd ~/ansible
# 플레이북 작성
cat <<EOT > first-playbook.yml
---
- hosts: all
tasks:
- name: Print message
debug:
msg: Hello Ansible
EOT
cat first-playbook.yml
- 플레이북 문법 체크하기 : 자체 문법 체크 옵션 제공
# 문법 체크
ansible-playbook --syntax-check first-playbook.yml
# 문법 오류시에 아래와같이 표기
ERROR! We were unable to read either as JSON nor YAML, these are the errors we got from each:
JSON: Expecting value: line 1 column 1 (char 0)
Syntax Error while loading YAML.
did not find expected '-' indicator
The error appears to be in '/root/ansible/first-playbook.yml': line 6, column 5, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
debug:
msg: Hello Ansible
^ here
플레이북 실행
cd ~/ansible
ansible-playbook first-playbook.yml
PLAY [all] *****************************************************************************************************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************************************************************************************
ok: [ansible2]
ok: [ansible1]
ok: [ansible3]
TASK [Print message] *******************************************************************************************************************************************************************************************
ok: [ansible1] => {
"msg": "Hello Ansible"
}
ok: [ansible2] => {
"msg": "Hello Ansible"
}
ok: [ansible3] => {
"msg": "Hello Ansible"
}
PLAY RECAP *****************************************************************************************************************************************************************************************************
ansible1 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ansible2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ansible3 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
플레이북 점검
# 플레이북 작성
cd ~/ansible
cat <<EOT > restart-service.yml
---
- hosts: all
tasks:
- name: Restart sshd service
ansible.builtin.service:
name: sshd
state: restarted
EOT
# 확인
cat restart-service.yml
# 실행 점검 : 미리 점검 내용에서 아래 changed=1 확인
ansible-playbook --check restart-service.yml
....
PLAY RECAP *****************************************************************************************************************************************************************************************************
ansible1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ansible2 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ansible3 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
# 플레이북 실제 실행
ansible-playbook restart-service.yml
...
728x90
반응형
'Ansible' 카테고리의 다른 글
Ansible 기본4(Facts) (0) | 2024.03.26 |
---|---|
Ansible 기본3(Ansible Vault) (0) | 2024.03.26 |
Ansible 기본2(변수) (0) | 2024.03.26 |
Comments