Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- mybatis
- enum
- Annotation
- instance생성
- Java
- listnull
- conponent
- db
- stereotypeannotation
- lightsail
- 널포인터에러
- 리스트중복제거
- WordPress
- wordpress블로그
- Spring
- ansible
- route53
- port닫기
- 3tierarchitecture
- string_agg()
- enumtype
- 열려있는포트
- AWS
- awsconsole
- PostgreSQL
- anymatch메서드
- 중복제거
- 지옥같은git
- 권한정책
- 리스트중복값
Archives
- Today
- Total
Anyway
[Ansible] Ansible이란? 본문
Ansible이란?
Ansible은 프로비저닝, 구성 관리, 애플리케이션 배포, 오케스트레이션 및 기타 여러 IT 프로세스를 자동화하는 오픈 소스 IT 자동화 엔진이다. Ansible은 Agentless 아키텍처를 사용하며, YAML을 사용해 Playbook이라는 이름의 간단한 구성 파일로 정의된다.
주요 특징 및 장점
- Agentless
- Ansible은 관리 대상 시스템에 별도의 에이전트 소프트웨어를 설치할 필요가 없다. ssh를 통해 원격으로 시스템을 제어한다. 이는 유지보수를 단순화하고 보안 취약점을 줄인다.
- 간단한 YAML 구문
- Ansible의 Playbook은 사람이 읽기 쉬운 YAML 형식으로 작성된다. 이를 통해 복잡한 작업도 간단하게 자동화 할 수 있다.
- 모듈 기반 아키텍처
- Ansible은 수백 개의 모듈을 제공하여 다양한 작업을 수행할 수 있다. 필요한 작업에 맞는 모듈을 사용하여 Playbook을 작성할 수 있으며 커스텀 모듈을 제작하여 사용할 수도 있다.
- Idempotency(멱등성)
- Ansible은 작업이 반복 실행되더라도 시스템 상태를 변경하지 않도록 설계되었다. 예를 들어 이미 설치된 패키지를 재설치하려 하지 않고 시스템의 상태를 확인한 후 필요한 변경만 수행한다.
- 확장성 및 커뮤니티 지원
- Ansible은 다양한 규모의 환경에서 쉽게 확장할 수 있다. 또한 광범위한 오픈 소스 커뮤니티와 기업 지원을 받으며 다양한 모듈과 플러그인을 통해 기능을 확장할 수 있다.
- 광범위한 지원 환경
- 다양한 운영 체제 및 클라우드 환경에서 동작하며, 서버 구성, 네트워크 자동화, 애플리케이션 배포 등 다양한 작업을 지원한다.
Ansible의 주요 구성 요소
[구조]
ansible/
├── ansible.cfg # 앤서블의 기본 설정 파일. SSH 설정, 기본 인벤토리 파일 위치 등을 지정. -
├── hosts # 인벤토리 파일. 관리할 호스트의 주소나 그룹 정보가 들어 있음. -
├── main.yml # 메인 플레이북 파일. 어떤 역할이 어느 호스트에 적용될지 정의.
├── roles # 재사용 가능한 태스크 모음인 '역할'을 포함하는 디렉토리.
│ └── nginx # 모든 서버에 공통적으로 적용될 설정을 담당하는 역할.
│ ├── handlers
│ │ └── main.yml # 태스크 수행 후 특정 이벤트에 의해 트리거되는 핸들러들을 정의함 (예: 서비스 재시작).
│ ├── tasks
│ │ └── main.yml # 이 역할에 필요한 실제 작업을 담고 있는 태스크 리스트.
│ ├── templates
│ │ └── nginx.conf.j2 # 설정 파일의 템플릿. Jinja2 형식으로 변수를 포함해 동적으로 파일 생성 가능.
│ └── vars
│ └── main.yml # 역할에 필요한 변수들을 정의. 이 변수들은 해당 역할의 태스크와 템플릿에서 참조 가능.
└── vars
└── main.yaml # 플레이북 전역에서 사용할 변수를 정의하는 파일. 이 변수들은 모든 역할, 태스크에 걸쳐 사용됨. -
- Inventory
- 관리 대상 호스트(서버, 네트워크 장비) 리스트이다. 호스트 이름, 그룹, IP 주소 등을 정의한다.
- example
- [local]
127.0.0.1
[local:vars]
ansible_connection=local
ansible_user=local_user
#nginx
[nginx_server]
77.88.140.23
77.88.140.24
[nginx_server:vars]
ansible_connection=ssh
ansible_user=nginx_user
#tomcat
[tomcat_server]
77.88.140.25
77.88.140.26
[tomcat_server:vars]
ansible_connection=ssh
ansible_user=tomcat_user
#mysql
[mysql_server]
77.88.140.27
77.88.140.28
[mysql_server:vars]
ansible_connection=ssh
ansible_user=mysql_user
master=77.88.140.27
- Playbook
- 자동화 작업을 정의한 YAML 파일이다. 여러 작업들을 순차적으로 실행할 수 있도록 구성할 수 있다.
- example
- ---
- hosts: webservers
become: yes
tasks:
- name: Ensure Apache is installed
apt:
name: apache2
state: present
- name: Start Apache service
service:
name: apache2
state: started
- Modules
- 특정 작업을 수행하는 작은 코드 단위이다. 예를 들어 패키지 설치, 파일 복사 등이 있다.
- example
- ---
#nginx 설치
- name: Install Nginx
apt:
name: nginx
state: present
#파일 복사
- name: Copy "cert" to html directory
copy:
src: templates/cert
dest: /etc/ssl/
- Roles
- 관련된 Playbook, 변수, 파일, 템플릿 등을 구조화하여 재사용 가능한 단위로 만든 것이다. 큰 규모의 프로젝트에서 구성을 간단하게 관리할 수 있다.
- Tasks
- Playbook 내에서 실제로 수행되는 작업을 정의한 부분이다.
- example
- ---
- name : Install mysql
hosts: mysql_server
become: yes
tasks:
- import_tasks: roles/common/tasks/update.yml
- import_tasks: roles/mysql/tasks/db3.yml
- Handlers
- 특정 조건이 충족될 때만 실행되는 작업이다. 예를 들어 특정 파일이 변경되었을 때 서비스를 재시작하는 작업을 정의할 수 있다.
참조
'Ansible' 카테고리의 다른 글
[Ansible] Ansible Install & SSH 연결(원격 접속) (0) | 2024.08.24 |
---|