Ubuntu 에 Ansible 설치하기

AnsibleBeginner
지금 연습하기

소개

이 랩에서는 Ubuntu 시스템에 Ansible 을 설치하고 설정하는 방법을 배우게 됩니다. Ansible 은 구성 관리, 애플리케이션 배포 및 작업 자동화를 단순화하는 강력한 오픈 소스 자동화 도구입니다. 이 랩을 마치면 Ansible 이 설치 및 구성되어 원격 시스템을 효율적으로 관리할 준비가 됩니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 82%입니다.학습자들로부터 98%의 긍정적인 리뷰율을 받았습니다.

시스템 패키지 업데이트

새로운 소프트웨어를 설치하기 전에 시스템에 최신 업데이트가 있는지 확인하는 것이 중요합니다. 이는 잠재적인 충돌을 방지하고 최신 보안 패치를 확보하는 데 도움이 됩니다.

먼저, 패키지 목록을 업데이트합니다:

sudo apt update
터미널에서 패키지 목록 업데이트

이 명령은 Ubuntu 의 소프트웨어 저장소에 연결하여 최신 사용 가능한 패키지에 대한 정보를 다운로드합니다. 다음과 같은 출력을 볼 수 있습니다:

Hit:1 http://mirrors.cloud.aliyuncs.com/ubuntu jammy InRelease
Hit:2 http://mirrors.cloud.aliyuncs.com/ubuntu jammy-updates InRelease
Hit:3 http://mirrors.cloud.aliyuncs.com/ubuntu jammy-backports InRelease
Hit:4 http://mirrors.cloud.aliyuncs.com/ubuntu jammy-security InRelease
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.

"Hit" 또는 "Get" 라인이 표시되어도 걱정하지 마십시오. 이는 정상이며 어떤 저장소 정보가 업데이트되고 있는지 보여줍니다.

Ansible 설치

이제 시스템이 최신 상태이므로 Ansible 설치를 진행할 수 있습니다. Ubuntu 의 기본 저장소에는 Ansible 이 포함되어 있어 설치 프로세스가 간단합니다.

다음 명령을 사용하여 Ansible 을 설치합니다:

sudo apt install ansible -y

이 명령을 자세히 살펴보겠습니다:

  • sudo: 이 명령은 소프트웨어 설치에 필요한 관리자 권한으로 명령을 실행합니다.
  • apt install: 패키지 관리자에게 새 패키지를 설치하도록 지시합니다.
  • ansible: 설치하려는 패키지의 이름입니다.
  • -y: 이 플래그는 설치 중 모든 프롬프트에 자동으로 "yes"로 응답합니다.

설치 진행 상황을 보여주는 출력을 볼 수 있습니다:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
...
Processing triggers for man-db (2.10.2-1) ...

텍스트의 양에 놀라지 마십시오. 이는 Ansible 과 함께 설치되는 모든 종속성을 보여주는 것입니다.

설치가 완료된 후 Ansible 이 올바르게 설치되었는지 확인하는 것이 좋습니다. 버전 확인을 통해 확인할 수 있습니다:

ansible --version

이 명령은 설치된 Ansible 버전에 대한 정보를 표시해야 합니다:

ansible 2.10.8
  config file = None
  configured module search path = ['/home/labex/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.10.12 (main, Jul 29 2024, 16:56:48) [GCC 11.4.0]

이와 유사한 출력이 표시되면 축하합니다! Ansible 이 이제 시스템에 설치되었습니다.

Ansible 을 위한 SSH 설정

Ansible 은 관리 노드와 통신하기 위해 SSH 를 사용합니다. 이 프로세스를 간소화하고 보안을 강화하기 위해 SSH 키 기반 인증을 설정합니다. 이를 통해 Ansible 은 매번 비밀번호를 입력하지 않고도 다른 머신에 연결할 수 있습니다.

먼저, SSH 키 쌍을 생성합니다:

ssh-keygen -t rsa -b 4096 -C "labex@example.com"

이 명령을 자세히 살펴보겠습니다:

  • ssh-keygen: 키 쌍을 생성하는 프로그램입니다.
  • -t rsa: RSA 유형 키를 원한다고 지정합니다.
  • -b 4096: 키 크기를 4096 비트로 설정하여 매우 안전합니다.
  • -C "labex@example.com": 키에 주석 (일반적으로 이메일 주소) 을 추가합니다.

이 명령을 실행하면 다음과 같은 프롬프트가 표시됩니다:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/labex/.ssh/id_rsa):

