Ansible

Ansible 설치 및 설정

황동리 2024. 1. 18. 16:37
반응형

Ansible 체계 구성도

 

HOSTC7-1C7-2C7-3C7-4

Hostname cont ma1 ma2 ma3
IP 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4
SM 255.255.255.0 255.255.255.0 255.255.255.0 255.255.255.0
Default-gateway 10.0.0.254 10.0.0.254 10.0.0.254 10.0.0.254
DNS 168.126.63.1 168.126.63.1 168.126.63.1 168.126.63.1
Roles Controller manage1 manage2 manage3

1. 설치 및 설정

ansible은 SSH를 이용하여 통신을 합니다. 따라서 SSH 통신이 되도록 설정을 해줍니다.

저희는 테스트하는 경우라 ssh접속을 root 계정으로 할 수 있도록 설정해줍니다.

ssh 설정 파일 위치 및 설정 내용 변경


vi /etc/ssh/sshd_config
SSH로 통신 시 root로 접속 할 수 있도록 해주는 38번줄을 주석을 해제 해줍니다.

그리고 SSH 통신 시 password가 아닌 key로 통신하기 위해서 key를 생성해줍니다.

SSH key 생성 명령어


ssh-keygen -m PEM -b 3072 -q -N "" : key 확장자는 PEM, bit수는 3072, 비밀번호는 공란
ssh-copy-id root@10.0.0.1~4: public key 복사
ssh root@10.0.0.1~4: SSH 통신 확인

SSH 설정을 완료하면 ansible을 설치해보도록 하겠습니다.

ansible 설치


yum install -y epel-release: epel 리포지토리 추가
yum install -y ansible: ansible 설치


2. ansible 사용해보기

 

hosts파일에 IP 설정


vi /etc/ansible/hosts 에 아래와 같이 설정 해주면 ansible 명령어를 사용할 때 명령어 적용 서버의
IP 대신 이름으로 사용할 수 있다.

지금 부터는 ansible 명령어를 사용해보도록 하겠습니다.

우선 Ad-hoc 명령어를 먼저 사용해보도록하겠습니다.

yml파일을 생성하지 않고 명령어 사용(Ad-hoc)


ansible all -m ping: 모든 서버들에게 ping이라는 모듈을 사용한다.
<결과>


ansible all -m shell -a 'ls -al /root': 모든 서버들에게 shell이라는 모듈로 /root 디렉터리를 ls -al로 보여준다.
<결과>

Ad-hoc은 이렇게 yml파일을 생성하지 않고도 사용을 할 수 있습니다.

이번엔 ansible 실행에서 핵심 파일인 playbook에 대해서 알아보겠습니다.


우선 yaml파일이란?
=> 시스템 간에 데이터를 주고 받을 때 데이터 포맷에 대한 약속이 필요합니다.
포맷에 대한 규칙이 없다면 시스템들과 데이터를 주고 받을 때마다 주고 받기가 번거롭고, 데이터 규칙에 대한 문서들이 많아지게 됩니다. 따라서 이러한 포맷을 정의하고 데이터를 쉽게 주고 받을 수 있도록 하는 포맷 중 하나가 바로 yaml 입니다.

Playbook은?
=> ansible의 환경 설정, 배포를 가능하게 합니다.
=> yaml 문법을 사용하여 정의
=> play의 목적은 여러 호스트들에 잘 정의된 Role과 Task를 매핑하는 역할
=> yaml파일에서 줄 바꿈에 주의해야한다.

Playbook의 구조

모든 서버에 ping 테스트


vi ping.yml
---
- name: all ping test
  hosts: all
  tasks:
   - name: all hosts ping test
     ping:

모든 서버에 /경로에 test 디렉토리 생성 후 확인


vi createdr.yml
---
- name: create directory
  hosts: all
  tasks:
   - name: all hosts create directory
     file:
     path: /test
     state: directory
   - name: list root directory check
     shell: 'ls -al /'

모든 서버에 /경로에 test 디렉토리 삭제 후 확인


vi rmdir.yml
---
- name: remove directory
  hosts: all
  tasks:
   - name: all hosts remove directory
     file:
     path: /test
     state: absent
   - name: remove directory chekc
     shell: 'ls -al /'

오늘은 여기까지 입니다.

반응형