웹사이트 검색

시스템 관리 작업에 Ansible 모듈을 사용하는 방법 - 6부


Ansible 시리즈의 6부에서는 과거 주제에서 몇 가지 Ansible 모듈을 다루었습니다. 이제 더 깊이 들어가 다양한 시스템 관리 작업을 수행하는 데 도움이 되는 추가 모듈을 살펴보겠습니다.

각 모듈에 대한 기본 아이디어를 얻고 특정 작업을 수행하는 데 사용할 수 있는 옵션을 살펴봅니다.

이 페이지에서:
  1. Ansible에서 소프트웨어 패키지 및 리포지토리 관리
  2. Ansible을 사용하여 서비스 관리
  3. Ansible로 방화벽 관리
  4. Ansible을 사용하여 파일 또는 폴더 보관
  5. Ansible로 작업 예약
  6. Ansible로 사용자 및 그룹 관리
  7. Ansible을 사용하여 파일 및 디렉터리 생성
  8. Ansible로 스토리지 관리
  9. Ansible을 사용하여 파일 시스템 관리

1. Ansible에서 소프트웨어 패키지 및 리포지토리 관리

Linux 시스템에 패키지를 설치할 때 다양한 배포판에는 다양한 패키지 관리자가 제공됩니다. RedHat 배포판에는 yum과 dnf가 있고 Debian 배포판에는 apt가 있습니다.

Ansible에는 패키지라는 모듈이 함께 제공되므로 시스템마다 다른 패키지 관리자를 사용할 필요가 없습니다. 호스트 시스템의 해당 패키지 관리자를 자동으로 사용하므로 작업이 더 쉬워집니다.

소프트웨어 패키지 설치

예를 들어, DebianRedHat 배포판으로 구성된 호스트 그룹에 htop을 설치하려면 package 모듈을 다음과 같이 사용합니다. 아래 install_htop.yml 플레이북에 표시되어 있습니다.

---
- name: Install htop on Ubuntu and CentOS
  hosts: all
  tasks:

- package:
         name: htop
         state: installed

참고: 패키지 이름은 운영 체제마다 다를 수 있습니다. 예를 들어 Redhat 배포판에는 httpd가 있고 Debian/Ubuntu 시스템에는 Apache2가 있으며 모두 Apache를 나타냅니다. 웹 서버. 따라서 이러한 패키지를 전달할 때는 각별히 주의해야 합니다. 일반적으로 변수나 조건문을 사용하는 것이 가장 좋습니다.

2. Ansible을 사용한 서비스 관리

다음으로 Linux 시스템에서 서비스를 관리하는 데 사용되는 서비스 모듈이 있습니다. 서비스를 시작, 중지 또는 다시 시작하는 데 사용됩니다. 또한 시스템이 부팅될 때 서비스가 자동으로 시작되도록 서비스를 활성화하는 데 사용할 수도 있습니다.

서비스 시작 및 활성화

예를 들어 RHEL 8에서 Apache 웹 서버를 시작하고 활성화하려면 다음과 같이 서비스를 사용하세요.

---
- name: Start and enable httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: started
	    enabled: yes

서비스 중지

httpd 서비스를 중지하려면 stopped 속성을 전달하세요.

---
- name: Stop httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: stopped

서비스 다시 시작

httpd 서비스를 다시 시작하려면 restarted 속성을 전달하세요.

---
- name: Restart httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: restarted

3. Ansible로 방화벽 관리

시스템 관리자가 수행하는 또 다른 중요한 작업은 방화벽 관리입니다. Ansible 플레이북에서는 firewalldufw 모듈을 사용하여 이 작업이 훨씬 쉬워졌습니다. 포트나 서비스, 심지어 소스 주소까지 허용하거나 차단하도록 방화벽을 구성할 수 있습니다.

이제 몇 가지 예를 살펴보겠습니다.

방화벽에서 포트 80 열기/차단

---
- name: Allow port 80 
  hosts: webservers
  tasks: 
   
   -firewalld:
	port: 80/tcp
     permanent: yes
     state: enabled

위 플레이북에서는 포트 80이 방화벽을 통과할 수 있습니다.

permanent: yes 옵션은 방화벽 규칙을 시행하고 재부팅 후에도 지속되도록 만듭니다. 그러나 이 규칙은 즉시 적용되지 않습니다. 재부팅 후에만 적용됩니다. 규칙을 즉시 시행하려면 immediate: yes 옵션을 사용하세요.

허용된 주소를 지정하려면 source:0.0.0.0/0 문을 사용하세요.

