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 /'