Enter 키를 눌러 기본 위치를 수락합니다.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

이 랩에서는 Enter 키를 두 번 눌러 암호를 비워둘 수 있습니다. 프로덕션 환경에서는 강력한 암호를 사용해야 합니다.

키 생성을 확인하는 출력을 볼 수 있습니다:

Your identification has been saved in /home/labex/.ssh/id_rsa
Your public key has been saved in /home/labex/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:abcdefghijklmnopqrstuvwxyz1234567890ABCDEFG labex@example.com
The key's randomart image is:
+---[RSA 4096]----+
|    .            |
|   . .           |
|    o            |
|   . o           |
|    + = S        |
|   + * +         |
|  . = o .        |
| . + =           |
|  +.+.           |
+----[SHA256]-----+

다음으로, 이 키를 로컬 머신에 복사해야 합니다. 실제 시나리오에서는 이 키를 원격 호스트에 복사하지만, 이 랩에서는 로컬 머신을 사용합니다:

ssh-copy-id labex@localhost

계속하려면 yes를 입력합니다.

labex 사용자 비밀번호 프롬프트

labex 사용자의 비밀번호를 묻는 메시지가 표시됩니다.

이 랩 환경에서는 VNC 터미널을 열고 다음을 실행하여 비밀번호를 찾을 수 있습니다:

현재 터미널 세션을 닫지 말고 새 Xfce 터미널을 열어 다음 명령을 실행합니다:

echo $PASSWORD

참고: 이 명령은 VNC 터미널에서 실행해야 합니다. 비밀번호는 VNC 터미널에서만 사용할 수 있으며 SSH 또는 웹 터미널을 통해 액세스할 수 없습니다.

SSH 키 복사 프롬프트

ssh-copy-id에서 메시지가 표시되면 비밀번호를 입력합니다. 다음과 같은 출력을 볼 수 있습니다:

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
labex@localhost's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'labex@localhost'"
and check to make sure that only the key(s) you wanted were added.

SSH 키 설정이 성공했는지 확인하려면 로컬 머신에 SSH 를 시도합니다:

ssh labex@localhost

키가 올바르게 설정된 경우 비밀번호를 묻지 않고 로그인할 수 있어야 합니다. 새 명령 프롬프트가 표시됩니다. 원래 세션으로 돌아가려면 exit를 입력합니다.

Ansible 인벤토리 생성 및 설정

Ansible 인벤토리 (inventory) 는 플레이북 (playbook) 의 명령, 모듈 및 작업이 작동하는 호스트와 호스트 그룹을 정의하는 파일입니다. Ansible 의 주소록과 같아서, 연결할 수 있는 머신을 알려줍니다.

먼저, Ansible 구성 디렉토리를 생성합니다:

sudo mkdir -p /etc/ansible

이 명령은 /etc/ansible 디렉토리가 아직 존재하지 않는 경우 생성합니다. -p 플래그는 디렉토리가 이미 있는 경우 오류를 발생시키지 않도록 합니다.

이제 인벤토리 파일을 생성하고 편집합니다:

sudo nano /etc/ansible/hosts

이것은 nano 텍스트 편집기를 엽니다. nano 를 처음 사용하는 경우 걱정하지 마세요. 간단하고 사용자 친화적인 편집기입니다.

이 파일에 다음 내용을 추가합니다:

[local]
localhost ansible_connection=local

[webservers]
web1 ansible_host=localhost ansible_connection=ssh ansible_user=labex

이것이 의미하는 바를 자세히 살펴보겠습니다:

  • [local][webservers]는 그룹 이름입니다. 이러한 이름을 사용하여 호스트를 구성할 수 있습니다.
  • localhost ansible_connection=local은 Ansible 에게 SSH 를 사용하지 않고 로컬 머신에 직접 연결하도록 지시합니다.
  • web1 ansible_host=localhost ansible_connection=ssh ansible_user=labexweb1이라는 호스트를 설정합니다. 이 랩에서는 SSH 를 사용하여 localhost 에 연결하고 labex 사용자로 로그인합니다.

nano 에서 파일을 저장하려면 Ctrl+X, Y, 마지막으로 Enter를 누릅니다.

인벤토리 파일의 내용을 확인하려면 cat 명령을 사용합니다:

cat /etc/ansible/hosts

