Search
Duplicate
📒

[Ansible] 01. Ansible 시작(Inventory, Playbook)

상태
완료
수업
Ansible
주제
4 more properties
참고

Ansible

NOTE
Ansible은 오픈소스 자동화 도구로, 인프라를 코드로 관리하는(IaC) 언어입니다. 프로비저닝, 환경 설정, 배포 등의 업무를 코드로 작성하여 여러 환경에 동일하게 적용할 수 있습니다.
Ansible의 흐름도
제어노드: Ansible이 설치되는 노드이며 Ansible은 파이썬 모듈을 이용하므로 설치를 위해서는 파이썬이 함께 설치되어 있어야 합니다.
관리노드: Ansible이 제어하는 원격 시스템 호스트를 의미하며, Ansible은 별도의 에이전트를 설치하지 않으므로 SSH 통신이 가능해야 하며, 파이썬이 설치되어있어야 합니다.
인벤토리: 제어 노드가 관리하는 노드의 목록
플레이북: 관리 노드에서 수행할 작업들을 YAML 문법을 통해 순서대로 작성해놓은 것
모듈: 관리 노드의 작업을 수행할 때 SSH를 통해 연결한 후 Ansilbe Module이라는 스크립트를 푸시하여 동작한다.
플러그인: 모듈이 대상 시스템에서 별도의 프로세스로 동작하는 동안 플러그인은 제어노드에서 실행되며, 데이터 변환, 로그 출력에 대한 확장 기능을 제공한다.

Agent vs Agentless

SSH 프로토콜로 이루어지기에 별도의 Agent가 필요없다!
SSH Based
서버에 SSH키 파일만 저장하면 SSH 통신을 통해서 제어가 가능
키 배포 이후에는 별도로 관리할게 없어, 설치 없이 바로 사용이 가능
Agent Based
대상 서버에 에이전트를 설치해야 원격으로 제어가 가능한 시스템
에이전트는 하나의 프로세스이므로, 프로세스가 죽게되면 제어권도 같이 잃어 에이전트를 재가동해야함

Ansible 실습환경 구성

NOTE
Vagrant_API_Version="2" Vagrant.configure(Vagrant_API_Version) do |config| # Ansible 제어 노드 설정 config.vm.define "controll-node" do |master| master.vm.box = "generic/ubuntu2004" master.vm.provider :virtualbox do |vb| vb.name = "controll-node" vb.cpus = 2 vb.memory = 2048 end master.vm.hostname = "controll-node" master.vm.synced_folder ".", "/vagrant" master.vm.network "private_network", ip: "192.168.32.14" master.vm.network "forwarded_port", guest: 80, host: 10080, auto_correct: true master.vm.provision "shell", path: "sshd_config.sh" end # Ansible 관리 노드 1 설정 config.vm.define "manage-node-1" do |node1| node1.vm.box = "generic/ubuntu2004" node1.vm.provider :virtualbox do |vb| vb.name = "manage-node-1" vb.cpus = 2 vb.memory = 2048 end node1.vm.hostname = "manage-node-1" node1.vm.synced_folder ".", "/vagrant" node1.vm.network "private_network", ip: "192.168.32.15" node1.vm.network "forwarded_port", guest: 80, host: 20080, auto_correct: true node1.vm.provision "shell", path: "sshd_config.sh" end # Ansible 관리 노드 2 설정 config.vm.define "manage-node-2" do |node2| node2.vm.box = "generic/ubuntu2004" node2.vm.provider :virtualbox do |vb| vb.name = "manage-node-2" vb.cpus = 2 vb.memory = 2048 end node2.vm.hostname = "manage-node-2" node2.vm.synced_folder ".", "/vagrant" node2.vm.network "private_network", ip: "192.168.32.16" node2.vm.network "forwarded_port", guest: 80, host: 30080, auto_correct: true node2.vm.provision "shell", path: "sshd_config.sh" end end
Bash
복사
vagrant
sudo apt-get update sudo apt-get install software-properties-common --yes sudo add-apt-repository --yes --update ppa:ansible/ansible sudo apt-get install ansible --yes ansible --version
Bash
복사
설치코드
# Inventory 설정 vi /etc/ansible/hosts [nodes] controll-node ansible_host=192.168.32.14 manage-node-1 ansible_host=192.168.32.15 manage-node-2 ansible_host=192.168.32.16 # Inventory 확인 ansible-inventory --list -y # 관리 노드 연결 ssh-keygen ssh-copy-id root@192.168.32.14 ssh-copy-id root@192.168.32.15 ssh-copy-id root@192.168.32.16 ansible all -m ping # SSH Password 없이 접속 ansible all -m ping --ask-pass # SSH Password를 입력하라고 나옴
Bash
복사
통신설정 코드
# all 호스트 표시 ansible all --list-hosts # -m module 지정된 모듈 실행 ansible all -m ping # -b, -K 암호요청 및 높은 권한 실행 ansible all -b -m command -a 'reboot' # --become-user 특정 사용자로 실행(기본 root) ansible all --become-user=username -a 'reboot' # -i 인벤토리 ansible all -i ./inventory -m command -a 'date'
Bash
복사
ansible CLI

