Ansible study 1주차
목차
앤서블 특징
- no 에이전트
- 멱등성 - 여러번 연산을 해도 같은 결과
- 쉬운 사용법과 다양한 모듈 제공
Ansible Architecture
제어노드
- 앤서블이 설치되는 노드
- 파이썬이 같이 설치되어 있어야한다.
관리노드
- 앤서블이 제어하는 시스템 또는 호스트
- 윈도우, 리눅스, 퍼블릭클라우드, 프라이빗 클라우드
- 앤서블은 별도의 에이전트를 설치하지 않음
⇒ 관리 노드는 제어 노드와 ssh 통신이 가능해야하며 파이썬이 설치 되어 있어야함
인벤토리
- 제어노드가 관리하는 관리 노드의 목록을 나열해 놓은 파일
- 앤서블은 인벤토리에 미리 정의 되어 있는 관리노드에만 접근할 수 있다.
- 인벤토리 목록을 다음과 같이 성격에 따라 구분할 수 있다.
모듈
- 앤서블은 관리 노드의 작업을 수행할 때 SSH 를 통해 연결한 후 ‘앤서블 모듈’ 이라는 스크립트를 푸시하여 작동
- 대부분의 모듈은 원하는시스템상태를 설명하는 매개변수를 허용하며, 모듈 실행이 완료되면 제거됨
플러그인
- 모듈이 대상 시스템에서 별도의 프로세스로 실행되는 동안 플러그인은 제어 노드에서 실행된다.
- 핵심기능(데이터 변환, 로그출력, 인벤토리 연결등)에 대한 옵션 및 확장 기능을 제공
플레이북
- 플레이북은 관리 노드에서 수행할 작업들을 YAML 문법을 이용해 순서대로 작성해 놓은 파일
- 이 파일을 가지고 ssh로 접근해 작업 수행
기본 사용법
사전 요건
sshd root 접속을 허용해야한다.(/etc/ssh/sshd_config)
방화벽 열려있어야함
자동화 대상 호스트 설정
실행하는 폴더내에 inventory 라는 파일을 생성하여 주소를 넣을수 있다.
ip를 넣어야하지만 /etc/hosts에 도메인 매핑 해주면 도메인으로도 넣을수 잇다.
중괄호는 그룹화 한거고
중첨그룹의 경우는 :childeren이라는 접미사를 추가하면 된다.
key공유
ssh-keygen
ssh-copy-id root@10.0.20.10
[webservers]
webl.example.com
web2.example.com
[db]
db01.example.com
db02.example.com
[datacenter:children]
webservers
dbserver
인벤토리확인
ansible-inventory -i ./inventory --list
플레이북 작성
ansible.cfg 파일 작성
[defaults]
inventory = ./inventory
remote_user = root
ask_pass = false
[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false
[default]
매개변수 | 설명 |
inventory | 인벤토리 파일경로 지정 |
remote_user | 원격으로 연결할 사용자 이름 지정(defualt: 현재사용자이름) |
ask_pass | ssh 암호 넣을지 |
[privilege_escalation]
매개변수 | 설명 |
become | 에스컬레이션 활성화 할때, 자동으로 사용자 전환시 사용(default: root) |
become_method | 사용자 전환 방식 |
become_user | 관리 호스트에서 전환할 사용자 지정(default: root) |
become_ask_pass | 에스컬레이션 할때 암호 물을지 여부 |
플레이북 작성
---
- hosts: all
tasks:
- name: Print message
debug:
msg: Hello CloudNet@ Ansible Study
탭을 사용하면 안되는게 좋으며 space 두번으로 구조를 구분
playbook.yml 이런식으로 확장자는 지키되 파일명은 아무거나해도 된다.
문법체크
ansible-playbook -syntax-check first-playbook.yml
플레이북 실행
ansible-playbook playbook.yml
변수
그룹변수
- 그룹명 뒤에 vars를 붙이면된다.
[web]
tnodel-centos.exp.com
tnode2-ubuntu.exp.com
[db]
tnode3-rhel.exp.com
[all:children]
web
db
[all:vars]
user=ansible
호스트 변수
호스트 뒤에 변수를 붙이면 된다.
[web]
tnodel-centos.exp.com
tnode2-ubuntu.exp.com
[db]
tnode3-rhel.exp.com user=ansiblel
[all: children]
web
db
플레이 변수
플레이 북에 직접 변수 입력하는 방식
- hosts: all
vars:
user: ansible2
tasks:
- name: Create User {{ user }}
ansible.builtin.user:
name: "{{ user }}"
state: present
추가변수
ansible-playbook 실행 시 변수를 넣어주는 방식
옵션은 -e
ansible-playbook -e user=ansible5 create-user.yml
작업 우선순위
추가변수 > 플레이변수 > 호스트 변수 > 그룹 변수
Ansible Vault
암호화 방법
ansible-vault create mysecret.yml
암호화 한파일 보기
ansible-vault view mysecret.yml
암호화 할때 암호 별도 저장하여 사용하기
ansible-vault create --vault-pass-file ./vault-pass myscret1.yml
볼때도 같은 옵션 주면된다.
ansible-vault view --vault-pass-file ./vault-pass myscret1.yml
기존파일 암호화
ansible-vault encrypt create-user.yml
기존파일 복호화
ansible-vault decrypt create-user.yml
암호 변경
ansible-vault rekey mysecret.yml
암호화된 플레이북 실행
ansible-playbook -vault-id @prompt create-user.yml
설정
---
- hosts: els
vars_filies:
- mysecret.yml
task:
- name: Create User {{ user }}
ansible.builtin.user:
name: "{{ user }}"
state: present
팩트
- 앤서블이 관리 호스트에서 자동으로 검색한 변수
- 플레이, 조건문, 반복문 또는 관리 호스트에서 수집한 값에 의존하는 기타 명령문의 일반 변수처럼 사용 가능한 호스트별 정보가 포함
- 호스트 이름
- 커널 버전
- 네트워크인터페이스이름
- 운영체제 버전
- CPU 개수
- 사용 가능한 메모리
- 스토리지 장치의 크기 및 여유
사용법
facts.yml 파일을 다음과 같이 생성
---
- hosts: els
tasks:
- name: Print all facts
ansible.builtin.debug:
var: ansible_facts
ansible-playbook facts.yml 로 실행
ip 정보 가져오기
---
- hosts: els
tasks:
- name: Print all facts
ansible.builtin.debug:
msg: >
The default IPv4 address of {{ ansible_facts.fqdn }}
is {{ ansible_facts.default_ipv4.address }}
팩트 | ansible_facts.* 표기법 |
호스트명 | ansible_facts.hostname |
도메인 기반 호스트명 | ansible_facts.fqdn |
기본 IPv4 주소 | ansible_facts.default_ipv4.address |
네트워크 인터페이스 이름 목록 | ansible_facts.interfaces |
/dev/vda1 디스크 파티션크기 | ansible_facts.device.vda.partitions.vda1.size |
DNS 서버 목록 | ansible_facts.nameservers |
현재 실행중인 커널 버전 | ansible_facts.kernel |
운영체제 종류 | ansible_facts.distribution |
팩트 수집 끄기
팩트 수집을 위해 해당 호스트에 특정 패키지를 설치해야만 하는 경우가 있다.
특정 이유로 패키지를 설치 할수 없는 경우에 앤서블도 팩트 수집을 할수 없게 되거나 부하가 걸리지 않게 하려고 끄는경우가 있다.
사용방법은 다음을 플레이북에 입력하면된다.
gather_facts: no