[Ansible] Ansible 구성하기 #1

2 분 소요

image.png

Ansible 이란?

다수의 서버에 동일한 명령을 보내야 할때, 수백대의 서버에 하나하나 접속해서 작업해야한다면 많은 시간이 소요됩니다.

예를 들어 다수의 서버에 동일한 계정을 생성해야할 때 Ansible을 통해 한번에 작업이 가능합니다.

이러한 툴을 Infrastructure as Code 라고 부르며 Ansible과 더불어 Puppet, Chef, Salt 등이 있습니다.

Ansible의 장점

  • 대상 서버에 Agent 설치가 필요없다.
  • 관련 자료가 많다.
  • 멱등성 (중복되게 작업을 해도 결과가 변하지않음) 제공
  • 쉽고 빠르게 구성이 가능하다

Ansible 설치하기

yum install -y python-pip

pip install ansible

해당 명령어로 간단하게 설치가 된다.

Ansible 계정 생성

Ansible 명령을 위한 계정 생성 (계정은 임의 생성)

adduser ansible
passwd ansible
ansible-alicek106 사용자의 비밀 번호 변경 중
새  암호:
새  암호 재입력:
passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다.

sudo 권한 할당

visudo

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
ansible ALL=(ALL)     NOPASSWD:ALL

sudo 권한의 경우, 작업에 필요한 부분을 생각하여 적절하게 사용한다. (필요한 명령어만 부여 등)

SSH Key 생성

아래 명령어를 통해 SSH Key 생성

ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
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:2OmwBFZLFCX1rbvw6ExSDnPg2bpDEtmKjOvrG9x7dng root@ansible.young-dev.com
The key's randomart image is:
+---[RSA 2048]----+
|     .*+o        |
|     o o . .     |
|    ooo   . .    |
|   .oo.* . .     |
| o . oO S .      |
|o + o..@   .     |
| + . o= = .      |
|. . .+.E + .     |
|o=o.o +o+ o      |
+----[SHA256]-----+

SSH key를 대상 서버로 전송하여, key를 통해 SSH 접근이 가능하도록 함

ssh-copy-id ansible@192.168.99.136
 
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
ansible@192.168.99.136's password:
 
Number of ky(s) added: 1
 
Now try logging into the machine, with:   "ssh 'ansible@192.168.99.136'"
and check to make sure that only the key(s) you wanted were added.

호스트 파일 구성

호스트 파일이란 Ansible의 대상 서버를 명시해둔 파일로, 아래와 같이 사용한다.

vim /etc/ansible/hosts.ini
 
admin.young-dev.com ansible_host=192.168.99.136 ansible_user=ansible

Hostname ansible_host=대상IP ansible_user=username 형태로 사용한다.

아래와 같이 그룹화하여 사용 가능

admin.young-dev.com ansible_host=192.168.99.136 ansible_user=ansible
backup.young-dev.com ansible_host=192.168.99.139 ansible_user=ansible
...
...

[web-backupserver]
admin.young-dev.com

[db-backupserver]
backup.young-dev.com


테스트

web-backupserver 그룹 전체에게 ping 명령을 날린다.

ansible -m ping -i /etc/ansible/hosts.ini web-backupserver

admin.young-dev.com : SUCCESS =>

위와 같이 결과가 표시된다.


#02에서는, Ansible Playbook에 대해서 포스팅 할 예정입니다.

댓글남기기