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 저장소가 설치되어 있는지 확인하십시오.- sudo dnf install epel-release
리포지토리가 설치되면 Ansible을 설치합니다.
- sudo dnf install ansible
이제 Ansible을 통해 서버를 관리하는 데 필요한 모든 소프트웨어가 있습니다.
2단계 - Ansible 호스트 구성
Ansible은
hosts
파일을 통해 알고 있는 모든 서버를 추적합니다. 다른 컴퓨터와 통신하려면 먼저 이 파일을 설정해야 합니다.다음과 같이 루트 권한으로 파일을 엽니다. Rocky Linux 9의 기본 텍스트 편집기는
vi
입니다.- sudo vi /etc/ansible/hosts
이 파일에는 주석 처리된 많은 예제 구성이 있음을 알 수 있습니다. 나중에 더 복잡한 시나리오를 구현하려는 경우 Ansible의 구성을 배우는 데 도움이 되도록 이러한 예제를 파일에 보관하십시오.
호스트 파일은 매우 유연하며 몇 가지 다른 방법으로 구성할 수 있습니다. 사용할 구문은 다음과 같이 구성됩니다.
[group_name] alias ansible_ssh_host=your_server_ip
group_name
은 그 아래에 나열된 모든 서버를 한 단어로 참조할 수 있는 조직 태그입니다. 별칭은 해당 서버를 참조하는 이름입니다.예를 들어 Ansible로 제어하려는 세 개의 서버가 있다고 가정합니다. Ansible은 SSH를 통해 클라이언트 컴퓨터와 통신하므로 관리하려는 각 서버는 Ansible 서버에서 액세스할 수 있습니다. 전제 조건에서 하나 이상의 Ansible 호스트 옵션을 따랐다면 호스트는 다음을 실행하여 SSH 키를 설정하고 액세스할 수 있습니다.
- ssh root@your_server_ip
암호를 묻는 메시지가 표시되지 않습니다. Ansible은 확실히 암호 기반 SSH 인증을 처리할 수 있는 능력이 있지만 SSH 키는 작업을 보다 간소화하는 데 도움이 됩니다.
파일이 이미 열려 있으면 다음 서버의 IP 주소를 예로 사용합니다.
203.0.113.111
,203.0.113.112
및203.0.113.113
. IP 주소를 자신의 것으로 바꾸십시오. 그런 다음 각 서버를 개별적으로host1
,host2
및host3
로 참조하거나 그룹으로서버
. 이를 구성하려면 호스트 파일에 다음 블록을 추가해야 합니다.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
를 작성하면 됩니다.호스트는 여러 그룹에 속할 수 있으며 그룹은 모든 구성원에 대한 매개변수를 구성할 수 있습니다. 다음 명령을 실행하여 이를 시도할 수 있습니다.
- ansible -m ping host1
Ansible connection errorhost1 | 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 구성 구조에 디렉토리를 생성하여 시작합니다.- sudo mkdir /etc/ansible/group_vars
이 폴더 내에서 구성하려는 각 그룹에 대해 YAML 형식 파일을 생성할 수 있습니다. 이전에는
vi
텍스트 편집기를 사용하여 파일을 편집했습니다. 또는nano
를 사용하여 파일을 편집할 수 있지만 다음 명령으로 설치해야 합니다.- sudo dnf -y install nano
nano
사용을 선호하는 경우 설치 후/etc/ansible/group_vars/servers
파일을 열어 구성을 편집합니다.- sudo nano /etc/ansible/group_vars/servers
파일에 다음 코드를 추가합니다. YAML 파일은
---
로 시작하므로 해당 부분을 잊지 마십시오.--- ansible_ssh_user: sammy
완료되면 파일을 저장하고 종료합니다.
nano
에서는CTRL + X
를 누른 다음Y
및ENTER
를 눌러 이 작업을 수행할 수 있습니다.이제 Ansible은 현재 사용자에 관계없이 항상
servers
그룹에 대해sammy
사용자를 사용합니다.그룹 연결에 관계없이 모든 서버에 대한 구성 세부 정보를 지정하려는 경우 해당 세부 정보를
/etc/ansible/group_vars/all
에 있는 파일에 넣을 수 있습니다. 개별 호스트는/etc/ansible/host_vars
의 디렉토리 아래에 파일을 생성하여 구성할 수 있습니다.3단계 — 기본 Ansible 명령 사용
이제 호스트를 설정하고 호스트에 성공적으로 연결할 수 있도록 충분한 구성 세부 정보가 있으므로 몇 가지 명령을 시도할 수 있습니다.
먼저 구성한 모든 서버를 ping합니다. 명령의
-m ping
부분은ping
모듈을 사용하도록 Ansible에 지시하는 것입니다. 원격 호스트에서 실행할 수 있는 일반 명령입니다.ping
모듈은 Linux의 일반ping
유틸리티와 같이 다양한 방식으로 작동하지만 대신 Ansible 연결을 확인합니다.- ansible -m ping all
Ansible은 다음과 같은 출력을 반환합니다.
Outputhost3 | 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
명령 외에 다른 서버 집합을 대상으로 하는 다른 명령이 있습니다. 그룹을 지정할 수도 있습니다.- ansible -m ping servers
개별 호스트를 지정할 수도 있습니다.
- ansible -m ping host1
또한 콜론으로 구분하여 여러 호스트를 지정할 수 있습니다.
- ansible -m ping host1:host2
shell
모듈을 사용하면 원격 호스트에 터미널 명령을 보내고 결과를 검색할 수 있습니다. 예를 들어host1
시스템의 메모리 사용량을 확인하려면 다음을 사용할 수 있습니다.- ansible -m shell -a 'free -m' host1
아시다시피
-a
스위치를 사용하여 스크립트에 인수를 전달합니다. 출력 결과는 다음과 같습니다.Outputhost1 | 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 플레이북 작성 가이드에서 자세히 알아볼 수 있습니다.