- firewalld:
    source: 192.168.0.0/24
    zone: public
    state: enabled

port 옵션을 사용하도록 허용할 포트 범위를 지정하려면 다음과 같이 하십시오.

- firewalld:
    port: 213-567/udp
    permanent: yes
    state: enabled

포트를 차단하려면 다음과 같이 상태 옵션을 비활성화로 변경하세요.

-firewalld:
	port: 80/tcp
     permanent: yes
     state: disabled

방화벽에서 서비스 추가/차단

포트 추가/차단 외에도 서비스에 동일한 규칙을 적용할 수도 있습니다. 그리고 그것은 아주 간단합니다. service 모듈을 사용하여 추가할 서비스를 추가하고 상태 옵션이 enabled로 설정되어 있는지 확인하세요.

- firewalld:
    service: https
    permanent: true
    state: enabled

서비스를 차단하려면 상태 옵션을 비활성화로 설정하세요.

- firewalld:
    service: https
    permanent: true
    state: disabled

4. Ansible을 사용하여 파일 또는 폴더 보관

보관이란 파일이나 폴더를 쉽게 휴대할 수 있고 크기가 더 작은 형식으로 압축하는 것을 의미합니다. Ansible은 archive라는 모듈과 함께 제공됩니다. 파일을 압축하는 것은 매우 쉽습니다. 필요한 것은 파일의 소스 경로와 압축 파일의 대상을 지정하는 것뿐입니다.

디렉토리 압축

아래 플레이북 compress.yml을 고려해 보세요.

---
- hosts: webservers
  tasks:

    • name: Compress a folder
archive:
        path: /opt/data/web
        dest: /tmp/web.gz

위 플레이북은 /opt/data/web 디렉토리를 압축하여 /tmp/web.gz에 저장합니다.

형식으로 디렉토리 압축

기본 압축 형식은 .gz이지만 format 속성을 사용하여 지정할 수 있습니다. 다음 플레이북을 샘플링하세요.

---
- hosts: webservers
  Tasks:

  - name: Create a zip archive 
    archive:
     path: /opt/data/web
     dest: /tmp/web
     format: zip

위의 플레이북은 /opt/data/web 디렉토리를 /tmp/web.zip으로 압축합니다.

파일 압축 풀기

보관 취소 속성을 사용하여 압축 파일의 압축을 풀 수도 있습니다. 아래 플레이북을 고려해보세요.

---
- hosts: webservers
  tasks:

 - name:Uncompress /tmp/web.gz to/opt directory  on Ansible controller
   unarchive:
     src: /tmp/web.bz2
     dest: /opt/

위의 플레이북은 Ansible 컨트롤러에서 /opt/data/web.gz 파일의 압축을 /opt로 푼다.

원격 노드에서 파일 압축 풀기

원격 소스 시스템을 지정하려면 remote_src=yes 옵션을 사용하세요.

---
- hosts: webservers
  tasks:

 - name:Uncompress /tmp/web.bz2 to/opt on remote host
   unarchive:
     src: /tmp/web.bz2
     dest: /opt/
     remote_src=yes 

위의 플레이북은 원격 노드의 /tmp/web.bz2 파일을 /opt/ 디렉터리에 압축 해제합니다.

5. Ansible로 작업 예약

cron 모듈은 Ansible 플레이북에서 작업을 예약하는 데 도움이 됩니다.

예약된 작업 만들기

아래 플레이북을 고려해보세요.

---
- hosts: webservers
  tasks:

 - name: Create a scheduled task
   cron:
     name: Run employee attendance
     job: sh /opt/scripts/attendace.sh
      
     month: 4
     day: 5
     hour: 17
     minute: 00

플레이북은 4월 5일 오후 5시에 출석 스크립트를 실행합니다.

특정 날짜에 스크립트 예약

4월 5일이 월요일인 경우에만 이 스크립트가 실행되도록 예약하려면 weekday: 1 속성을 사용하세요. cron 표기법에 따라 0은 일요일을 나타내고 6은 토요일을 나타냅니다.

month: 4
day: 5
hour: 17
minute: 00
weekday: 1

이러한 필드의 별표(*)는 모든 값을 나타냅니다.

날짜에 작업 실행

평일에 관계없이 4월 5일 오후 5시에 작업을 실행하려면 표시된 대로 시간 매개변수를 사용합니다.

month: 4
day: 5
hour: 17
minute: 00
weekday: *

매월 특정일에 작업 실행

