Si të instaloni dhe konfiguroni Ansible në Ubuntu 22.04


Ansible është një mjet shumë popullor i menaxhimit të konfigurimit i krijuar për të thjeshtuar procesin e kontrollit të një numri të madh serverësh. Mund të automatizojë procesin e konfigurimit të serverëve të rinj dhe instalimit të aplikacioneve me një komandë ose skedar të vetëm. Ju mund të kontrolloni sa më shumë serverë dhe të ekzekutoni procese në to njëkohësisht nga një nyje e vetme. Ansible nuk kërkon ndonjë softuer të veçantë që kërkohet të instalohet në nyjet e serverit dhe mund t'i kontrollojë ato mbi SSH.

Në këtë udhëzues, ne do të mësojmë se si të instalojmë dhe konfigurojmë Ansible në një server Ubuntu 22.04.

Parakushtet

  • Dy ose më shumë sisteme serveri që ekzekutojnë Ubuntu 22.04 me server OpenSSH të instaluar.
  • Serveri dhe nyjet janë të aksesueshme nëpërmjet adresave IP publike.
  • Një përdorues jo-root me privilegje sudo konfigurohet në serverin Ansible dhe një përdorues rrënjë me një fjalëkalim konfigurohet në klientët Ansible.

Hapi 1 - Instaloni Ansible

Ne do të përdorim depon zyrtare të Ansibles për të instaluar versionin e tij të fundit. Shtoni depon zyrtare të Ansibles në server.

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

Për fat të mirë, Ubuntu dërgohet me Ansible 2.9 që është ajo që ne do të instalojmë. Ekzekutoni komandën e mëposhtme për të instaluar Ansible.

$ sudo apt install ansible -y

Testoni instalimin tuaj duke ekzekutuar komandën e mëposhtme.

$ ansible --version
ansible [core 2.13.3rc1]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/navjot/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  ansible collection location = /home/navjot/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.10.4 (main, Jun 29 2022, 12:14:53) [GCC 11.2.0]
  jinja version = 3.0.3
  libyaml = True

Instaloni dhe aktivizoni paketën python3-argcomplete për të konfiguruar mbështetjen e plotësimit të Ansible bash.

$ sudo apt install python3-argcomplete
$ sudo activate-global-python-argcomplete3

Tani mund të shtypni tastin Tab për të marrë një listë opsionesh për guaskën bash.

Hapi 2 - Vendosja e skedarit të inventarit

Për të qenë në gjendje të lidheni me hoste të shumtë, ju nevojitet një skedar që do të regjistrojë detajet e nyjeve. Ky skedar quhet Skedari i inventarit.

Në varësi të numrit të serverëve që dëshironi të kontrolloni, skedari i Inventarit Ansibles ju lejon gjithashtu t'i rregulloni ato në grupe dhe nëngrupe. Ju gjithashtu mund të vendosni variabla të personalizuara të zbatueshme për të zgjedhur hostet ose grupet që mund të përdoren më tej gjatë përcjelljes së udhëzimeve.

Ansible dërgohet me një skedar inventar të paracaktuar të disponueshëm në /etc/ansible/hosts. Hapeni me redaktorin Nano.

$ sudo nano /etc/ansible/hosts

Ngjitni kodin e mëposhtëm në fund të skedarit.

