댓글 검색 목록

[기타] Ansible로 소프트웨어를 설치하는 방법

페이지 정보

작성자 운영자 작성일 20-09-22 18:04 조회 758 댓글 0

Ansible 플레이 북을 사용하여 장치 전체에서 소프트웨어 설치 및 업데이트를 자동화하십시오.


https://opensource.com/article/20/9/install-packages-ansible 


Ansible은 시스템 관리자와 개발자가 컴퓨터 시스템을 최상의 상태로 유지하기 위해 사용하는 인기 있는 자동화 도구입니다. 

확장 가능한 프레임 워크의 경우와 같이 Ansible은 자체적으로 제한적으로 사용되며 많은 모듈에 실제 성능이 있습니다. 

Ansible 모듈은 어떤 면에서 Linux 컴퓨터에 대한 명령입니다. 특정 문제에 대한 솔루션을 제공하며 컴퓨터를 유지 관리 할 때 일반적인 작업 중 하나는 사용하는 모든 항목을 업데이트하고 일관성 있게 유지하는 것입니다.


나는 시스템의 동기화를 어느 정도 유지하기 위해 패키지의 텍스트 목록을 사용했습니다. 랩톱에 설치된 패키지를 나열한 다음 이를 데스크탑과 상호 참조하거나 한 서버와 다른 서버간에 상호 참조하여 수동으로 차이. 물론 Linux 시스템에 애플리케이션을 설치하고 유지 관리하는 것은 Ansible의 기본 작업이며 관리하는 모든 컴퓨터에서 원하는 항목을 나열 할 수 있음을 의미합니다.


적합한 Ansible 모듈 찾기 


Ansible 모듈의 수는 압도적일 수 있습니다. 주어진 작업에 필요한 것을 어떻게 찾습니까? Linux에서는 애플리케이션 메뉴 또는 /usr/bin에서 실행할 새 애플리케이션을 찾을 수 있습니다. Ansible을 사용하는 경우 Ansible 모듈 인덱스를 참조합니다.


색인은 주로 카테고리별로 나열됩니다. 약간의 검색만으로 필요한 모든 모듈을 찾을 수 있습니다. 패키지 관리를 위해 패키지 모듈 섹션에는 패키지 관리자가 있는 거의 모든 시스템에 대한 모듈이 포함되어 있습니다.


Ansible 플레이 북 작성 


시작하려면 로컬 컴퓨터에서 패키지 관리자를 선택하십시오. 예를 들어 Fedora를 실행하는 랩톱에서 Ansible 지침 (Ansible에서 호출되는 "플레이 북")을 작성하려면 dnf 모듈로 ​​시작합니다. Elementary OS에서 작성하는 경우 apt 모듈 등을 사용하십시오. 이렇게 하면 이동하면서 테스트하고 확인할 수 있는 항목으로 시작하고 나중에 다른 컴퓨터에 대한 작업을 확장 할 수 있습니다.


첫 번째 단계는 플레이 북을 나타내는 디렉토리를 만드는 것입니다. 이것은 반드시 필요한 것은 아니지만 습관을 확립하는 것이 좋습니다. Ansible은 YAML로 작성된 구성 파일만으로 실행할 수 있지만 나중에 플레이 북을 확장하려는 경우 디렉터리 및 파일을 레이아웃 하는 방법으로 Ansible을 제어 할 수 있습니다. 지금은 install_packages 또는 이와 유사한 디렉토리를 만드십시오.


mkdir ~/install_packages 


Ansible 플레이 북으로 사용되는 파일의 이름은 원하는 대로 지정할 수 있지만 일반적으로 site.yml이라는 이름을 지정합니다.


touch ~/install_packages/site.yml 


좋아하는 텍스트 편집기에서 site.yml을 열고 다음을 추가합니다.


---
- hosts
localhost
  tasks
:
    - name
install packages
      become
true
      become_user
root
      dnf
:
        state
present
        name
:
         - tcsh
         - htop 



사용 중인 배포와 일치하도록 사용하는 모듈 이름을 조정해야 합니다. 이 예에서는 Fedora Linux에서 플레이 북을 작성했기 때문에 dnf를 사용했습니다.


Linux 터미널의 명령과 마찬가지로 Ansible 모듈을 호출하는 방법을 아는 것은 전투의 절반입니다. 이 플레이 북 예제는 표준 플레이 북 형식을 따릅니다.

  • hosts 컴퓨터를 대상으로 합니다. 이 경우 대상 컴퓨터는 현재 사용 중인 컴퓨터 인 localhost입니다 (Ansible을 연결하려는 원격 시스템과 반대).
  • tasks 호스트에서 수행 할 작업 목록을 엽니다.
    -, name 작업에 대한 인간 친화적인 제목입니다. 이 경우 이 작업이 수행하는 작업이므로 설치 패키지를 사용하고 있습니다.
    -, become Ansible은 이 작업을 실행하는 사용자를 변경할 수 있습니다.
    -, become_user Ansible이 이 작업을 실행하기 위해 루트 사용자가 되도록 허용합니다. 이는 루트 사용자 만 dnf를 사용하여 새 응용 프로그램을 설치할 수 있기 때문에 필요합니다.
    -, dnf Ansible 웹 사이트의 모듈 인덱스에서 발견 한 모듈의 이름입니다.


