본문 바로가기
IT/Ansible & Terraform

[Ansible] Ansible 설치 및 구성

by 깅지수 2022. 4. 12.
  • 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