스토리지 및 마운트 구성 자동화

AnsibleBeginner
지금 연습하기

소개

마운트 자동화는 반복 가능하고 안전해야 합니다. 실습용 VM 환경에서 tmpfs는 시스템에 영향을 주지 않으면서도 마운트 지점 및 /etc/fstab 관리 방식을 익히기에 적합한 파일 시스템을 제공합니다.

이번 실습에서는 마운트 지점을 생성하고, ansible.posix.mount를 사용하여 tmpfs를 마운트한 뒤, findmnt와 /etc/fstab을 통해 이를 확인합니다. 마지막으로 플레이북의 멱등성 (idempotency) 을 검증합니다.

마운트 자동화 프로젝트 생성

이 단계에서는 안전한 tmpfs 마운트를 자동화하기 위한 프로젝트 구조를 생성합니다.

cd /home/labex/project
mkdir -p rhce-ansible/{inventory,playbooks,reports}
cd rhce-ansible
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
host_key_checking = False
retry_files_enabled = False
EOF
cat > inventory/hosts <<'EOF'
[managed]
host ansible_connection=local
EOF

마운트 대상은 실제 시스템 마운트 지점이지만, tmpfs를 사용하므로 별도의 디스크 파티셔닝이 필요하지 않습니다. 이를 통해 디스크 구성 없이도 마운트 및 /etc/fstab 동작을 안전하게 실습할 수 있습니다.

마운트 변수 정의

이 단계에서는 마운트 지점, 파일 시스템 유형 및 옵션을 정의합니다. size=16m 옵션을 사용하여 tmpfs의 크기를 작게 유지합니다. 이 단계의 명령을 실행하기 전에 Ansible 프로젝트 디렉토리로 이동하십시오. 이렇게 하면 LabEx 가 각 단계를 개별적으로 실행하더라도 명령이 안정적으로 유지됩니다.

cd /home/labex/project/rhce-ansible
mkdir -p inventory/group_vars
cat > inventory/group_vars/managed.yml <<'EOF'
mount_point: /mnt/rhce-ansible-data
mount_src: tmpfs
mount_fstype: tmpfs
mount_opts: size=16m,mode=0755
EOF

이 변수들은 실시간 마운트와 영구적인 설정을 모두 정의합니다. tmpfs는 소스 및 파일 시스템 유형이며, size=16m,mode=0755는 메모리 내 파일 시스템 크기와 마운트 지점의 권한을 제어합니다.

cat inventory/group_vars/managed.yml

마운트 플레이북 작성

이 단계에서는 ansible.posix.mount 모듈을 사용합니다. state: mounted 설정은 파일 시스템을 즉시 마운트할 뿐만 아니라 /etc/fstab 항목이 존재하도록 보장합니다. 이 단계의 명령을 실행하기 전에 Ansible 프로젝트 디렉토리로 이동하십시오.

cd /home/labex/project/rhce-ansible
cat > playbooks/manage-mount.yml <<'EOF'
---
- name: Configure a safe tmpfs mount
  hosts: managed
  become: true
  gather_facts: false
  tasks:
    - name: Ensure mount point exists
      ansible.builtin.file:
        path: "{{ mount_point }}"
        state: directory
        mode: '0755'

    - name: Mount and persist tmpfs
      ansible.posix.mount:
        path: "{{ mount_point }}"
        src: "{{ mount_src }}"
        fstype: "{{ mount_fstype }}"
        opts: "{{ mount_opts }}"
        state: mounted

    - name: Write evidence inside mounted filesystem
      ansible.builtin.copy:
        dest: "{{ mount_point }}/mounted-by-ansible.txt"
        content: |
          mounted=true
        mode: '0644'
EOF

state: mounted는 두 가지 작업을 수행합니다. 즉시 파일 시스템을 마운트하고, 향후 부팅 시에도 유지되도록 /etc/fstab 항목을 생성합니다. 마지막 copy 작업은 마운트된 파일 시스템 내부에 작은 마커 파일을 작성하여 마운트가 정상적으로 사용 가능한 상태임을 증명합니다.

ansible-playbook playbooks/manage-mount.yml --syntax-check

마운트 실행 및 검사

이 단계에서는 플레이북을 실행하고 실시간 마운트 상태와 영구적인 fstab 항목을 검사합니다.

cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/manage-mount.yml | tee reports/mount-first.txt

첫 번째 실행 시 마운트 지점이 생성되고, tmpfs가 마운트되며, /etc/fstab이 업데이트되고, 마커 파일이 작성되어야 합니다. 각 결과를 직접 확인합니다.

findmnt /mnt/rhce-ansible-data

findmnt 명령은 실시간 커널 마운트 테이블에 해당 마운트 지점이 포함되어 있음을 확인해 줍니다.

grep -F /mnt/rhce-ansible-data /etc/fstab

/etc/fstab의 라인은 영구적인 구성이 존재함을 확인해 줍니다.

cat /mnt/rhce-ansible-data/mounted-by-ansible.txt

마커 파일을 읽음으로써 마운트된 파일 시스템이 쓰기 가능하며 예상된 경로에 정상적으로 연결되었음을 증명할 수 있습니다.

마운트 자동화의 멱등성 확인

이 단계에서는 플레이북을 다시 실행합니다. 마운트 지점, fstab 항목 및 마커 파일은 이미 원하는 상태와 일치하므로 변경 사항이 없어야 합니다.

cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/manage-mount.yml | tee reports/mount-second.txt

두 번째 실행은 Ansible 이 기존 마운트, fstab 항목 및 마커 파일을 변경 없이 그대로 인식하는지 확인합니다.

grep -E 'host.*changed=0' reports/mount-second.txt

요약

ansible.posix.mount를 사용하여 안전한 tmpfs 마운트를 구성하고, 실시간 및 영구적인 마운트 상태를 검증했으며, 플레이북이 멱등성을 유지하며 수렴함을 확인했습니다.