[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113

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

Seksioni serverët përcakton listën e nyjeve me të cilat dëshironi të lidheni. Mund të krijoni sa më shumë grupe për të rregulluar serverë në grupe të shumta.

Grupi all:vars vendos parametrin ansible_python_interpreter në të gjithë hostet në inventar. Siguron që Ansible përdor Python 3 të ekzekutueshëm në vend të Python 2 i cili është hequr nga versionet e fundit të Ubuntu.

Kur të keni mbaruar, ruajeni skedarin duke shtypur Ctrl + X dhe duke futur Y kur ju kërkohet të konfirmoni ndryshimet tuaja.

Shënim: Mund të krijoni gjithashtu skedarin tuaj të inventarit në çdo vendndodhje sipas zgjedhjes suaj, të cilin më pas mund ta kaloni duke përdorur parametrin -i gjatë ekzekutimit të komandave Ansible.

Ju mund të kontrolloni listën tuaj të inventarit me komandën e mëposhtme.

$ ansible-inventory --list -y
all:
  children:
    servers:
      hosts:
        server1:
          ansible_host: 203.0.113.111
          ansible_python_interpreter: /usr/bin/python3
        server2:
          ansible_host: 203.0.113.112
          ansible_python_interpreter: /usr/bin/python3
        server3:
          ansible_host: 203.0.113.113
          ansible_python_interpreter: /usr/bin/python3
    ungrouped: {}

Organizimi i serverëve në grupe dhe nëngrupe

Ky është një këshillë e dobishme nëse keni shumë serverë me disa serverë që kryejnë funksione specifike. Për shembull, mund ta përdorni këtë metodë për të grupuar serverët e uebit dhe serverët e bazës së të dhënave veç e veç. Ju madje mund të bëni një host pjesë të grupeve të shumta. Për ta arritur këtë, skedari juaj i inventarit duhet të duket diçka si më poshtë.

[webservers]
203.0.113.111
203.0.113.112

[dbservers]
203.0.113.113
server_hostname

[development]
203.0.113.111
203.0.113.113

[production]
203.0.113.112
server_hostname

Hapi 3 - Vendosni çelësat SSH

Që Ansible të mund të lidhet me serverët, duhet të konfiguroni çelësat SSH midis serverit tuaj Ansible dhe hosteve të specifikuar në skedarin e inventarit. Kjo do të funksionojë vetëm nëse klientët Ansible nuk kanë një çelës publik të aktivizuar dhe kanë një llogari rrënjë të aktivizuar me një fjalëkalim.

Përdorni hapat e mëposhtëm për të krijuar dhe konfiguruar një çelës SSH për Ansible dhe nyjet e tij.

Krijo çelësin për Ansible.

$ ssh-keygen -t rsa -b 4096 -C "Ansible key"

Kopjoni çelësin publik në llogaritë tuaja në serverët në distancë. Për këtë, ne do të përdorim komandën ssh-copy-id.

$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub 
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub 
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub 

Kjo eshte e gjitha. Tani Ansible duhet të jetë në gjendje të flasë me serverët tuaj.

Vendosni çelësat SSH në nyje me çelësin publik ekzistues

Nëse klientët tashmë kanë të aktivizuar çelësat publikë, atëherë do t'ju duhet të ndiqni disa hapa shtesë. Për këtë, ju duhet të krijoni një përdorues të ri të aksesueshëm vetëm nga Ansible në çdo server nyje. Ky përdorues do të ketë privilegje sudo të aksesueshme pa një fjalëkalim dhe mund të aksesohet vetëm nga serveri juaj ansible.

Për të krijuar një përdorues ansible, ekzekutoni komandën e mëposhtme.

$ sudo adduser ansible

Zgjidhni një fjalëkalim të fortë dhe lini të gjitha fushat e tjera bosh.

Tani, konfiguroni qasjen sudo pa fjalëkalim te ky përdorues përmes komandës së mëposhtme.

$ echo "ansible ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ansible

Tani, që keni shtuar dhe konfiguruar përdoruesin e ri, mund të kopjoni çelësin SSH nga serveri juaj ansible në serverin e nyjeve duke përdorur komandën e mëposhtme.

$ ssh-copy-id 

Do t'ju kërkohet një fjalëkalim për përdoruesin e duhur. Fusni atë dhe çelësi SSH do të kopjohet.

Më pas, çaktivizoni hyrjen e bazuar në fjalëkalim për përdoruesin ansible në serverin e nyjeve.

$ sudo usermod -L ansible

Tani, serveri juaj i nyjeve është i aksesueshëm vetëm nga serveri Ansible pasi vetëm ai server ka çelësin publik për të dhe ju nuk mund ta përdorni atë me privilegje sudo në serverin e nyjeve drejtpërdrejt pasi identifikimi me fjalëkalim është i çaktivizuar.

Ju do të duhet të përsërisni këto hapa për çdo server nyje. Gjithashtu, zëvendësoni përdoruesin root me përdoruesin ansible në këtë tutorial.

Hapi 4 - Testoni lidhjen

Pas konfigurimit të skedarit të inventarit dhe çelësave SSH, duhet të kontrollojmë nëse Ansible mund të lidhet me serverët.

Shkruani komandën e mëposhtme për të kontrolluar lidhjen. Kjo komandë do të testojë lidhjen me të gjithë serverët nga skedari i inventarit.

$ ansible all -m ping -u root

Kjo komandë përdor modulin ping Ansibles për të ekzekutuar një test lidhjeje në të gjithë serverët. Ju duhet të merrni një dalje si më poshtë.

server1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
server2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
server3 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Nëse kjo është hera e parë që përdorni Ansible, do t'ju kërkohet të konfirmoni vërtetësinë e të gjithë serverëve. Kur të kërkohet, shkruani po dhe shtypni ENTER për të konfirmuar.

Hapi 5 - Ekzekutoni disa komanda bazë

Le të ekzekutojmë disa komanda bazë në serverë duke përdorur Ansible. Për të ekzekutuar ndonjë komandë në server, përdoret formati i mëposhtëm.

$ ansible all -a "command" -u <username>

Kontrolloni përdorimin e diskut

Së pari, le të kontrollojmë përdorimin e diskut në të gjithë serverët tanë.

$ ansible all -a "df -h" -u root
server1 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           198M  972K  197M   1% /run
/dev/sda2        50G  3.9G   44G   9% /
tmpfs           989M     0  989M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           198M  4.0K  198M   1% /run/user/1000

server2 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           198M  922K  197M   1% /run
/dev/sda2        50G  4.9G   43G  10% /
tmpfs           989M     0  989M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           198M  4.0K  198M   1% /run/user/1000

Synoni hostet dhe grupet individuale

Deri më tani, ne ekzekutonim komanda në të gjithë serverët në distancë menjëherë. Por nuk është gjithmonë kështu. Për të ekzekutuar një komandë në vetëm një server, duhet të përdorni formatin e mëposhtëm.

$ ansible server1 -a "uptime" -u root
server1 | CHANGED | rc=0 >>
 21:38:26 up 11 min,  2 users,  load average: 0.00, 0.20, 0.19

Komanda e mësipërme kontrollon kohën e përdorimit në server1 nga grupi i inventarit.

Ju gjithashtu mund të synoni shumë serverë duke përdorur formatin e mëposhtëm.

$ ansible server1:server2 -m ping -u root

Ju gjithashtu mund të synoni grupe ose nëngrupe nga skedari i inventarit drejtpërdrejt.

$ ansible groupname -m ping -u <username>

Përditësoni të gjithë serverët

Për këtë tutorial, ne po supozojmë se të gjithë serverët në distancë po ekzekutojnë Debian ose Ubuntu OS.

Ekzekutoni komandën e mëposhtme për të përditësuar softuerin në të gjithë serverët tuaj.

$ ansible all -m apt -a "update_cache=yes upgrade=yes" -u root

Parametri -m përcakton modulin që Ansible të ekzekutohet. Parametri -a u referohet argumenteve ose komandave për modulin e lidhur. Këtu, ne po përdorim modulin apt të Ansible për të përditësuar serverët ashtu siç kemi përdorur modulin ping në shembullin tonë të fundit. update_cache përditëson cache APT në server dhe upgrade=yes i thotë Ansible të ekzekutojë përmirësimin e apt komandë.

Nëse po përdorni përdoruesin ansible siç është dokumentuar më sipër, duhet të modifikoni komandën ansible për të ekzekutuar me privilegje sudo të ngritura.

$ ansible server2 -m apt -a "update_cache=yes upgrade=yes" -K -b -u ansible

Këtu, -K kërkon një fjalëkalim për përshkallëzimin e privilegjit. -b ekzekuton operacionin ansible me become i cili ju lejon të jeni një përdorues tjetër. Të dyja variablat e kombinuara lejojnë ansible të ekzekutohet me privilegje të ngritura sudo. Ju do të duhet ta përdorni këtë për të gjitha komandat që kërkojnë privilegje sudo.

Ndonjëherë, disa nga këto komanda përditësimi mund të kërkojnë një rindezje, kështu që ekzekutoni komandën e mëposhtme për të rindezur të gjithë serverët tuaj.

$ ansible all -a "reboot" -u root

Këto ishin vetëm disa nga komandat bazë që mund të ekzekutoni duke përdorur Ansible.

Hapi 6 - Hyrje në Playbooks

Komandat e mësipërme ju lejojnë të ekzekutoni detyra një herë, por nëse dëshironi të konfiguroni shumë serverë ose të ekzekutoni të njëjtën sekuencë komandash në shumë serverë, duhet të konfiguroni librat e luajtjes. Librat e lojërave janë skedarë të shkruar në YAML dhe përmbajnë udhëzime për të automatizuar një sekuencë detyrash për konfigurimin e aplikacioneve dhe shërbimeve.

Tani do të krijojmë një libër lojërash për të instaluar Nginx dhe për të vendosur një faqe HTML në nyjen Ansible. Krijoni një direktori për Ansible në direktorinë tuaj kryesore.

$ mkdir ~/ansible

Krijoni dhe hapni skedarin e librit të luajtjes për modifikim.

$ cd ~/ansible
$ nano testplaybook.yml

Librat e lojërave përdorin formatin YAML për të përcaktuar një ose më shumë shfaqje. Një lojë është një grup detyrash të renditura të rregulluara në një mënyrë për të automatizuar një proces. Shfaqjet përcaktohen si një listë YAML.

Hapi i parë për të përcaktuar një lojë është të përcaktoni se cilët host janë objektivi duke përdorur direktivën host: të gjithë. Direktiva beme  përdoret për të treguar se detyrat e mëposhtme duhet të ekzekutohen nga një super përdorues.

Ne do të përcaktojmë tre detyra: një për të shtuar një përdorues, një për të përmirësuar të gjitha paketat dhe e fundit për të instaluar serverin Nginx. Seksioni vars i librit të lojërave përdoret për të përcaktuar variablat e personalizuar. Ne përcaktojmë dy variabla, një për përdoruesin që duhet të shtojmë dhe e dyta për të përcaktuar gjendjen e paketës që duhet të instalojmë. Për të përdorur variablin, duhet të mbyllim emrin e ndryshores midis kllapave të dyfishta kaçurrelë.

Moduli ansible.builtin.user përdoret për të shtuar një përdorues të ri me privilegje sudo. Për të shtuar përdoruesin, ne po përdorim variablat emri, fjalëkalimi dhe grupi. Variabla grup është caktuar në sudo për t'i dhënë lejet e superpërdoruesit përdoruesit. Ju nuk mund ta vendosni fjalëkalimin e tekstit të thjeshtë në skedarin e librit të luajtjes, prandaj, ne do të shtojmë një sekret të hashuar SHA. Ne do të përdorim mjetin mkpasswd për këtë. Për ta instaluar, ekzekutoni komandën e mëposhtme për të instaluar paketën whois.

$ sudo apt install whois

Gjeneroni fjalëkalimin e hash. Do t'ju kërkohet fjalëkalimi i zakonshëm dhe do t'ju jepet një varg hash për të. Shënoni çelësin e hashuar që do të përdoret në skedarin e librit të luajtjes.

$ mkpasswd --method=sha-512
Password:
$6$dGbprm2oVqClDDDh$Epk6r5eXYkYBaQpQpP.H7VCdz0g9Aj0aO8hjy/WXq4WmfQ7GvQP2/cl/cNhd7.LRFuCKix9uCF2t8X5/Pv0Lk1

Direktiva update_cache është për të përditësuar listën e depove të sistemeve ashtu si komanda apt update dhe përmirësimi: dist Direktiva i thotë Ansible të kryejë përmirësimin e sistemit. Detyra e tretë është vetë-shpjeguese e cila instalon versionin më të fundit të serverit Nginx.

Bazuar në informacionin që diskutuam, ngjisni kodin e mëposhtëm në skedar. Ngjitni çelësin hash që keni marrë si vlerë për ndryshoren fjalëkalimi.

---
- name: Test playbook
  hosts: all
  become: true
  vars:
      state: latest
      user: navjot
  tasks:
  - name: Add the user {{ user }}
    ansible.builtin.user:
      name: "{{ user }}"
      password: '$6$dGbprm2oVqClDDDh$Epk6r5eXYkYBaQpQpP.H7VCdz0g9Aj0aO8hjy/WXq4WmfQ7GvQP2/cl/cNhd7.LRFuCKix9uCF2t8X5/Pv0Lk1'
      group: sudo
  - name: Upgrade all apt packages
    apt:
      update_cache: yes
      upgrade: dist
  - name: Install the {{ state }} of package "nginx"
    apt:
      name: "nginx"
      state: "{{ state }}"

Ruani skedarin duke shtypur Ctrl + X dhe duke futur Y kur ju kërkohet të konfirmoni ndryshimet tuaja.

Për të ekzekutuar playbook, ekzekutoni komandën e mëposhtme. Flamuri --ask-become-pass do të kërkojë fjalëkalimin tuaj root për të kryer një operacion të ngritur.

$ ansible-playbook testplaybook.yml --ask-become-pass

Do të merrni daljen e mëposhtme.

BECOME password:

PLAY [Test playbook] ***************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
ok: [server1]
ok: [server2]
ok: [server3]

TASK [Add the user casablanca] *****************************************************************************************
changed: [server3]
changed: [server2]
changed: [server1]

TASK [Upgrade all apt packages] ****************************************************************************************
changed: [server1]
changed: [server2]
changed: [server3]

TASK [Install the latest of package "nginx"] ***************************************************************************
changed: [server3]
changed: [server2]
changed: [server1]

PLAY RECAP *************************************************************************************************************
server1                    : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
server2                    : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
server3                    : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Kjo konfirmon që libri juaj i lojërave u ekzekutua me sukses.

Nëse jeni duke përdorur një skedar të personalizuar të inventarit, duhet të përfshini vendndodhjen e skedarit në komandën si më poshtë.

$ ansible-playbook -i /etc/ansible/custominventory testplaybook.yml --ask-become-pass 

konkluzioni

Kjo përfundon tutorialin tonë për instalimin dhe konfigurimin e Ansible në serverin Ubuntu 22.04. Nëse keni ndonjë pyetje, postojini ato në komentet më poshtë.