ansible.cfg(구성파일)

NOTE
ansible.cfg 파일은 Ansible의 구성 파일로, Ansible이 작동하는 방식을 제어할 수 있습니다.
구성파일 우선순위
ansible.cfg은 다양한 영역으로 구성되어 있으며, 각 영역은 특정 기능을 설정합니다.
# default 기본동작 [defaults] inventory = /path # 인벤토리 기본경로 remote_user = name # 접속 유저 host_key_checking = True # 호스트 키 검사 timeout = 30 # 타임아웃 log_path = /var/log/ansible.log # 로그 경로 # privilege_escalation 권한상승 [privilege_escalation] become = True # 권한상승 가능여부 become_mtehod = sudo # 권한상승 명령어 become_user = root # 권한상승 유저 become_ask_pass = false # SSH 패스워드 요청 # ssh_connection SSH 연결과 관련된 설정 [ssh_connection] ssh_args = -o ControlMaster=auto -o ControlPersist=60s # SSH 추가옵션 control_path = $(directory)s/%%h-%%r # SSH 연결제어 소켓 pipelining = True # 파이프라인 활성화
Bash
복사
/etc/ansible/ansible.cfg

ansible ad-hoc(앤서블 애드혹)

NOTE
ansible-ad-hoc 명령은 playbook을 작성하지 않고 직접 모듈을 호출해서 실행하는 방식입니다.
# 모듈 목록 확인 ansible-doc -l # 상세 확인 ansible-doc -s ping ansible-doc -s setup # 애드혹 사용 패턴 ansible host-pattern -m module [-a 'module options'] [-i inventory]
Bash
복사
# 접근성 ansible all -m ping # 명령어 ansible all -m shell -a "echo shell" # 설치 # name: 설치/제거 패키지 이름 # state: 상태(present-설치, absent-제거, latest-최신버전 설치) ansible all -m apt -a "name=openjdk-11-jdk state=present" # 복사 # src: 원본경로, dest: 대상파일 경로 # mode: 파일권한, ownder: 파일 그룹 ansible all -m copy -a "src=index.text dest=/home/ubuntu/index.text" # 서비스 # name: 관리할 서비스 이름 # state: 서비스 상태(started, stopped, restarted, reloaded) # enabled: 부팅 서비스 시작여부(yes, no) ansible all -m service -a "name=docker state=reloaded"
Bash
복사
# ping 모듈 ansible all -i ./inventory/hosts.yaml -m ping # 쉘 모듈 ansible all -i ./inventory/hosts.yaml -m shell -a "echo shell" # 유저 모듈(present(추가), absent(제거)) ansible all -i ./inventory/hosts.yaml -m user -a "name=user01" [state=absent] # 설치 모듈 ansible all -i ./inventory/hosts.yaml -m apt "openjdk-11-jdk" [state=absent] # 복사 모듈 ansible all -i ./inventory/hosts.yaml -m copy -a "src=index.text dest=/home/ubuntu/index.text" # 서비스 모듈(도커 다시로드) ansible all -i ./inventory/hosts.yaml -m service -a "name=docker state=reloaded" --become
Bash
복사