Ansible 기본 사용법DevOps/Ansible2022. 4. 13. 00:40
Table of Contents
728x90
✔️ Ansible 설치
# ansible 설치를 위한 레포지토리 검색
sudo yum search ansible
# 레포지토리를 추가해주는 명령어
sudo yum install centos-release-ansible-29.noarch
# 실질적으로 ansible을 설치하는 명령어
sudo yum install ansible -y
# ansible 버전 확인
ansible --version
[vagrant@controller ~]$ ansible (tab 2번)
ansible ansible-console ansible-doc-2.7 ansible-playbook ansible-pull-2.7
ansible-2 ansible-console-2 ansible-galaxy ansible-playbook-2 ansible-vault
ansible-2.7 ansible-console-2.7 ansible-galaxy-2 ansible-playbook-2.7 ansible-vault-2
ansible-config ansible-doc ansible-galaxy-2.7 ansible-pull ansible-vault-2.7
ansible-connection ansible-doc-2 ansible-inventory ansible-pull-2
✔️ 인벤토리 생성
인벤토리를 생성하고 관리 대상이 될 두 노드의 ip 주소를 적어준다.
vi inventory.ini
192.168.100.11
192.168.100.12
정상 작동을 위해서는 SSH 키 기반의 인증이 되어 있어야 한다.
✔️ ansible 모듈
✔️ yum 모듈
ansible은 파이썬으로 짜여져 있고 모듈은 ansible의 최소 실행 단위이다.
원격지 시스템에 모든 것들을 실행할 때 모듈을 사용한다.
파이썬을 이용해 모듈을 만들 수도 있지만 웬만한 모듈은 존재한다고 생각하면 된다.
# Ansible 모듈 개수
[vagrant@controller ~]$ ansible-doc -l | wc -l
3387
어떤 모듈이 있는지 아는 것이 중요하고 모듈의 파라미터를 어떻게 쓸 것인지를 아는 것이 중요하다.
다음은 controller에서 node1에 원격으로 httpd를 설치하는 명령어이다.
[vagrant@controller ~]$ ansible 192.168.100.11 -i inventory.ini -m yum -a "name=httpd state=present" -b
- ansible : ad-hoc 커맨드
- 192.168.100.11 : 관리할 대상이 될 시스템으로인벤토리 파일 내에 정의되어 있어야 한다.
- -i inventory.ini : 인벤토리 파일명 (사용할 인벤토리 파일은 현재 경로에 존재해야 된다.)
- -m yum : 사용할 모듈명
- -a : 모듈 파라미터
- -b 옵션 : become으로 관리자 권한을 취득 (=sudo)
192.168.100.11 | CHANGED => { # 시스템이 변경되었다 -> 가변 인프라
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"changes": {
"installed": [
"httpd" # httpd 패키지가 installed 되었다.
]
},
"msg": "warning: /var/cache/yum/x86_64/7/base/packages/apr-util-1.5.2-6.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY\nImporting GPG key 0xF4A80EB5:\n Userid : \"CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>\"\n Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5\n Package : centos-release-7-8.2003.0.el7.centos.x86_64 (@anaconda)\n From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7\n",
"rc": 0,
"results": [ # yum 패키지 설치시 출력 메세지
"Loaded plugins: fastestmirror\nDetermining fastest mirrors\n * base: mirror.kakao.com\n * extras: mirror.kakao.com\n * updates: mirror.kakao.com\nResolving Dependencies\n--> Running transaction check\n---> Package httpd.x86_64 0:2.4.6-97.el7.centos.5 will be installed\n--> Processing Dependency: httpd-tools = 2.4.6-97.el7.centos.5 for package: httpd-2.4.6-97.el7.centos.5.x86_64\n--> Processing Dependency: system-logos >= 7.92.1-1 for package: httpd-2.4.6-97.el7.centos.5.x86_64\n--> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-97.el7.centos.5.x86_64\n--> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-97.el7.centos.5.x86_64\n--> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-97.el7.centos.5.x86_64\n--> Running transaction check\n---> Package apr.x86_64 0:1.4.8-7.el7 will be installed\n---> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed\n---> Package centos-logos.noarch 0:70.0.6-3.el7.centos will be installed\n---> Package httpd-tools.x86_64 0:2.4.6-97.el7.centos.5 will be installed\n---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n httpd x86_64 2.4.6-97.el7.centos.5 updates 2.7 M\nInstalling for dependencies:\n apr x86_64 1.4.8-7.el7 base 104 k\n apr-util x86_64 1.5.2-6.el7 base 92 k\n centos-logos noarch 70.0.6-3.el7.centos
base 21 M\n httpd-tools x86_64 2.4.6-97.el7.centos.5 updates 94 k\n mailcap
noarch 2.1.41-2.el7 base 31 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package (+5 Dependent packages)\n\nTotal download size: 24 M\nInstalled size: 32 M\nDownloading packages:\nPublic key for apr-util-1.5.2-6.el7.x86_64.rpm is not installed\nPublic key for httpd-tools-2.4.6-97.el7.centos.5.x86_64.rpm is not installed\n--------------------------------------------------------------------------------\nTotal 6.1 MB/s | 24 MB 00:03 \nRetrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : apr-1.4.8-7.el7.x86_64 1/6 \n Installing : apr-util-1.5.2-6.el7.x86_64 2/6 \n Installing : httpd-tools-2.4.6-97.el7.centos.5.x86_64 3/6 \n Installing : centos-logos-70.0.6-3.el7.centos.noarch
4/6 \n Installing : mailcap-2.1.41-2.el7.noarch 5/6 \n Installing : httpd-2.4.6-97.el7.centos.5.x86_64 6/6 \n Verifying : httpd-tools-2.4.6-97.el7.centos.5.x86_64
1/6 \n Verifying : mailcap-2.1.41-2.el7.noarch 2/6 \n Verifying : apr-1.4.8-7.el7.x86_64 3/6 \n Verifying : apr-util-1.5.2-6.el7.x86_64
4/6 \n Verifying : httpd-2.4.6-97.el7.centos.5.x86_64 5/6 \n Verifying : centos-logos-70.0.6-3.el7.centos.noarch 6/6 \n\nInstalled:\n httpd.x86_64 0:2.4.6-97.el7.centos.5 \n\nDependency Installed:\n apr.x86_64 0:1.4.8-7.el7
\n apr-util.x86_64 0:1.5.2-6.el7 \n centos-logos.noarch 0:70.0.6-3.el7.centos \n httpd-tools.x86_64 0:2.4.6-97.el7.centos.5 \n mailcap.noarch 0:2.1.41-2.el7 \n\nComplete!\n"
]
}
[vagrant@node1 ~]$ yum list | grep httpd # 설치된 httpd 패키지 확인
httpd.x86_64 2.4.6-97.el7.centos.5 @updates
httpd-tools.x86_64 2.4.6-97.el7.centos.5 @updates
httpd-devel.x86_64 2.4.6-97.el7.centos.5 updates
httpd-manual.noarch 2.4.6-97.el7.centos.5 updates
keycloak-httpd-client-install.noarch 0.8-1.el7 base
libmicrohttpd.i686 0.9.33-2.el7 base
libmicrohttpd.x86_64 0.9.33-2.el7 base
libmicrohttpd-devel.i686 0.9.33-2.el7 base
libmicrohttpd-devel.x86_64 0.9.33-2.el7 base
libmicrohttpd-doc.noarch 0.9.33-2.el7 base
python2-keycloak-httpd-client-install.noarch
[vagrant@node1 ~]$ systemctl status httpd # 아직 시스템 활성화는 하지 않았다.
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:httpd(8)
man:apachectl(8)
명령을 성공적으로 완료한 뒤 동일 명령을 내렸을 때 다음과 같이 출력된다.
[vagrant@controller ~]$ ansible 192.168.100.11 -i inventory.ini -m yum -a "name=httpd state=present" -b
192.168.100.11 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false, # 이미 패키지가 설치되어 있어 false를 반환
"msg": "",
"rc": 0,
"results": [
"httpd-2.4.6-97.el7.centos.5.x86_64 providing httpd is already installed"
]
}
이미 설치되어 있는 상태이므로 존재해야 한다고 하면 이미 존재하기 때문에 아무 작업도 안하는 것이다.
IaC에서 가장 중요한 것은 멱등성을 가져야 한다는 것이다.
✔️ service 모듈
controller에서 원격으로 node1의 httpd 활성화하기
[vagrant@controller ~]$ ansible 192.168.100.11 -i inventory.ini -m service -a "name=httpd state=started enabled=yes" -b
PS C:\Users\Shinsohui> ssh node1
Last login: Tue Apr 12 15:25:42 2022 from 192.168.100.10
[vagrant@node1 ~]$ systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2022-04-12 15:25:42 UTC; 1min 56s ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 22584 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─22584 /usr/sbin/httpd -DFOREGROUND
├─22585 /usr/sbin/httpd -DFOREGROUND
├─22586 /usr/sbin/httpd -DFOREGROUND
├─22587 /usr/sbin/httpd -DFOREGROUND
├─22588 /usr/sbin/httpd -DFOREGROUND
└─22589 /usr/sbin/httpd -DFOREGROUND
[vagrant@node1 ~]$
동일 명령을 수행해본다.
[vagrant@controller ~]$ ansible 192.168.100.11 -i inventory.ini -m service -a "name=httpd state=started enabled=yes" -b
192.168.100.11 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"enabled": true,
"name": "httpd",
"state": "started",
✔️ playbook을 이용한 작업
[vagrant@controller ~]$ vi apache_install.yaml
[vagrant@controller ~]$ ansible-playbook -i inventory.ini apache_install.yaml -b
PLAY [192.168.100.11] *****************************************************************************
TASK [Gathering Facts] ****************************************************************************ok: [192.168.100.11]
TASK [yum] ****************************************************************************************ok: [192.168.100.11]
TASK [service] ************************************************************************************ok: [192.168.100.11]
PLAY RECAP ****************************************************************************************192.168.100.11 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[vagrant@controller ~]$
728x90
'DevOps > Ansible' 카테고리의 다른 글
[Ansible] module, ad-hoc, playbook, yaml 포맷 (0) | 2022.04.15 |
---|---|
[Ansible] 정적 인벤토리 (0) | 2022.04.15 |
[Ansible] 관리 노드 접속 방법, 권한 상승과 관리 구성 파일 (0) | 2022.04.14 |
[Ansible] Ansible의 기본 개념과 구성 요소 (0) | 2022.04.14 |
Ansible을 이용해 AWS ec2 인스턴스에 Apache 설치하기 (0) | 2022.04.13 |
@TTOII :: 뭉게뭉게 클라우드
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!