Ansible 설치 /Client Server 에 Nginx설치 및 버전 체크까지~
Ansible
Ansible 이란 서버의 설정 및 관리 소프트웨어 배포, 다수의 서버구성에 대해 자동화를 구성하여관리할 수 있는 도구입니다.
1. 우선 2개의 서버를 준비 합니다.
2번 서버 입니다 .
3. Ansible 사용조건
1) ssh 접속이 가능한 호스트라면 ansible 작업을 수행 가능
2) ansible을 운영할 서버에서 public ssh-key를 생성하여 client host로 전송해야한다.(안하면 계속 비밀번호 쳐야됨)
[root@manager ~] ssh-keygen
[root@manager ~] ssh-copy-id root@<host_ip>
[root@manager ~] ssh-copy-id root@192.168.35.228 <- 이건 2번 서버 아이피
아래~잠깐!!! 백업 해두려고 잠시 버처박스는 이미지 떠서 백업하려고!! 다시 재부팅! IP 바껴요~ 참고하세요!
4. Ansible 설치 및 Client 설정
[root@manager ~] yum install -y epel-release
[root@manager ~] yum install -y ansible
5. 설치완료 되 었으면 /etc/ansible/hosts 파일에 Client host ip를 등록해야한다.(Inventory)
[root@manager ~] vim /etc/ansible/hosts
[test]
client IP ==> 192.168.35.30
[root@manager ~] ansible all -m ping
Success 위와같이 나오면 성공
6. Ansible Playbook을 통한 Nginx 설치
[root@manager ~] vim /etc/ansible/ install_nginx.yml
---
- hosts: test
remote_user: root
tasks:
- name: Install nginx web server
yum: name=nginx state=latest
notify:
- restart nginx
handlers:
- name: restart nginx
service: name=nginx state=restarted
7. 파일작성이 완료 되었으면 아래 명령어를 적용하여 playbook를 실행!
Ansible Playbook을 통한 Nginx 설치
2대의 Client에 Nginx을 설치하기 위하여 YAML 문법을 통해 Playbook을 작성합니다.
[root@manager ~] ansible-playbook install_nginx.yml -f 10
하지만. Fatal 실패!!! 이유는? 무엇일까요???
정답은? 아래와 같이 nginx.repo 레파지토리에 등록해주면 순조롭게 진행 될겁니다.
cat << EOF > /etc/yum.repos.d/nginx.repo
> [nginx]
> name=Nginx Repository \$basearch - Archive
> baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
> enabled=1
> gpgcheck=1
> gpgkey=https://nginx.org/keys/nginx_signing.key
> EOF
8. 정상으로 잘 설치가 되는게 보이죠?
[root@ansible-controller ansible]# pwd
/etc/ansible
[root@ansible-controller ansible]# vi install_nginx.yml
install_nginx.yml 파일에 아래의 YAML 문법으로 Task 및 Handlers를 작성합니다.
Playbook을 사용하는 가장 기초적인 샘플이며 다양한 방법으로 서버에 대한 설정,
어플리케이션 배포 등 다양하게 활용할 수 있습니다.
---
- hosts: test # Task를 실행할 [Host] or [Host Group] or [All]을 지정합니다.
remote_user: root # Client Server에서 Task를 실행할 User를 지정합니다.
tasks: # Task를 정의합니다.
- name: Install nginx web server # Task의 이름을 정의합니다.
yum: name=nginx state=latest # Task를 통해 작업할 내용을 정의합니다.
notify: # Task 작업이 완료 된 후 수행할 액션을 handlers를 참조하여 수행합니다. 주로 Service 시작, 재시작, 정지등에 사용합니다.
- restart nginx # name에 정의된 "restart nginx"는 handlers의 name으로 설정된 액션과 맵핑합니다.
handlers:
- name: restart nginx # Task의 notify에 작성된 name과 맵핑됩니다.
service: name=nginx state=restarted # task의 notify에 name과 동일한 "restart nginx"가 있을 경우 작동하며 Task 작업이 완료된 후
nginx service를 재시작 합니다.
9. Ansible-Client-1 Server와 Ansible-Client-2 Server에서 아래와 같이 nginx가 실행중인지 확인합니다.
[root@k8s-node3 ~]# ps -ef | grep nginx
root 10800 1 0 01:21 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 10801 10800 0 01:21 ? 00:00:00 nginx: worker process
root 10843 2227 0 01:22 pts/0 00:00:00 grep --color=auto nginx
10. 여기서 잠깐!! 터널링 하고 가실께요~~
11. Web Browser에서 접속하여 nginx가 정상적으로 실행중인지 확인합니다.
192.168.35.30 잘뜨는게 보이죠!
12. 2번 서버 192.168.35.30 서버의 버전 체크
[root@localhost ansible]# ansible -i hosts 192.168.35.30 -m shell -a "uname -a"
192.168.35.30 | CHANGED | rc=0 >>
Linux k8s-node3 3.10.0-1127.18.2.el7.x86_64 #1 SMP Sun Jul 26 15:27:06 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
13. 2번 서버 버전 체크
14. 간단하게 설치 테스트 까지 끝났네요!
마무리
Ansible은 테스트 해본 내용과 같이 간단한 YAML 문법을 통해 Playbook을 작성하고, 작성된 Playbook으로 다수의 Client Server에 작업명령을 내릴 수 있는 편리한 도구입니다.