웹사이트 검색

Linux에서 Ansible을 설치하고 테스트하는 방법


이 페이지에서

  1. CentOS 7에 Ansible 설치:
  2. CentOS 8에 Ansible 설치:
  3. Ubuntu에 Ansible 설치:
  4. CentOS, Debian 및 Ubuntu에서 Python PIP로 Ansible 설치:
  5. Ansible 컨트롤러 호스트 구성:\n
  6. 결론:

Ansible은 Python 언어로 작성된 널리 사용되는 구성 관리 도구로, 단일 또는 여러 머신을 동시에 구성하는 데 도움이 됩니다. Ansible은 아래 작업을 수행하는 데 사용할 수 있습니다. -box-3-0;var ffid=1;var alS=1002%1000;var container=document.getElementById(slotId);container.style.width=100%;var ins=document.createElement(ins);ins. id=slotId+-asloaded;ins.className=adsbygoogle ezasloaded;ins.dataset.adClient=pid;ins.dataset.adChannel=cid;if(ffid==2){ins.dataset.fullWidthResponsive=true;}

  • 단일 또는 다중 노드의 처음부터 구성
  • 배포
  • 구성 변경
  • 패칭
  • 서비스 관리
  • 그리고 더 많은 것

Ansible은 단순성 때문에 널리 사용됩니다. Ansible 코드는 YAML 언어로도 작성되므로 원격 시스템에 에이전트를 설치할 필요가 없습니다. Ansible은 포트 22(SSH)를 사용하여 원격 시스템에 연결하고 필요한 변경을 수행합니다.

22 포트에서 원격 시스템에 연결할 수 있는 모든 시스템은 제어 노드가 될 수 있습니다. 제어 노드는 Ansible을 설치할 수 있는 위치이며 관리 노드는 제어 노드를 통해 관리됩니다.

컨트롤러 노드에 Ansible을 설치하는 방법을 살펴보겠습니다.

CentOS 7에 Ansible 설치:

Python은 Ansible을 설치하기 위한 유일한 전제 조건이므로 아래 명령을 실행하여 Python을 설치합니다.

$sudo yum install python3 -y

CentOS 7에 Ansible을 설치하려면 먼저 CentOS 7 EPEL 저장소가 설치되어 있는지 확인하세요. 아래 명령어를 실행하여 epel 저장소를 설치합니다.

$sudo yum install epel-release

아래 업데이트 명령을 실행하여 시스템 패키지 인덱스를 업데이트합니다.

$sudo yum update -y

리포지토리가 설치되면 yum 패키지 관리자를 사용하여 Ansible을 설치합니다. 아래 언급된 명령을 실행하여 Ansible을 설치합니다.

$sudo yum install ansible -y

Ansible이 제대로 설치되었는지와 해당 버전을 확인하십시오.

$ansible -v

CentOS 8에 Ansible 설치:

CentOS 8의 설치 단계를 살펴보겠습니다. CentOS 8에 Python을 설치하겠습니다.

$sudo dnf install python3

Python이 설치되면 아래 명령어를 실행하여 EPEL repo를 설치합니다.

$sudo dnf install epel-release -y

아래 업데이트 명령을 실행하여 시스템 패키지 인덱스를 업데이트합니다.

$sudo dnf update -y

이제 Ansible을 설치할 준비가 되었습니다. 아래 명령어를 실행하여 Ansible을 설치합니다.

$sudo dnf install ansible -y

Ansible이 제대로 설치되었는지와 해당 버전을 확인하십시오.

$ansible -v

Ubuntu에 Ansible을 설치합니다.

Python은 오늘날 대부분의 Linux 배포판에서 기본 패키지입니다. Python이 설치되어 있지 않은 경우 아래 명령을 실행하여 Python 패키지를 설치합니다.

$sudo apt-get install python3

우분투에서 Ansible을 설치하기 위해 먼저 아래 명령어를 실행하여 리포지토리를 설치합니다.

$sudo apt-add-repository ppa:ansible/ansible

아래 업데이트 명령을 실행하여 시스템 패키지 인덱스를 업데이트합니다.