dnf 항목 아래의 항목은 dnf 모듈에 고유합니다. 모듈 문서가 필수적인 곳입니다. Linux 명령의 man 페이지와 마찬가지로 모듈 문서는 사용 가능한 옵션과 필요한 인수의 종류를 알려줍니다.


Ansible documentation 


패키지 설치는 비교적 간단한 작업이며 두 가지 요소 만 필요합니다. state 옵션은 Ansible에 시스템에 일부 패키지가 있는지 여부를 확인하도록 지시하고 name 옵션은 찾을 패키지를 나열합니다. Ansible은 머신 상태를 처리하므로 모듈 명령어는 항상 변경을 의미합니다. Ansible이 시스템을 스캔하고 플레이 북이 시스템을 설명하는 방식 (이 경우 tcsh 및 htop 명령이 존재 함)과 시스템 상태가 실제로 무엇인지 (이 예에서는 tcsh 및 htop이 존재하지 않음)간에 충돌을 발견해야 합니다. Ansible의 임무는 시스템이 플레이 북과 일치하는 데 필요한 모든 사항을 변경하는 것입니다. Ansible은 dnf (또는 apt 또는 패키지 관리자가 무엇이든 간에) 모듈로 인해 이러한 변경을 수행 할 수 있습니다.


각 모듈에는 다른 옵션 세트가 있을 수 있으므로 플레이 북을 작성할 때 모듈 문서를 자주 참조하십시오. 모듈에 매우 익숙해지기 전까지는 모듈이 필요한 작업을 수행하기를 기대할 수 있는 유일한 합리적인 방법입니다.


YAML 확인 


플레이 북은 YAML로 작성됩니다. YAML은 엄격한 구문을 따르기 때문에 yamllint 명령을 설치하여 작업을 확인 (또는 컴퓨터 용어로 "lint")하는 것이 좋습니다. 더 좋은 점은 플레이 북을 위해 특별히 생성 된 ansible-lint라는 Ansible 전용 린터가 있다는 것입니다. 계속하기 전에 이를 설치하십시오.


Fedora 또는 CentOS : 


sudo dnf install yamllint python3-ansible-lint 


Debian, Elementary, Ubuntu 또는 유사 : 


sudo apt install yamllint ansible-lint 


ansible-lint로 플레이 북을 확인합니다. ansible-lint에 액세스 할 수 없는 경우 yamllint를 사용할 수 있습니다.


ansible-lint ~/install_packages/site.yml 


성공하면 아무 것도 반환 되지 않지만 파일에 오류가 있으면 계속하기 전에 오류를 수정해야 합니다. 복사 및 붙여 넣기에서 발생하는 일반적인 오류에는 마지막 줄 끝에서 줄 바꿈 문자를 생략하고 들여 쓰기에 공백 대신 탭을 사용하는 것이 포함됩니다. 텍스트 편집기에서 수정하고 linter를 다시 실행 한 다음 ansible-lint 또는 yamllint로부터 피드백을 받지 못할 때까지 이 프로세스를 반복합니다.


Ansible로 애플리케이션 설치 


이제 검증 가능한 플레이 북이 있으므로 마침내 로컬 컴퓨터에서 실행할 수 있습니다. 플레이 북에 정의 된 작업에 루트 권한이 필요하다는 것을 알고 있기 때문에 Ansible을 호출 할 때 --ask-become-pass 옵션을 사용해야 하므로 관리 암호를 입력하라는 메시지가 표시됩니다.


설치 시작 :


$ ansible-playbook --ask-become-pass ~/install_packages/site.yml
BECOME password:
PLAY [localhost] ******************************

TASK [Gathering Facts] ******************************
ok: [localhost]

TASK [install packages] ******************************
ok: [localhost]

PLAY RECAP ******************************
localhost: ok=0 changed=2 unreachable=0 failed=0 [...] 


명령이 설치되어 대상 시스템이 플레이 북에 설명 된 것과 동일한 상태로 유지됩니다.


원격 시스템에 애플리케이션 설치 


이 모든 과정을 거쳐 하나의 간단한 명령을 대체하는 것은 비생산적이지만 Ansible의 장점은 모든 시스템에서 자동화 할 수 있다는 것입니다. 조건문을 사용하여 Ansible이 다른 시스템에서 특정 모듈을 사용하도록 할 수 있지만 지금은 모든 컴퓨터가 동일한 패키지 관리자를 사용한다고 가정합니다.


원격 시스템에 연결하려면 /etc/ansible/hosts 파일에서 원격 시스템을 정의해야 합니다. 이 파일은 Ansible과 함께 설치되었으므로 이미 존재하지만 설명 주석을 제외하고는 비어있을 수 있습니다. sudo를 사용하여 선호하는 텍스트 편집기에서 파일을 엽니다.


