- Ansible 설치
- Ad-hoc 명령
- Playbook
- 정적 인벤토리
- 구성 파일
- 관리 노드 접속
- Ansible* option
- ansible-config
- 모듈
🔎 Ansible 설치
sudo yum install centos-release-ansible-29
sudo yum install ansible
ansible --version
인벤토리 생성
vi inventory.ini
192.168.100.11
192.168.100.12
🔎 Ad-hoc 명령
ansible <HOST_PATTERN> -m <MODULE> -a <PARAMETER>
yum으로 httpd 패키지 설치
ansible 192.168.100.11 -i inventory.ini -m yum -a "name=httpd state=present" -b
* 관리노드가 인벤토리파일에 정의되어 있어야함
service 모듈로 httpd 서비스 시작
ansible 192.168.100.11 -i inventory.ini -m service -a "name=httpd state=started enabled=yes" -b
* group으로 묶어서 한번에 명령 가능
🔎 Playbook
apache_install.yaml
- hosts: 192.168.100.11
tasks:
- yum:
name: httpd
state: present
- service:
name: httpd
enabled: yes
state: started
playbook 실행
ansible-playbook -i inventory.ini apache_install.yaml -b
playbook 문법 체크
ansible-playbook <PLAYBOOK> --syntax-check
* yaml기반의 문법 체크, 완벽한 체킹을 보장하지 x
playbook 시뮬레이션
ansible-playbook <PLAYBOOK> --check (or -C)
* 실제로는 실행되지 x --- repository가 실제로 추가되지 않아 시뮬레이션을 보여줄 수 없는 경우가 있음
check가 문제 있어도/없어도 실제 실행에서 문제가 있을지/없을지 보장 x
텍스트 변경 사항 확인
ansible-playbook <PLAYBOOK> --diff
* --check 옵션과 함께 사용하는 경우가 많음
실행할 시스템 제한
ansible-playbook <PLAYBOOK> -b --limit <HOSTNAME>
적용될 호스트 목록
ansible-playbook <PLAYBOOK> --list-hosts
플레이북의 작업 목록
ansible-playbook <PLAYBOOK> --list-tasks
플레이북의 태그 목록
ansible-playbook <PLAYBOOK> --list-tags
vim
yum -y install vim-enhanced
~/.vimrc
syntax on
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 et ai
set cursorline
: yaml 파일 작성 시, tab 키는 띄어쓰기 두칸으로 자동 설정
🔎 정적 인벤토리
https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#intro-inventory
How to build your inventory — Ansible Documentation
Ansible works against multiple managed nodes or “hosts” in your infrastructure at the same time, using a list or group of lists known as inventory. Once your inventory is defined, you use patterns to select the hosts or groups you want Ansible to run a
docs.ansible.com
인벤토리 file의 default location : /etc/ansible/hosts >> 가능하면 사용하지 x
기본 위치에 있는 인벤토리 파일이 아닌 경우 -i 옵션 사용
Format : ini, yaml 방식 두가지 존재
** 인벤토리 생성 원칙 : 간결하게!
#ini 형식 example
key=value
[Section]
key=value
key
#ini
mail.example.com
[webservers] #인벤토리 그룹
foo.example.com
bar.example.com
[dbservers]
one.example.com
two.example.com
three.example.com
#yaml
all:
hosts:
mail.example.com:
childern:
webservers:
hosts:
foo.example.com:
bar.example.com:
dbservers:
hosts:
one.example.com:
two.example.com:
three.example.com:
인벤토리 그룹
* 하나의 노드는 하나의 그룹에만 속해야 한다 ? => X, 다른 노드에도 속할 수 있음
기본그룹
- all : 호스트 노드를 가진 그룹
- ungrouped : 그룹에 속하지 않은 노드
그룹에 호스트를 분류할 때 고려해야 할 것
- what
- where
- when
- 호스트 범위
[webservers]
www[01:50].example.com
192.168.100.[10:19]
- 인벤토리 그룹 변수
[atlanta]
host1
host2
[atlanta:vars]
ntp_server=ntp.atlanta.example.com
proxy=proxy.atlanta.example.com
- 중첩 그룹
[atlanta]
host1
host2
[raleigh]
host2
host3
[southeast:children]
atlanta
raleigh
[usa:childern]
southeast
* :childern이 있으면 속한 것들은 무조건 그룹
usa
ㄴsoutheast
ㄴatlanta
ㄴhost1
ㄴhost2
ㄴraleigh
ㄴhost2
ㄴhost3
🔎 인벤토리 파일 확인
인벤토리 파일 계층 구조 확인
ansible-inventory -i <INVENTORY_FILE> --graph
* @ : 그룹 표시
JSON형식 및 호스트/그룹 변수
ansible-inventory -i <INVENTORY_FILE> --list
호스트에 설정된 변수 확인
ansible-inventory -i <INVENTORY_FILE> --host <HOST>
호스트 매칭 확인
ansible <HOST_PATTERN> -i <INVENTORY_FILE> --list-host
🔎 구성파일
설정파일
https://docs.ansible.com/ansible/latest/reference_appendices/config.html
Ansible Configuration Settings — Ansible Documentation
['bud-frogs', 'bunny', 'cheese', 'daemon', 'default', 'dragon', 'elephant-in-snake', 'elephant', 'eyes', 'hellokitty', 'kitty', 'luke-koala', 'meow', 'milk', 'moofasa', 'moose', 'ren', 'sheep', 'small', 'stegosaurus', 'stimpy', 'supermilker', 'three-eyes',
docs.ansible.com
설정파일 위치 (우선순위 존재)
1. ANSIBLE_CONFIG (environment variable if set)
=> 환경 변수 설정 / 거의 잘 안씀
2. ansible.cfg (in the current directory)
=> 현재 디렉토리에 있을 때만 적용 / 가장 많이 사용
3. ~/.ansible.cfg (in the home directory)
=> **ansible.cfg와 헷갈리지 않도록 주의
4. /etc/ansible/ansible.cfg (기본 설정 파일)
설정 파일 확인
vi .ansible.cfg
[defaults]
inventory=./inventory.ini
인벤토리 위치 지정 안하고 그냥 바로 연결
🔎 관리 노드 접속
SSH 접속 방법
- 패스워드 인증
- 키 쌍 인증
권한 상승(Privilege Escalation)
- su (가능하면 절대 사용x)
- sudo (자신의 password 입력) : sudo를 사용할 수 있는 사용자를 지정(sudoers)
/etc/sudoers : sudo를 사용할 수 있는 사용자
%wheel ALL=(ALL) ALL
wheel그룹 모든시스템에서 모든 명령어
(모든 사용자로)
vagrant 192.168.56.100=(root) /usr/bin/ls
/etc/sudoers.d/[FILE_NAME] : sudoers(/vagrant) 설정 파일
%vagrant ALL=(ALL) NOPASSWD: ALL
패스워드 묻지 x (passwordless sudo)
🔎 Ansible* 옵션
SSH 접속 옵션
- [-u REMOTE_USER] : SSH 접속 계정 (default : 현재 사용자)
- -k, --ask-pass (default : False)
- 옵션 사용 : SSH 패스워드 인증
- 옵션 사용 x : SSH 키 기반의 인증
* ansible의 기본 인증 방법 : SSH 키 인증
권한상승 옵션
- -b, --become : 권한 상승 (옵션을 사용하지 않으면 권한상승 하지 x)
- sudo (default) : root 접근 시, 본인의 pw 입력 / sudo를 사용할 수 있는 사용자를 지정 (sudoers)
- su : root 접근 시, root의 pw 입력 / root를 다같이 공유 ---> 가능한 사용 x
- --become-user : 어떤 사용자 (default : root)
- -K, --ask-become-pass : sudo 패스워드 묻기 (옵션 사용하지 않으면 -> Passwordless sudo)
설정파일
[defaults]
remote_user=<SSH_USER>
ask_pass=<True|False> #default=False
host_key_checking=<True|False> #default=True
[privilege_escalation]
become=<True|False> #default=False
become_ask_pass=<True|False> #default=False
become_method=<sudo|su> #default=sudo
become_user=<SUDO_USER> #default=root
ansible-config 명령
ansible-config list # 설정 가능한 모든 항목 표시
ansible-config dump # 기본 값 및 변경값 표시 (색깔)
초록색 : 이상x 변경x
노란색 : 이상x 변경o
빨간색 : 이상o
ansible-config view # 현재 적용되는 설정 파일의 내용 표시
📃 모듈
https://docs.ansible.com/ansible/2.9/modules/modules_by_category.html
ansible-doc -l # 모듈 목록
ansible-doc <MODULE_NAME> # 모듈 상세 정보
Module Index — Ansible Documentation
© Copyright 2019 Red Hat, Inc. Last updated on Oct 11, 2021.
docs.ansible.com
Utilities module - debug
: playbook 실행 시, debugging을 위한 모듈
- hosts: 192.168.100.11
vars:
msg: hello world
tasks:
- debug:
var: msg
- debug:
msg: '{{ msg }} korea'
'IT > Ansible & Terraform' 카테고리의 다른 글
[Terraform] Terraform 설치 및 개요 (0) | 2022.04.21 |
---|---|
[Ansible] 변수 선언 및 참조 (0) | 2022.04.15 |
[Ansible] EC2 점프 (0) | 2022.04.14 |
[Ansible] Ansible 이란? (0) | 2022.04.14 |