$sudo apt-get update -y

이제 Ansible을 설치합니다.

$sudo apt-get install -y ansible

Ansible이 제대로 설치되었는지와 해당 버전을 확인하십시오.

$ansible -v

CentOS, Debian 및 Ubuntu에서 Python PIP로 Ansible을 설치합니다.

사용 중인 운영 체제에 관계없이 Python 패키지 설치 프로그램으로 Ansible을 설치할 수 있습니다. 아래 명령을 실행하여 python3-pip를 설치합니다.

CentOS 7 이하:

$sudo yum install python3 python3-pip -y

CentOS 8의 경우:

$sudo dnf install python3 python3-pip -y

우분투 및 데비안의 경우:

$sudo apt-get install python3 python3-pip

Python과 pip가 설치되어 있으므로 모든 운영 체제에서 아래 명령을 실행하여 Ansible을 설치해 보겠습니다.

$sudo pip3 install ansible

Ansible이 제대로 설치되었는지와 해당 버전을 확인하십시오.

$ansible -v

Ansible 컨트롤러 호스트 구성:

다른 노드와 통신을 시작하려면 먼저 "hosts" 파일을 설정해야 합니다. 이 파일에는 관리 노드의 모든 IP 또는 호스트 이름이 있습니다.

참고: 호스트 파일을 사용하여 관리 노드에 연결하는 것이 항상 필요한 것은 아닙니다. 그러나 매번 모든 명령을 실행하는 동안 관리 노드 서버 IP 또는 호스트 이름을 사용해야 합니다.

아래 명령을 실행하여 루트 권한으로 파일을 만듭니다(아직 없는 경우).

$sudo touch /etc/ansible/hosts

파일에 쓰기 전에 샘플 호스트 파일을 살펴보고 이해해 보겠습니다.

[group_name]
alias ansible_ssh_host=your_node_server_ip

호스트 파일은 위 구문을 따라야 합니다. 각 매개변수를 살펴보겠습니다.

[group_name]: 이 매개변수는 그룹을 생성합니다. group_name 매개변수 아래의 모든 관리 노드 IP 주소 또는 호스트 이름은 동일한 그룹에 속합니다. 예를 들어 인프라에 웹 서버가 여러 개 있는 경우 여기에 관리 노드의 모든 IP 주소 또는 호스트 이름을 추가할 수 있습니다.

alias: 이 매개변수는 관리 노드 서버를 식별하기 위해 관리 노드 서버에 별명을 제공하는 데 사용됩니다. 예를 들어 인프라에 여러 웹 서버가 있는 경우 host1, host2, host3을 별칭으로 지정할 수 있습니다. 별칭 지정의 주요 이점은 단일 서버의 구성을 변경하기 위해 Ansible 명령을 실행할 때 별칭을 사용하여 서버에서 필요한 작업을 식별하고 수행할 수 있다는 것입니다.

ansible_ssh_host=your_node_server_ip: 이 매개변수는 별칭이 관리 노드 IP 주소 또는 호스트 이름을 가리킵니다.

우리는 CentOS 8을 Ansible과 함께 제어 노드로 사용할 것입니다. 위에서 언급했듯이 Ansible은 원격 호스트의 22포트를 사용하여 연결합니다.

CentOS 관리 노드 서버 IP 주소가 192.168.0.2, 192.168.0.3 및 192.168.0.4라고 가정합니다.

Ansible 컨트롤러 노드가 관리 노드와 통신할 수 있도록 하려면 SSH 포트인 포트 22에서 관리 노드에 액세스할 수 있는지 확인해야 합니다. 아래 명령을 실행하여 컨트롤러의 세 관리 노드 모두에서 하나씩 연결을 확인합니다.

$ssh 192.168.0.2
$ssh 192.168.0.3
$ssh 192.168.0.4

모든 노드의 루트 사용자 암호를 입력하라는 메시지가 표시됩니다. Ansible 컨트롤러와 관리 노드 사이에 비밀번호 없는 인증이 구성된 경우 Ansible은 매우 원활하게 작동합니다. Ansible 명령어의 다른 매개변수를 사용하면 비밀번호 인증도 작동할 수 있습니다.