호스트 이름을 확인할 수 있는 한 IP 주소 또는 호스트 이름으로 호스트를 정의 할 수 있습니다. 예를 들어, 이미 / etc / hosts에 liavara를 정의하고 성공적으로 ping 할 수 있다면 liavara를 / etc / ansible / hosts에서 호스트로 설정할 수 있습니다. 또는 도메인 이름 서버 또는 Avahi 서버를 실행 중이고 liavara를 ping 할 수 있는 경우 / etc / ansible / hosts에서 호스트로 설정할 수 있습니다. 그렇지 않으면 인터넷 프로토콜 주소를 사용해야 합니다.


또한 대상 호스트에 대한 SSH (보안 셸) 연결을 성공적으로 설정해야 합니다. 가장 쉬운 방법은 ssh-copy-id 명령을 사용하는 것입니다.하지만 이전에 호스트와 SSH 연결을 설정 한 적이 없다면 자동화 된 SSH 연결을 만드는 방법에 대한 제 기사를 읽어보세요.


/etc/ansible/hosts 파일에 호스트 이름 또는 IP 주소를 입력했으면 플레이 북에서 호스트 정의를 변경합니다.


---
- hosts
all
  tasks
:
    - name
install packages
      become
true
      become_user
root
      dnf
:
        state
present
        name
:
         - tcsh
         - htop 


ansible-playbook을 다시 실행합니다.


ansible-playbook --ask-become-pass ~/install_packages/site.yml 


이번에는 플레이 북이 원격 시스템에서 실행됩니다.


더 많은 호스트를 추가하는 경우 어떤 호스트가 어떤 작업을 수행하는지 필터링 하는 여러 가지 방법이 있습니다. 예를 들어 호스트 그룹 (서버용 웹 서버, 데스크톱 컴퓨터 용 워크 스테이션 등)을 만들 수 있습니다.


혼합 환경을 위한 Ansible 


지금까지 솔루션에 사용 된 로직은 Ansible에서 구성하는 모든 호스트가 동일한 OS (특히 패키지 관리를 위해 dnf 명령을 사용하는 OS)를 실행한다고 가정합니다. 그렇다면 Ubuntu (apt 사용) 또는 Arch (pacman 사용)와 같은 다른 배포를 실행하는 호스트 또는 다른 운영 체제를 관리하는 경우 어떻게 해야 합니까?


대상 OS에 패키지 관리자가 있는 한 (요즘 MacOS에도 Homebrew가 있고 Windows에는 Chocolatey가 있음) Ansible이 도움을 줄 수 있습니다.


이것이 Ansible의 장점이 가장 두드러지는 부분입니다. 셸 스크립트에서는 대상 호스트에서 사용할 수있는 패키지 관리자를 확인해야 하며 순수 Python을 사용하더라도 OS를 확인해야 합니다. Ansible에는 이러한 검사가 내장되어 있을 뿐만 아니라 플레이 북에서 결과를 사용하는 메커니즘도 있습니다. dnf 모듈을 사용하는 대신 action 키워드를 사용하여 Ansible의 팩트 수집 하위 시스템에서 제공하는 변수로 정의 된 작업을 수행 할 수 있습니다.

---
- hosts
all
  tasks
:
    - name
install packages
      become
true
      become_user
root
      action
: >
       {{ ansible_pkg_mgr }} name=htop,transmission state=present update_cache=yes 


action 키워드는 작업 플러그인을로드합니다. 이 예제에서는 초기 Gathering Facts 작업 중에 Ansible에 의해 채워지는 ansible_pkg_mgr 변수를 사용합니다. 실행 중인 OS에 대한 정보를 수집하도록 Ansible에 지시 할 필요가 없으므로 간과하기 쉽지만 플레이 북을 실행하면 기본 출력에 나열됩니다.


TASK [Gathering Facts] *****************************************
ok: [localhost] 


작업 플러그인은 이 프로브의 정보를 사용하여 ansible_pkg_mgr을 관련 패키지 관리자 명령으로 채우고 name 인수 뒤에 나열된 패키지를 설치합니다. 8 줄의 코드를 사용하면 다른 스크립팅 옵션이 허용하지 않는 복잡한 교차 플랫폼 문제를 극복 할 수 있습니다.


Ansible 사용 


21 세기는 우리 모두가 우리의 컴퓨팅 장치가 연결되고 상대적으로 일관성이 있기를 기대합니다. 두 대 또는 200 대의 컴퓨터를 유지 관리하든 동일한 유지 관리 작업을 반복해서 수행 할 필요가 없습니다. Ansible을 사용하여 컴퓨터를 동기화 한 다음 Ansible이 당신을 위해 무엇을 할 수 있는지 확인하십시오.



댓글목록 0

등록된 댓글이 없습니다.

웹학교 로고

온라인 코딩학교

코리아뉴스 2001 - , All right reserved.