앤서블(Ansible)은 리눅스와 유닉스 기반 시스템의 설정 및 배포 작업을 자동화하기 위한 IT 자동화 도구 중 하나입니다. 앤서블은 에이전트(agent)가 필요하지 않으며, SSH를 통해 리모트 노드에 명령을 전달하고, YAML 형식으로 작성된 Playbook을 사용하여 간단하게 배포 작업을 수행할 수 있습니다. 앤서블은 간단하고 쉽게 배울 수 있기 때문에, DevOps 엔지니어 및 시스템 관리자들에게 매우 인기 있는 도구 중 하나입니다.
앤서블 소프트웨어 그 자체로, 서버/클라이언트 구성과 같은 형태가 아니며 상주 프로세스를 둘 필요가 없다. 한 번 설치하면 필요할 때 명령을 실행하는 것으로 충분하다.
앤서블이 작업할 대상 머신. "어디에서" 앤서블을 실행하는가?
인벤터리는 앤서블에서 조작 대상이 되는 서버 접속 정보를 나타낸다. 인벤터리는 여러 개의 서버를 그룹화해 정의하거나 각각의 서버와 그룹에 대해 변수를 사용한 파라미터를 설정할 수 있다.
앤서블에서 실행되는 개별 작업의 정의. "무엇을" 앤서블에서 실행하는가?
앤서블에서 실행된 하나하나의 명령 같은 것. ansible-doc -l 명령어로 공식 모듈을 확인할 수 있다.
모듈 호출의 중심에 있는 앤서블 코드. "어떻게" 앤서블을 실행하는가?
앤서블에서 스크립트(=코드)이며 앤서블을 사용할 때 필요한 작업은 플레이북의 구현과 실행이라고 할 수 있다. YAML로 작성한다.
(위에 있을 수록 우선순위 높음)
ansible로 시작하는 명령어
-m
: 모듈 선택
-a
: 모듈 파라미터
-i
: 인벤토리 선택
-u
: 유저명
Controller Node
Managed Node
앤서블을 사용할 메인 컨트롤러 노드 서버에 앤서블을 설치해야 합니다
테스트 용으로 GCP에 Ubuntu로 VM을 생성하여 진행하였습니다.
sudo apt update
sudo apt install -y ansible
# 설치 완료 후 버전 확인
ansible --version
Ansible은 SSH 접속을 기반으로 원격 서버들에게 명령을 전달합니다.
따라서 Controller 서버와 원격 서버간 SSH key가 공유되어야 합니다.
Controller 서버에서 모든 작업을 완료할 수 있습니다.
# ssh 키 생성
# GCP Intsance는 메타데이터에 별도 ssh key를 등록해주어야 함
ssh-keygen -t rsa -C [원격서버계정]
# 원격 서버에 ssh 키 복사
ssh-copy-id [원격서버계정]@[원격서버IP]
# Test
ssh [원격서버계정ID]@[원격서버IP]
ssh-copy-id 명령 실행 시 Permission denied가 발생하면 해당 원격 서버의 sshd 공개키 인증이 허용되지 않는 경우입니다.
따라서, 해당 원격 서버에 접속하여 /etc/ssh/sshd_config
파일을 열고
#PubkeyAuthentication yes 부분의 주석을 해제한 후
다음 명령으로 sshd 서비스를 재실행 해야합니다.
$ sudo systemctl restart sshd
설정 파일 경로
/etc/ansible/hosts
sudo vi /etc/ansible/hosts
34.64.68.248
[all:vars]
ansible_python_interpreter=/usr/bin/python3
ansible all -m ping
ansible all -m copy -a "src=./test.txt dest=~/test.txt"
ansible 명령어를 통해 컨트롤러 노드에서 test.txt 파일을 생성하고 인벤토리에 연결된 원격 서버에 copy
원격 서버(Managed Node)에 test.txt 파일이 생성된 모습
캬 잘 보고갑니다!