Ansible 컨트롤러와 관리 노드 간에 ssh 연결을 구성했으므로 모든 관리 노드에 연결하도록 호스트 파일을 구성하겠습니다. 앞에서 언급했듯이 단일 그룹에 여러 노드 서버 별칭을 추가할 수 있습니다. 이 경우 세 개의 노드를 모두 추가하고 별칭을 각각 host1, host2 및 host3으로 지정합니다. 호스트 파일은 모든 관리 노드 세부 정보를 추가한 후 아래와 같아야 합니다. 아래 명령을 실행하여 이전에 생성한 호스트 파일을 편집합니다.

아래 명령을 실행하여 루트 권한으로 파일을 엽니다.

$sudo vi /etc/ansible/hosts

호스트 파일에 아래에 언급된 구성을 추가할 수 있습니다.

[node_servers]
host1 ansible_ssh_host=192.168.0.2
host2 ansible_ssh_host=192.168.0.3
host3 ansible_ssh_host=192.168.0.4

여기서 우리는 node_servers라는 그룹에 모든 관리 노드 IP와 별칭을 추가했습니다.

이제 Ansible 컨트롤러에서 관리 노드에 연결해 보겠습니다.

$ansible -m ping node_servers

위 명령은 모듈 ping을 사용하여 위 호스트 파일에서 정의한 "node_servers" 그룹에 연결합니다.

다양한 이유로 오류가 발생할 수 있습니다.

  1. 기본적으로 Ansible은 현재 사용자 이름을 제공하지 않은 경우 현재 사용자 이름을 사용하여 관리 노드에 연결을 시도합니다. 해당 사용자가 노드 서버에 없으면 아래와 같은 오류가 표시됩니다.\n
  2. 관리 노드 연결을 위해 ssh 포트 22가 열려 있지 않은 경우. (앞서 언급했듯이 Ansible은 ssh 포트에서 연결합니다.)\n
  3. hosts 파일의 IP가 올바르지 않은 경우.

위의 조건 중 하나라도 실패하면 아래 오류가 발생합니다.

host1 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh.",
    "unreachable": true
}
host2 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh.",
    "unreachable": true
}
host3 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh.",
    "unreachable": true
}

James 사용자가 있는 "node_servers\ 그룹의 관리 노드에 연결해야 한다고 Ansible에 구체적으로 알려줍시다. 아래에 언급된 대로 group_vars 디렉토리를 생성하십시오.

$sudo mkdir /etc/ansible/group_vars

이 디렉토리의 파일은 특히 Ansible 플레이북에서 사용할 수 있는 변수를 구성하는 데 사용됩니다.

아래 명령을 실행하여 설정에 대한 변수 파일을 만들 수 있습니다.

$sudo vim /etc/ansible/group_vars/node_servers.yml


아래 코드를 파일에 추가합니다.

---
ansible_ssh_user: james

YML 파일은 항상 첫 줄에서 "---"로 시작합니다. 완료되면 이 파일을 저장하고 닫습니다. 이제 Ansible은 현재 사용자가 명령을 실행하는 데 사용하는 것과 관계없이 항상 node_servers 그룹에 대해 james 사용자를 사용합니다.

관리 노드 연결을 확인하십시오.

호스트를 설정하고 관리 노드에 성공적으로 연결할 수 있도록 충분한 구성 세부 정보가 있으므로 이전에 실행한 것과 동일한 명령을 시도할 수 있습니다.

$ansible -m ping servers 

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

host1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

호스트3 | 성공 => { \변경됨\: 거짓, \핑\: \퐁\}

이것은 Ansible이 관리 노드에 연결되어 있는지 확인하기 위한 기본 테스트입니다.

결론:

관리 노드에 CentOS 운영 체제를 사용할 필요는 없습니다. CentOS, RedHat, Ubuntu 및 기타 Linux 배포에 대해 위에서 사용한 것과 동일한 테스트 구성을 사용할 수 있습니다.