방금 파일에 추가한 내용이 표시되어야 합니다.

Ansible 연결 테스트

이제 Ansible 을 설치하고 구성했으므로 모든 것이 제대로 작동하는지 확인하기 위해 연결을 테스트해 보겠습니다.

먼저, 인벤토리의 모든 호스트에 핑 (ping) 을 보내보겠습니다:

ansible all -m ping

이 명령을 자세히 살펴보겠습니다:

  • ansible: Ansible 을 실행하는 기본 명령입니다.
  • all: 인벤토리의 모든 호스트에서 실행하도록 Ansible 에 지시합니다.
  • -m ping: 사용할 Ansible 모듈을 지정합니다. ping 모듈은 호스트가 응답하는지 확인합니다.

다음과 유사한 출력을 볼 수 있습니다:

localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
web1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

두 호스트 모두 "SUCCESS"가 표시되면 Ansible 이 이러한 호스트에 성공적으로 연결하고 통신할 수 있음을 의미합니다.

다음으로, 모든 호스트에서 간단한 명령을 실행해 보겠습니다:

ansible all -a "uptime"

이 명령은 Ansible 의 command 모듈 (-m으로 모듈을 지정하지 않은 경우 기본값) 을 사용하여 모든 호스트에서 uptime 명령을 실행합니다. uptime 명령은 시스템이 얼마나 오랫동안 실행되었는지 보여줍니다.

다음과 유사한 출력을 볼 수 있습니다:

localhost | CHANGED | rc=0 >>
 14:30:15 up 1 day,  3:24,  1 user,  load average: 0.00, 0.00, 0.00

web1 | CHANGED | rc=0 >>
 14:30:15 up 1 day,  3:24,  1 user,  load average: 0.00, 0.00, 0.00

이 출력은 Ansible 이 두 호스트 모두에서 uptime 명령을 성공적으로 실행했음을 보여줍니다. "CHANGED" 상태는 명령이 성공적으로 실행되었고 출력을 생성했음을 나타냅니다.

팁: "Distribution ubuntu 22.04 on host localhost should use /usr/bin/python3"라는 사용 중단 경고가 표시될 수 있습니다. 이는 최신 버전의 Ubuntu 에서 기본 Python 인터프리터가 변경되었기 때문입니다.

이 경고를 표시하지 않으려면 /etc/ansible/hosts 파일에 다음 줄을 추가할 수 있습니다:

[all:vars]
ansible_python_interpreter=/usr/bin/python3

이 줄은 Ansible 에게 모든 호스트에 대해 Python 3 을 명시적으로 사용하도록 지시합니다. 이 줄을 추가한 후 ansible all -m ping 명령을 다시 실행하여 경고가 더 이상 나타나지 않는지 확인할 수 있습니다.

요약

축하합니다! 이 랩에서는 Ubuntu 시스템에 Ansible 을 성공적으로 설치하고 구성했습니다. 다음을 수행하는 방법을 배웠습니다:

  1. Ansible 을 위한 안정적인 환경을 보장하기 위해 시스템 패키지를 업데이트합니다.
  2. 패키지 관리자를 사용하여 Ansible 을 설치합니다.
  3. 안전하고 암호 없는 연결을 위해 SSH 키 기반 인증을 설정합니다.
  4. 관리 호스트를 정의하기 위해 Ansible 인벤토리 파일을 생성하고 구성합니다.
  5. Ansible 연결을 테스트하고 관리 호스트에서 기본 명령을 실행합니다.

이러한 기본적인 단계는 간단한 명령 실행부터 복잡한 구성 관리 및 애플리케이션 배포에 이르기까지 다양한 IT 작업을 자동화하는 데 Ansible 을 사용하는 견고한 시작점을 제공합니다.

이 랩에서는 시연 목적으로 localhost 를 사용했지만, 실제 시나리오에서는 일반적으로 여러 개의 원격 호스트를 관리합니다. 여기서 배운 원칙과 명령은 인프라 전체에서 원격 서버를 관리하는 데 쉽게 적용할 수 있습니다.

Ansible 여정을 계속 진행하면서 시스템 관리 및 DevOps 관행에서 운영을 간소화하고 생산성을 향상시키는 Ansible 의 강력한 기능을 발견하게 될 것입니다. 다음으로, 더 복잡한 작업과 워크플로우를 자동화할 수 있는 Ansible 플레이북 (playbook) 을 살펴보는 것을 고려해 보세요.