웹사이트 검색

Rocky Linux 9에서 Ansible을 설치 및 구성하는 방법


소개

구성 관리 시스템은 관리자와 운영 팀이 액세스할 수 있는 많은 수의 서버를 제어하도록 설계되었습니다. 하나의 중앙 위치에서 자동화된 방식으로 다양한 시스템을 제어할 수 있습니다. Chef 및 Puppet과 같이 Linux 시스템에 사용할 수 있는 인기 있는 구성 관리 시스템이 많이 있지만 이들은 종종 많은 사람들이 원하거나 필요로 하는 것보다 더 복잡합니다. Ansible은 시작할 때 오버헤드가 훨씬 적기 때문에 이러한 옵션에 대한 훌륭한 대안입니다.

Ansible은 Ansible 구성 요소가 설치 및 구성된 컴퓨터에서 클라이언트 시스템을 구성하여 작동합니다. 일반 SSH 채널을 통해 통신하여 원격 시스템에서 정보를 검색하고 명령을 실행하며 파일을 복사합니다. 이 때문에 Ansible 시스템은 클라이언트 컴퓨터에 추가 소프트웨어를 설치할 필요가 없습니다. 이것은 Ansible이 서버 관리를 용이하게 하는 한 가지 방법입니다. SSH 포트가 노출된 모든 서버는 수명 주기의 어느 단계에 있든 관계없이 Ansible의 구성 우산 아래로 가져올 수 있습니다.

Ansible은 모듈식 접근 방식을 채택하여 기본 시스템의 기능을 사용하여 특정 시나리오를 처리할 수 있도록 합니다. 모듈은 모든 언어로 작성할 수 있으며 표준 JSON으로 통신할 수 있습니다. 구성 파일은 표현적 특성과 널리 사용되는 마크업 언어와의 유사성으로 인해 주로 YAML 데이터 직렬화 형식으로 작성됩니다. Ansible은 명령줄 도구 또는 플레이북이라는 구성 스크립트를 통해 클라이언트와 상호 작용할 수 있습니다.