매월 5일 오후 5시에 cron 작업을 실행하려면 아래 설정을 사용하세요.

month: *
day: 5
hour: 17
minute: 00
weekday: *

매일 작업 실행

매일 오후 5시에 크론 작업을 실행하려면 다음과 같이 시간 설정을 설정하십시오.

month: *
day: *
hour: 17
minute: 00
weekday: *

5시간마다 작업 실행

5시간마다 크론 작업을 실행하려면 표시된 대로 단계 값 */5를 사용하세요.

month: *
day: *
hour: */5
minute: *
weekday: *

6. Ansible로 사용자 및 그룹 관리

Ansible 플레이북 내에서 사용자와 그룹을 아주 쉽게 관리할 수도 있습니다.

새 사용자 만들기

새 사용자를 생성하려면 표시된 대로 user 모듈을 사용하세요.

---
- hosts: webservers
  tasks:

 - name: Create a new user
   user: 
     name: Jack

UID, 그룹 등 추가 옵션을 추가할 수도 있습니다.

- name: Create a new user
   user: 
      name: Jack
      comment: Jack Peters
          uid:   1002
      group: administrators
      shell:  /bin/bash

사용자 제거

사용자를 제거하려면 remove: yes 문을 사용하세요.

- name: Remove the user 'Jack'
  user:
    name: Jack
    state: absent
    remove: yes

새 그룹 만들기

새 그룹을 만들려면 group 모듈을 사용하세요.

- name: Create a group
  group:
    name: developers

7. Ansible을 사용하여 파일 및 디렉터리 생성

디렉터리 파일을 만들려면 file 모듈을 사용하세요.

새 디렉토리 생성

예를 들어 새 디렉터리를 만드는 경우입니다.

---
- hosts: webservers
  tasks:

  - name: Create a new directory
    file: 
     path: /opt/app
     state: directory

소유자, 그룹 및 파일 권한과 같은 다른 속성을 추가할 수 있습니다.

- hosts: webservers
  tasks:

  - name: Create a new directory
    file: 
     path: /opt/web
     state: directory
     owner: www-data
     group: www-data
     mode: 0644

또한 recurse: yes 문을 사용하여 디렉터리를 반복적으로 생성할 수 있습니다.

---
- hosts: webservers
  tasks:

  - name: Create directories recursively
    file: 
     path: /opt/web/app
     state: directory
     owner: www-data
     group: www-data
     mode: 0644
recurse: yes

파일 만들기

파일을 생성하려면 state: touch 옵션을 사용하세요.

---
- hosts: webservers
  tasks:

  - name: Create a new file
    file: 
     path: /opt/web/index.html
     state: touch
owner: www-data
     group: www-data
     mode: 0644

8. Ansible로 스토리지 관리

lvg 모듈은 LVM 볼륨 및 그룹을 구성하는 데 사용됩니다.

LVM 볼륨 그룹 생성

아래 플레이북을 고려해보세요.

---
- hosts: webservers
  tasks: 
    • name: Create lVM volume group
lvg: 
 vg: vg1
 pvs: /dev/sda1
 pesize: 32

이렇게 하면 물리적 범위 크기가 32MB/dev/sda1 파티션 위에 볼륨 그룹이 생성됩니다.

일단 생성되면 lvol 모듈을 사용하여 그림과 같이 논리 볼륨을 생성합니다.

논리 볼륨 생성

---
    - hosts: webservers
      tasks: 

       - name: Create lVM volume
    lvol: 
    vg: vg1
    lv: lvol1
    pvs: /dev/sda1

9. Ansible로 파일 시스템 관리

블록 장치에 파일 시스템을 생성하려면 filesystem 모듈을 사용하세요.

파일 시스템 생성

아래 플레이북은 블록 볼륨에 xfs 파일 시스템 유형을 생성합니다.

---
    - hosts: webservers
      tasks: 

       - name: Create a filesystem
         filesystem:
         
           fstype: xfs
           dev: /dev/vg1/lvol1

파일 시스템 마운트

다음으로 아래 플레이북에 표시된 대로 mount 모듈을 사용하여 블록 볼륨 마운트를 진행할 수 있습니다.

---
    - hosts: webservers
      tasks: 

       - name: Mount a filesystem
         mount:
         
           fstype: xfs
           src: /dev/vg1/lvol1
           path: /opt/web
           state: mounted
결론

이것으로 주제를 마칩니다. 우리는 Ansible 플레이북에 내장된 특정 모듈을 통해 수행할 수 있는 다양한 시스템 관리 작업을 다루었습니다.