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ë.