이 가이드에서는 Rocky Linux 9 서버에 Ansible을 설치하고 소프트웨어 사용 방법에 대한 몇 가지 기본 사항을 배웁니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • 하나의 Ansible 제어 노드: Ansible 제어 노드는 SSH를 통해 Ansible 호스트에 연결하고 이를 제어하는 데 사용할 시스템입니다. Ansible 제어 노드는 로컬 시스템이거나 Ansible 실행 전용 서버일 수 있지만 이 가이드에서는 제어 노드가 Rocky Linux 9 시스템이라고 가정합니다. 제어 노드에 다음이 있는지 확인하십시오.\n
    • sudo 권한이 있는 루트가 아닌 사용자. 이를 설정하려면 Rocky Linux 9 가이드로 초기 서버 설정의 2단계와 3단계를 따를 수 있습니다. 그러나 원격 서버를 Ansible 제어 노드로 사용하는 경우 이 가이드의 모든 단계를 따라야 합니다.
    • 이 사용자와 연결된 SSH 키 쌍입니다. 이를 설정하려면 Rocky Linux 9에서 SSH 키를 설정하는 방법에 대한 가이드의 1단계를 따를 수 있습니다.

    하나 이상의 Ansible 호스트: Ansible 호스트는 Ansible 제어 노드가 자동화하도록 구성된 모든 머신입니다. 이 가이드에서는 Ansible 호스트가 원격 Rocky Linux 9 서버라고 가정합니다. 각 Ansible 호스트에 다음이 있는지 확인하십시오.

    • 시스템 사용자의 authorized_keys에 추가된 Ansible 제어 노드의 SSH 공개 키. 이 사용자는 루트이거나 sudo 권한이 있는 일반 사용자일 수 있습니다. 이를 설정하려면 Rocky Linux 9에서 SSH 키를 설정하는 방법의 2단계를 따를 수 있습니다.

    모든 설정을 완료하면 첫 번째 단계를 시작할 준비가 된 것입니다.

    1단계 — Ansible 설치

    다양한 서버를 관리하는 수단으로 Ansible 탐색을 시작하려면 먼저 Ansible 소프트웨어를 하나 이상의 시스템에 설치해야 합니다.

    Rocky Linux 9용 Ansible을 얻으려면 먼저 dnf를 사용하여 Rocky Linux 9 EPEL 저장소가 설치되어 있는지 확인하십시오.

    1. sudo dnf install epel-release

    리포지토리가 설치되면 Ansible을 설치합니다.

    1. sudo dnf install ansible

    이제 Ansible을 통해 서버를 관리하는 데 필요한 모든 소프트웨어가 있습니다.

    2단계 - Ansible 호스트 구성

    Ansible은 hosts 파일을 통해 알고 있는 모든 서버를 추적합니다. 다른 컴퓨터와 통신하려면 먼저 이 파일을 설정해야 합니다.

    다음과 같이 루트 권한으로 파일을 엽니다. Rocky Linux 9의 기본 텍스트 편집기는 vi입니다.

    1. sudo vi /etc/ansible/hosts

    이 파일에는 주석 처리된 많은 예제 구성이 있음을 알 수 있습니다. 나중에 더 복잡한 시나리오를 구현하려는 경우 Ansible의 구성을 배우는 데 도움이 되도록 이러한 예제를 파일에 보관하십시오.

    호스트 파일은 매우 유연하며 몇 가지 다른 방법으로 구성할 수 있습니다. 사용할 구문은 다음과 같이 구성됩니다.

    [group_name]
    alias ansible_ssh_host=your_server_ip
    

    group_name은 그 아래에 나열된 모든 서버를 한 단어로 참조할 수 있는 조직 태그입니다. 별칭은 해당 서버를 참조하는 이름입니다.

    예를 들어 Ansible로 제어하려는 세 개의 서버가 있다고 가정합니다. Ansible은 SSH를 통해 클라이언트 컴퓨터와 통신하므로 관리하려는 각 서버는 Ansible 서버에서 액세스할 수 있습니다. 전제 조건에서 하나 이상의 Ansible 호스트 옵션을 따랐다면 호스트는 다음을 실행하여 SSH 키를 설정하고 액세스할 수 있습니다.

    1. ssh root@your_server_ip

    암호를 묻는 메시지가 표시되지 않습니다. Ansible은 확실히 암호 기반 SSH 인증을 처리할 수 있는 능력이 있지만 SSH 키는 작업을 보다 간소화하는 데 도움이 됩니다.

    파일이 이미 열려 있으면 다음 서버의 IP 주소를 예로 사용합니다. 203.0.113.111, 203.0.113.112203.0.113.113. IP 주소를 자신의 것으로 바꾸십시오. 그런 다음 각 서버를 개별적으로 host1, host2host3로 참조하거나 그룹으로 서버. 이를 구성하려면 호스트 파일에 다음 블록을 추가해야 합니다. i를 눌러 텍스트를 삽입하고 완료되면 ESC를 누르면 됩니다.

    [servers]
    host1 ansible_ssh_host=203.0.113.111
    host2 ansible_ssh_host=203.0.113.112
    host3 ansible_ssh_host=203.0.113.113
    

    블록 추가가 완료되면 파일을 저장하고 종료합니다. :wq를 작성한 다음 ENTER를 작성하면 됩니다.

    호스트는 여러 그룹에 속할 수 있으며 그룹은 모든 구성원에 대한 매개변수를 구성할 수 있습니다. 다음 명령을 실행하여 이를 시도할 수 있습니다.

    1. ansible -m ping host1
    Ansible connection error
    host1 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: sammy@203.0.113.111: Permission denied (publickey).", "unreachable": true }

    Ansible은 기본적으로 현재 사용자 이름을 사용하여 원격 호스트에 연결을 시도합니다. 이 오류는 원격 시스템에 사용자가 없으면 연결이 실패함을 나타냅니다.

    따라서 Sammy 사용자로 servers 그룹의 서버에 연결하도록 Ansible에 구체적으로 지시해 보겠습니다. group_vars라는 Ansible 구성 구조에 디렉토리를 생성하여 시작합니다.

    1. sudo mkdir /etc/ansible/group_vars

    이 폴더 내에서 구성하려는 각 그룹에 대해 YAML 형식 파일을 생성할 수 있습니다. 이전에는 vi 텍스트 편집기를 사용하여 파일을 편집했습니다. 또는 nano를 사용하여 파일을 편집할 수 있지만 다음 명령으로 설치해야 합니다.

    1. sudo dnf -y install nano

    nano 사용을 선호하는 경우 설치 후 /etc/ansible/group_vars/servers 파일을 열어 구성을 편집합니다.

    1. sudo nano /etc/ansible/group_vars/servers

    파일에 다음 코드를 추가합니다. YAML 파일은 ---로 시작하므로 해당 부분을 잊지 마십시오.

    ---
    ansible_ssh_user: sammy
    

    완료되면 파일을 저장하고 종료합니다. nano에서는 CTRL + X를 누른 다음 YENTER를 눌러 이 작업을 수행할 수 있습니다.

    이제 Ansible은 현재 사용자에 관계없이 항상 servers 그룹에 대해 sammy 사용자를 사용합니다.

    그룹 연결에 관계없이 모든 서버에 대한 구성 세부 정보를 지정하려는 경우 해당 세부 정보를 /etc/ansible/group_vars/all에 있는 파일에 넣을 수 있습니다. 개별 호스트는 /etc/ansible/host_vars의 디렉토리 아래에 파일을 생성하여 구성할 수 있습니다.

    3단계 — 기본 Ansible 명령 사용

    이제 호스트를 설정하고 호스트에 성공적으로 연결할 수 있도록 충분한 구성 세부 정보가 있으므로 몇 가지 명령을 시도할 수 있습니다.

    먼저 구성한 모든 서버를 ping합니다. 명령의 -m ping 부분은 ping 모듈을 사용하도록 Ansible에 지시하는 것입니다. 원격 호스트에서 실행할 수 있는 일반 명령입니다. ping 모듈은 Linux의 일반 ping 유틸리티와 같이 다양한 방식으로 작동하지만 대신 Ansible 연결을 확인합니다.

    1. ansible -m ping all

    Ansible은 다음과 같은 출력을 반환합니다.

    Output
    host3 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } host1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } host2 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }

    이 출력은 Ansible이 모든 호스트에 연결되어 있는지 확인하는 기본 테스트입니다.

    all 명령 외에 다른 서버 집합을 대상으로 하는 다른 명령이 있습니다. 그룹을 지정할 수도 있습니다.

    1. ansible -m ping servers

    개별 호스트를 지정할 수도 있습니다.

    1. ansible -m ping host1

    또한 콜론으로 구분하여 여러 호스트를 지정할 수 있습니다.

    1. ansible -m ping host1:host2

    shell 모듈을 사용하면 원격 호스트에 터미널 명령을 보내고 결과를 검색할 수 있습니다. 예를 들어 host1 시스템의 메모리 사용량을 확인하려면 다음을 사용할 수 있습니다.

    1. ansible -m shell -a 'free -m' host1

    아시다시피 -a 스위치를 사용하여 스크립트에 인수를 전달합니다. 출력 결과는 다음과 같습니다.

    Output
    host1 | CHANGED | rc=0 >> total used free shared buff/cache available Mem: 7951 234 6768 0 948 7461 Swap: 0 0 0

    이제 다양한 호스트에서 몇 가지 기본 Ansible 명령을 성공적으로 실행했습니다.

    결론

    이제 Ansible 서버가 제어하려는 서버와 통신하도록 구성되었습니다. 기본 작업을 원격으로 실행하는 ansible 명령을 사용하여 Ansible이 각 호스트와 통신할 수 있는지 확인할 수 있습니다.

    Ansible을 통해 서버 작업을 위한 훌륭한 기반을 구성했으므로 다음 단계는 플레이북을 사용하여 무거운 작업을 수행하는 방법을 배우는 것입니다. 구성 관리 101: Ansible 플레이북 작성 가이드에서 자세히 알아볼 수 있습니다.