Ansible이란?
> 스토리지, 서버 및 네트워킹을 자동화하는 구성 관리 플랫폼이다.
> 수동 반복 작업을 자동화 할 수 있다.
> 멱등성을 가지고 있다.
*멱등성 : 연산을 여러 번 적용해도 결과가 달라지지 않는 것
Ansible 구성요소
- Control Node : 앤서블 실행 노드 (managed node에 접속할 ssh 키 생성)
- Inventory (host file) : managed node 목록, 각 managed node에 대한 IP 주소, 호스트 정보, 변수와 같은 정보 지정
- Module : 앤서블이 실행하는 코드 단위
- Playbook : 순서가 지정된 작업 목록이 저장되어 지정된 작업을 순서대로 반복적 작업 실행
- Managed Node : 앤서블로 관리되는 서버, 앤서블이 설치되지 않는다. 그냥 구성될 노드들..
Control Node 구성
1. ansible 설치
yum install -y epel-release # 추가 패키지 저장소
yum install -y ansible-2.8.8-1.el8.noarch.rpm # ansible 설치, 설치 파일 없으면 먼저 다운받고 설치
2. managed 노드에 접속할 ssh 키 생성
ssh-keygen
# 엔터키 3번
3. ssh, 패스워드 없이 접속하기 위한 작업
ssh-copy-id root@[managed node-IP]
# 패스워드 입력
Control Node - Inventory
> Ansible의 기본 Inventory 경로는 '/etc/ansible/hosts'이다.
> yaml 파일 형식이다.
아래와 같이 managed node들의 IP를 정리해서 적는다.
all:
hosts:
xxx.xxx.xxx.xxx:
children:
webservers:
hosts:
xxx.xxx.xxx.xxx:
dbservers:
hosts:
xxx.xxx.xxx.xxx:
Control Node - Playbook
> playbook의 실행 명령어는 아래와 같다.
아래의 명령어는 inventory의 yaml 파일에 적혀있는 호스트로 playbook의 yaml 파일에 적혀있는 명령어들을 실행한다는 의미이다.
ansible-playbook -i [inventory파일경로] [playbook파일경로]
> playbook에 입력되는 내용이 앤서블이 실행하는 코드 단위인 모듈이다.
- 모듈 구성
- name: [이름] # 앤서블 명령어를 실행할 때 출력되는 내용
unarchive: # 모듈 이름
become: yes # 옵션
- 명령어) 리눅스 명령어 실행
- name: [이름] # 앤서블 명령어를 실행할 때 출력되는 내용
shell: |
[명령어] # 실행할 리눅스 명령어
become: yes # 옵션
or
- name: [이름]
command: [명령어]
become: yes
- 명령어) yum 명령어로 '아파치 프로그램' 설치
- name: Install the latest version of Apache
yum:
name: httpd
state: latest
- 파일) url 통해서 다운로드
- name: [이름]
get_url:
url: [다운로드 받을 url]
dest: [저장할 경로]
- 파일) 압축 해제
- name: [이름]
unarchive:
src: "[압축 파일 경로]"
dest: "[해제할 경로]"
remote_src: yes # 타겟 서버에 압축 파일이 존재하는지 여부를 세팅. 디폴트 값은 no.
# no인 경우 타겟 서버에 컨트롤 노드에 존재하는 압축 파일을 복사
become: yes
- 파일) 파일 '여러 개' 복사
- name: "copy file"
copy:
src: {{ item }} # 밑에 적은 with_items 로부터 복사
dest: [사본]
with_items:
- file1
- file2
- file3
remote_src: yes
- 파일) 권한 설정
- name: [이름]
file:
path: "[경로]"
mode: 0755 # 권한옵션
become: yes
- DB) 사용자 생성
- name: Create mysql user
mysql_user:
login_user: []
login_password: []
name: [사용자 이름]
password: [비밀번호]
host: '%'
priv: '*.*:ALL'
- DB) 데이터베이스 생성
- name: [이름]
mysql_db:
login_user: []
login_password: []
name: [DB 이름]
state: present
Control Node - Role 생성
> 노드의 역할을 role로 구분할 수 있다.
아래의 코드를 입력하면 role이 생성된다.
ansible-galaxy init [롤 이름]
Control Node - Role 구성
> role의 tree구조를 봤을 때, 각 디렉토리당 yaml 파일이 생성된다.
> 'tasks' 디렉토리: playbook이 들어가게 된다. (필수)
> 'templates' 디렉토리: 복사가 되는 템플릿 파일들이 들어간다.
> 'files' 디렉토리: 여러 파일들이 저장된다.
> 'vars' 디렉토리: 변수가 들어가게 된다.
정리해보면 다음과 같다.
- defaults : 각 task에서 사용할 기본값을 설정
- files : 정적파일을 두는 폴더
- handlers : task에서 사용할 handler들을 두는 폴더
- meta : role의 메타정보 저장
- tasks : role의 핵심 폴더, role이 실제로 동작할 내용(playbook)
- templates : Jinja2템플릿 엔진에 기반한 템플릿 파일을 두는 폴더
- vars : 변수 설정 파일을 모아두는 곳
'클라우드 > AWS' 카테고리의 다른 글
Ansible) 앤서블 동적 인벤토리, AWS 동적 인벤토리 사용해보기 (0) | 2023.03.29 |
---|---|
Ansible) 앤서블 변수, register & stat & set_fact 모듈 (0) | 2023.03.29 |
IaC) Infrastructure as Code, 쉘 프로그래밍, 쉘 스크립트 만들기 (0) | 2023.03.27 |
장고와 Redis 연결 후 사용하기(2) - 이메일 인증(gmail사용) (0) | 2023.03.24 |
장고와 Redis 연결 후 사용하기(1) - 로그인 세션 저장 (0) | 2023.03.24 |