[IaC] Ansible

이정훈·2023년 3월 28일
0

IaC

목록 보기
3/8
post-thumbnail

Ansible

  • 파이썬 기반이다! 설치될때 파이썬이 같이 설치된다
  • Ansible은 스토리지, 서버 및 네트워킹을 자동화하는 구성 관리 플랫폼
  • Ansible을 사용하여 이러한 구성 요소를 구성하면 어려운 수동 반복 작업을 자동화 가능
  • 연산을 여러 번 적용하더라도 결과가 달라지지 않는 것이 특징 (멱등성)
    실행을 몇번하더라도 똑같은 결과가 나오도록 구성!

앤서블 구성요소

  • Ansible Control Node (실행시키는 컴퓨터 노드)
    - 엔서블을 실행하는 노드입니다. /usr/bin/ansible이나 /usr/bin/ansible-playbook 명령을 이용하여 제어 노드에서 관리 노드들을 관리
    • 앤서블이 설치 되어 있으면 노트북이나, 서버급 컴퓨터를 제어 노드로 이용
  • Managed Node (명령어를 받아 실행되는 노드)
    • 앤서블로 관리되는 서버를 매니지드 노드라고 한다.
    • 매니지드 노드에는 앤서블이 설치 되지 않는다.
  • Inventory (host file)
    - 컨트롤로 노드에서 매니지드 노드의 목록을 작성, ssh에서 ip와 role 지정해줬던 거다.
    - 매니지드 노드 목록을 인벤토리라고 한다.
    - 인벤토리는 각 매니지드 노드에 대한 IP 주소, 호스트 정보, 변수와 같은 정보를 지정할 수 있다.
  • Module
    - 모듈모음
    - 실질적인 코드 명령어를 모듈로 만들어 놓았다.
    - 앤서블이 실행하는 코드 단위
    - 각 모듈은 데이터베이스 처리, 사용자 관리, 네트워크 장치 관리 등 다양한 용도로 사용
    단일 모듈을 호출하거나 플레이북에서 여러 모듈을 호출 할 수도 있다.
    - Playbook
    - 모듈들을 모아놓은것
    순서가 지정된 작업 목록이 저장되어 지정된 작업을 해당 순서로 반복적으로 작업을 실행할 수 있다.

우리는 컨트롤러에서 어떤 인벤토리에게 어떤 플레이북을 실행시킬 것이냐!

ansible 설치

Control Node

  • 패스워드 없이 접속 (이건 실무에서 절대 활용하면 안된다!)
ssh-keygen
엔터 3번

ssh-copy-id   root@매니지드노드IP
패스워드

ssh root@매니지드노드IP 했을 때 패스워드 없이 접속 가능

yum install -y epel-release
wget [ansible-2.8.8-1.el8.noarch.rpm]
yum install -y ansible-2.8.8-1.el8.noarch.rpm
  • 최신버전은 2.9인데 우린 작업의 호환성을 위해 일단 2.8로 진행할 것이다.
  • ansible 은 파이썬 기반이다.

inventory 작성

all:
  children:
    server:
      hosts:
        200.200.200.202
    db:
      hosts:
        200.200.200.203
  • 확인
ansible [그룹이름] -i [인벤토리파일경로] -m ping
#앤서블 명령어를 실행할 때 -i 옵션으로 파일 지정 가능

playbook 작성

- hosts: ["server", "db"]  [그룹]
  tasks:
  - name: Linux Command [이름]
    shell: |
      touch /root/ansible_test [명령어]
    become: yes

  - name: Linux Command2
    shell: |
      touch /root/ansible_test2
    become: yes
  • become 모든 모듈에 작성하는데 이 친구가 yes이면 관리자권한으로 실시!
ansible-playbook -i /root/test/hosts /root/test/playbook
ansible-playbook -i [인벤토리경로] [모듈이작성된플레이북경로]

  • 누구에게 할것이냐?
  • 실행할 수 있는 Gathering Facts로 확인 꺼져있는지 SSH가 실행되어 있는지 확인
  • 그다음 모듈들을 하나씩 시작 그리고 모듈 실행하고 그 아래 변경되었는지 확인!
  • RECAP 에러가 있으면 나올 것이다.

파일 관련 모듈

  • 권한 설정
  • 모듈을 찾아봤는데 없다 그럼 위에 작업한 걸로 작업 근데 멱동성은 제공되지 않는다
    (멱동성 한번실행했던것은 또하지 않는다. 만약 위에 했던걸 또하면 또 체인지가 된다)
- hosts: ["server", "db"]
  tasks:
  - name: change chmod1 [이름]
    file:
      path: "/root/ansible_test"  "[경로]"
      mode: 0755 [권한]
    become: yes

  - name: change chmod2
    file:
      path: "/root/ansible_test2"
      mode: 0755
    become: yes

  • 명령어를 두번 실행하면 멱동성에 의해 처음에는 체인지 두번째는 그냥 오케이!

압축 해제 모듈


- hosts: ["server", "db"]
  tasks:
    - name: Download apach-tomcat
      get_url:
        url: https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.73/bin/apache-tomcat-9.0.73.tar.gz [다운받을 url]
        dest: /tmp/apache-tomcat-9.0.73.tar.gz [어디다 저장할거냐?]
      become: yes

    - name: Install tomcat
      unarchive:
        src: "/tmp/apache-tomcat-9.0.73.tar.gz" [어떤걸 풀거냐?]
        dest: "/usr/local" [어디다 압축을 해제할거냐?]
        remote_src: yes [컨트롤러에만 있냐 없냐]
      become: yes

    - name: Move
      command: mv /usr/local/apache-tomcat-9.0.73 /usr/local/tomcat9 [리눅스 명령어]
  • 파일을 받는 url모듈
    • 띄어쓰기를 잘못해서 계속 에러가 발생 yml파일의 경우 들여쓰기가 문법이기 떄문에 주의!
    • TAP도 사용하면 안된다!

파일 복사 모듈

- hosts: ["server", "db"]
  tasks:

  - name: "copy file"
    copy:
      src: /root/test/file/{{ item }}
      dest: /root/{{ item }}
      remote_src: no
    with_items:
      - file1
      - file2
      - file3
    become: yes
  • with_items의 친구들이 하나씩 저 위에 들어가게 되는 것이다.

템플릿

참고!

<Connector protocol="AJP/1.3"
    address="{{ ansible_all_ipv4_addresses[0] }}"
    secretRequired="false"
    port="8009"
    redirectPort="8443" />
  • ansible_all_ipv4_addresses[0] 현재 IP가 들어가서 저당되도록 해준다.
  • 템플릿 파일로 만들어주고자 하는 곳 맨 아래에 작성해주면 된다.

롤 생성

ansible-galaxy init [롤이름]

  • defaults : 각 task에서 사용할 기본값을 설정
  • files : 정적파일을 두는 곳
  • handlers : task에서 사용할 handler들을 두는 폴더
  • meta : role의 메타정보 저장
  • tasks : role의 핵심 폴더, role이 실제로 동작할 내용
  • templates : Jinja2템플릿 엔진에 기반한 템플릿 파일을 두는 폴더
  • vars : 변수 설정 파일을 모아두는 곳
profile
싱숭생숭늉

0개의 댓글