서버가 여러개 있는 경우, 패치 하나를 설치하더라도 여러 호스트에 반복 작업을 해야 하는 상황을 겪게 됩니다.
ansible은 이런 작업을 자동화해주는 툴입니다.
관련 툴이 몇가지 있지만, agent 를 사용하지 않고 ssh 를 사용하는 툴 중 대표주자이며, 따라서 간편하기 때문에 가장 많이 애용되는 것으로 알고 있습니다.
관리 대상이 될 서버를 docker 로 설치해봅니다.
https://skysoul.tistory.com/43
Docker를 이용한 Linux 설치. sshd 설정.
DevOps 관련 도구를 테스트해 보기 위해, Linux 머신이 필요했습니다. 이런 용도로 가볍게 쓰다 버릴 수 있는 구조로 만든 것이 Docker 아니겠습니까? Docker 로 Linux 를 설치해보았습니다. 먼저 docker 를
skysoul.tistory.com
관리 대상인 ubuntu 리눅스에 ansible 용 user 를 추가합니다.
> adduser ansible-user
sudo 패키지를 추가합니다. 보통의 리눅스에는 설치되어 있지만, Docker 용 리눅스는 minimal version 이라서 최소버전으로 구성되어 있습니다.
> apt-get install sudo
ansible-user 의 경우, sudo 명령 실행시에 비밀번호를 입력하지 않아도 되게 설정합니다. /etc/sudoers 에 아래 행을 추가합니다.
ansible-user ALL=(ALL) NOPASSWD:ALL
컨트롤을 할 서버(제 경우엔 개발 PC) 에 /etc/ansible/hosts 파일을 만들고 아래 내용을 넣습니다.
[testservers]
docker-ubuntu ansible_host=localhost ansible_port=1022 ansible_connection=ssh ansible_user=ansible-user
컨트롤 서버에서 관리 대상인 서버들에게 접근할 때, 비밀번호를 입력하지 않을 수 있어야 합니다.
먼저, 컨트롤 서버에서 SSH key 를 만듭니다.
> cd ~
> ssh-keygen
passphrase 를 입력하라고 나오는데요, 이 테스트를 위해서는 입력하지 않고 그냥 엔터 입력하셔도 됩니다.)
생성된 키를 리모트에 복사해두면 비밀번호 없이 접속합니다.
ssh-copy-id -p 1022 ansible-user@localhost
ssh 로 접속해보면 비밀번호 없이 바로 shell prompt 가 뜨는 것을 확인할 수 있습니다.
ansible 에서 ping 을 실행해봅니다.
> ansible testservers -m ping
여기까지 잘 따라왔다면, ping 결과가 SUCCESS 로 뜹니다.
아까 작성한 testservers 파일은 inventory, 즉 서버들의 리스트이구요, 실행할 내용은 playbook 이라고 부릅니다.
아래 예제는 nginx를 설치하는 것으로 install_nginx.yml 로 저장하겠습니다.
---
- name: install nginx on the client
hosts: testservers
become: yes
tasks:
- name: install epel-release
action: "{{ ansible_pkg_mgr }} name=epel-release state=latest"
- name: install nginx web server
action: "{{ ansible_pkg_mgr }} name=nginx state=present"
- name: start nginx web server
service: name=nginx state=started
become : yes 는 root 권한으로 실행하겠다는 의미입니다.
이 playbook 을 실행하겠습니다.
> ansible-playbook install_nginx.yml
epel-release 가 ubuntu 에서는 다른 이름인지, 패키지가 없다는 오류를 내긴 합니다만, 본 테스트의 목적인 관리 대상 서버에서 커맨드 라인을 실행하는 목적은 달성했습니다.
기타 참고 사항 ------
ansible-galaxy init nginx 를 실행하면 프레임웍에 맞춘 설정대로 폴더와 기본 파일들이 생성됩니다.
template 기능 : 특정 설정 파일을 타겟 호스트에 복사할 수 있습니다. 이 때 파일 내용에 변수를 적용할 수 있습니다.
handler 기능 : 특정 명령 성공 후 event 를 발생시킬 수 있습니다. event 를 받아 다른 명령어를 실행할 수 있습니다.
'(Dev)Ops' 카테고리의 다른 글
메시지큐의 용도 & AWS SQS 와 SNS 의 차이점. (0) | 2022.01.05 |
---|---|
jenkins 에서 원격지 tomcat 재시작하기. (0) | 2020.09.03 |
SSH 터널링을 통해서 sftp 접속 방법. (0) | 2020.09.01 |
telnet 없이 포트 오픈 여부 체크하기. (0) | 2020.08.26 |
Docker를 이용한 Linux 설치. sshd 설정. (0) | 2020.08.25 |