Ansible 사용 방법
Ansible 설치가 완료 되었다면 해당 프로비저닝 툴을 통해 관리할 서버들 역시 등록을 해주어야 한다.
기본 경로는 /etc/ansible/hosts 로 관리가 되지만 사용자가 원한다면 다른 경로에 지정하여 사용할 수 있다.
# cat /etc/ansible/hosts
[devops]
172.17.0.3
172.17.0.4
devops 라는 그룹에 172.17.0.3 , 172.17.0.4 라는 호스트가 등록되어 있다.
ansible은 등록된 호스트를 대상으로 SSH를 통해 접속하기 때문에, 사전에 비밀번호 없이 로그인이 될 수 있도록 작업해줘야 한다.
# ssh root@172.17.0.3
The authenticity of host '172.17.0.3 (172.17.0.3)' can't be established.
ECDSA key fingerprint is SHA256:34V2G2OGT0mk2ZeSlrUe3IudWQRBR3gk2aRUBrzRmxY.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
root@172.17.0.3's password:
최초에 로그인을 시도하면 위와 같이 비밀번호를 입력해야 하기 때문에 Ansible 이 정상 동작하지 않는다.
따라서 아래의 과정을 수행해야 Ansible 을 통해 관리할 수 있게 된다.
1. Ansible 이 설치된 서버에서 ssh-keygen 으로 private key를 생성한다.
# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:6YNGbDlH+CfNUexwVGuRRHUh+vBBFMSx0MBE+LJSDas root@c5abd6974ad2
The key's randomart image is:
+---[RSA 3072]----+
| =BO@B++|
| . o.o*o+o.|
| . . ** oo |
| . + B +=.. |
| * S * o |
| o E + |
| o + |
| . . |
| |
+----[SHA256]-----+
엔터를 반복해서 진행하면 위와 같이 로그가 발생하며 키가 정상적으로 생성된다.
2. 생성된 키를 ansible을 통해 관리하고자 하는 서버에 전달한다.
# ssh-copy-id root@172.17.0.3
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '172.17.0.3 (172.17.0.3)' can't be established.
ECDSA key fingerprint is SHA256:34V2G2OGT0mk2ZeSlrUe3IudWQRBR3gk2aRUBrzRmxY.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@172.17.0.3's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@172.17.0.3'"
and check to make sure that only the key(s) you wanted were added.
ssh-copy-id <<접속계정>>@<<접속IP>> 를 입력한 후 비밀번호를 입력하면 정상적으로 key를 복사하게 된다.
이후에 접속하면 비밀번호 없이 해당 계정에 접속할 수 있다.
마찬가지로 관리하고자 하는 모든 서버에 해당 과정을 수행하여 모든 서버에 비밀번호 없이 접속 할 수 있도록 해야 한다.
# ssh root@172.17.0.3
Last failed login: Mon Sep 26 06:13:52 UTC 2022 from 172.17.0.3 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Mon Sep 26 06:08:22 2022 from 172.17.0.3
[root@c5abd6974ad2 ~]#
ansible 모듈 테스트
관리하고자 하는 모든 서버에 위 과정이 완료되었다면 Ansible 명령어를 통해 등록된 서버를 관리할 수 있다.
Ansible 은 멱등성을 가지고 있다.
* 멱등성 ? ( 같은 설정을 여러번 적용하여도 결과가 달라지지 않는 성질 )
옵션 | 설명 |
-l | 적용 될 호스트들에 대한 파일 정보 |
-m | 모듈 선택 |
-k | 관리자 암호 요청 |
-K | 관리자 권한 상승 |
--list-hosts | 적용되는 호스트 목록 |
1. ping
ansible all -m ping
# all -> 그룹을 따지지 않고 전체 대상 (/etc/ansible/hosts)
# -m -> 모듈 옵션
# ping -> ping 모듈을 사용
# ansible devops -m ping
172.17.0.3 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
172.17.0.4 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
등록된 모든 서버에 ping 모듈을 사용하는 과정이다.
SUCCESS 라는 메시지를 통해 등록된 모든 서버에 ping 명령어가 정상 수행되는 것을 확인할 수 있다.
2. free (메모리 확인)
ansible all -m shell -a "free -h"
172.17.0.3 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 7.7Gi 1.0Gi 4.3Gi 359Mi 2.4Gi 6.0Gi
Swap: 1.0Gi 0B 1.0Gi
172.17.0.4 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 7.7Gi 1.0Gi 4.3Gi 359Mi 2.4Gi 6.0Gi
Swap: 1.0Gi 0B 1.0Gi
등록된 모든 서버의 memory 확인을 위해 shell 모듈의 인자(-a) 로 free -h 명령어를 입력해준 결과이다.
3. COPY (파일 복사)
# touch test.txt
# echo "hi, test file" >> test.txt
# cat test.txt
hi, test file
복사하기 위한 테스트 파일을 만들어 준다.
# ansible all -m copy -a "src=./test.txt dest=/tmp"
이후 copy 모듈과 인자로 복사할 파일, 목적지를 지정해준다.
172.17.0.4 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"checksum": "2350b31b381ab7ed772dc67f312aaae977bf942c",
"dest": "/tmp/test.txt",
"gid": 0,
"group": "root",
"md5sum": "c95222f62be947308a043caaeed2dd13",
"mode": "0644",
"owner": "root",
"size": 14,
"src": "/root/.ansible/tmp/ansible-tmp-1664172365.9331217-1443-224394283293539/source",
"state": "file",
"uid": 0
}
172.17.0.3 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"checksum": "2350b31b381ab7ed772dc67f312aaae977bf942c",
"dest": "/tmp/test.txt",
"gid": 0,
"group": "root",
"md5sum": "c95222f62be947308a043caaeed2dd13",
"mode": "0644",
"owner": "root",
"size": 14,
"src": "/root/.ansible/tmp/ansible-tmp-1664172365.9178987-1441-216283168359694/source",
"state": "file",
"uid": 0
}
/tmp/test.txt 로 정상적으로 파일이 복사되는 것을 확인할 수 있다.
4. 패키지 설치 (yum)
ansible devops -m yum -a "name=httpd state=present"
devops 그룹에 yum 모듈을 사용하여 httpd 패키지를 설치하겠다는 명령어다.
172.17.0.3 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Installed: apr-1.6.3-12.el8.x86_64",
"Installed: httpd-filesystem-2.4.37-43.module_el8.5.0+1022+b541f3b1.noarch",
"Installed: apr-util-1.6.1-6.el8.x86_64",
"Installed: apr-util-bdb-1.6.1-6.el8.x86_64",
"Installed: httpd-tools-2.4.37-43.module_el8.5.0+1022+b541f3b1.x86_64",
"Installed: mod_http2-1.15.7-3.module_el8.4.0+778+c970deab.x86_64",
"Installed: brotli-1.0.6-3.el8.x86_64",
"Installed: apr-util-openssl-1.6.1-6.el8.x86_64",
"Installed: mailcap-2.1.48-3.el8.noarch",
"Installed: centos-logos-httpd-85.8-2.el8.noarch",
"Installed: httpd-2.4.37-43.module_el8.5.0+1022+b541f3b1.x86_64"
]
}
172.17.0.4 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Installed: centos-logos-httpd-85.8-2.el8.noarch",
"Installed: httpd-2.4.37-43.module_el8.5.0+1022+b541f3b1.x86_64",
"Installed: apr-1.6.3-12.el8.x86_64",
"Installed: httpd-filesystem-2.4.37-43.module_el8.5.0+1022+b541f3b1.noarch",
"Installed: apr-util-1.6.1-6.el8.x86_64",
"Installed: apr-util-bdb-1.6.1-6.el8.x86_64",
"Installed: httpd-tools-2.4.37-43.module_el8.5.0+1022+b541f3b1.x86_64",
"Installed: mod_http2-1.15.7-3.module_el8.4.0+778+c970deab.x86_64",
"Installed: brotli-1.0.6-3.el8.x86_64",
"Installed: apr-util-openssl-1.6.1-6.el8.x86_64",
"Installed: mailcap-2.1.48-3.el8.noarch"
]
}
httpd 모듈이 정상적으로 설치되는 것을 확인할 수 있다.
'⇥ DevOps Tech 🙋🏻♀️ > ✏️ Ansible' 카테고리의 다른 글
Ansible Role 을 이용한 노드 설치 자동화 (59) | 2023.10.20 |
---|---|
Ansible Role 작성 방법 (0) | 2023.10.18 |
Ansible Tower (AWX) 설치 방법 (0) | 2023.10.17 |
Ansible Playbook (0) | 2022.10.06 |
Ansible 입문 (1) | 2022.09.26 |
댓글
이 글 공유하기
다른 글
-
Ansible Role 작성 방법
Ansible Role 작성 방법
2023.10.18 -
Ansible Tower (AWX) 설치 방법
Ansible Tower (AWX) 설치 방법
2023.10.17 -
Ansible Playbook
Ansible Playbook
2022.10.06 -
Ansible 입문
Ansible 입문
2022.09.26