Ansible är ett allmänt använt konfigurationshanteringsverktyg skrivet i Python som hjälper till att konfigurera en eller flera maskiner samtidigt. Ansible kan användas för att utföra följande uppgifter
Ansible används ofta på grund av sin enkelhet. Ansible-koden är skriven i YAML-språket och behöver inte heller någon agent som installeras på en fjärrmaskin. Ansible använder port 22 (SSH) för att ansluta till en fjärrmaskin och göra de nödvändiga ändringarna.
Alla maskiner som kan ansluta till fjärrmaskinen via port 22 kan bli en kontrollerande nod. En kontrollerande nod är där du kan installera Ansible och en hanterad nod hanteras av kontrollerande noder.
Låt oss ta en titt på installationen av Ansible på den kontrollerande noden.
Installera Ansible på CentOS 7:
Då Python är den enda förutsättningen för att installera Ansible, låt oss installera Python genom att utföra nedanstående kommando.
$sudo yum install python3 -y
För att installera Ansible på CentOS 7, se först till att CentOS 7 EPEL repository är installerat. Utför nedanstående kommando för att installera epel-förrådet.
$sudo yum install epel-release
Uppdatera systemets paketindex genom att utföra nedanstående uppdateringskommando.
$sudo yum update -y
När förrådet är installerat installerar du Ansible med yum package manager. Utför nedanstående kommando för att installera Ansible.
$sudo yum install ansible -y
Kontrollera om Ansible är korrekt installerat och vilken version det är.
$ansible -v
Installera Ansible på CentOS 8:
Låt oss titta på installationsstegen för CentOS 8. Låt oss installera python på CentOS 8.
$sudo dnf install python3
När python är installerad, låt oss installera EPEL repo genom att utföra nedanstående kommando.
$sudo dnf install epel-release -y
Uppdatera systemets paketindex genom att utföra nedanstående uppdateringskommando.
$sudo dnf update -y
Vi är nu redo att installera Ansible. Utför nedanstående kommando för att installera Ansible.
$sudo dnf install ansible -y
Kontrollera om Ansible är korrekt installerat och vilken version det är.
$ansible -v
Installera Ansible på Ubuntu:
Python är numera ett standardpaket i de flesta Linuxdistributioner. Om du inte har python installerat utför du kommandot nedan för att installera pythonpaketet.
$sudo apt-get install python3
För att installera Ansible i Ubuntu ska vi först installera arkivet genom att utföra kommandot nedan.
$sudo apt-add-repository ppa:ansible/ansible
Uppdatera systemets paketindex genom att utföra nedanstående uppdateringskommando.
$sudo apt-get update -y
Installera nu Ansible.
$sudo apt-get install -y ansible
Kontrollera om Ansible har installerats korrekt och vilken version det är.
$ansible -v
Installera Ansible med Python PIP på CentOS, Debian och Ubuntu:
Oavsett vilket operativsystem du använder kan du installera Ansible med Python-paketinstallationsprogrammet. Låt oss utföra nedanstående kommando för att installera python3-pip.
För CentOS 7 och lägre:
$sudo yum install python3 python3-pip -y
För CentOS 8:
$sudo dnf install python3 python3-pip -y
För Ubuntu och Debian:
$sudo apt-get install python3 python3-pip
Som vi har python och pip installerat, låt oss utföra nedanstående kommando på alla operativsystem för att installera Ansible.
$sudo pip3 install ansible
Kontrollera om Ansible är korrekt installerat och vilken version det är.
$ansible -v
Konfigurera Ansible Controller Hosts:
Vi måste först konfigurera filen ”hosts” innan vi kan börja kommunicera med våra andra noder. Den här filen kommer att innehålla alla IP- eller värdnamn för de hanterade noderna.
Notera: Det är inte alltid nödvändigt att använda en hosts-fil för att ansluta till hanterade noder. Men då måste vi varje gång använda IP- eller värdnamn på den hanterade nodens server när vi utför varje kommando.
Skapa filen (om den inte redan finns där) med root-privilegier genom att utföra nedanstående kommando:
$sudo touch /etc/ansible/hosts
För att skriva till filen ska vi titta på och förstå exemplet på en hosts-fil:
alias ansible_ssh_host=your_node_server_ip
En hosts-fil ska följa syntaxen ovan. Låt oss ta en titt på varje parameter.
: Den här parametern kommer att skapa en grupp. Alla IP-adresser eller värdnamn för hanterade noder under parametern group_name kommer att ingå i samma grupp. Om vi till exempel har flera webbservrar i vår infrastruktur kan vi lägga till alla IP-adresser eller värdnamn för den hanterade noden här.
alias: Den här parametern används för att ge servern för den hanterade noden ett alias för att identifiera servern för den hanterade noden. Om vi till exempel har flera webbservrar i vår infrastruktur kan vi ange host1, host2, host3 som alias. Den största fördelen med att ge alias är att när vi utför Ansible-kommandot för att ändra konfigurationen för en enskild server kan vi använda ett alias för att identifiera och utföra den nödvändiga uppgiften på servern.
ansible_ssh_host=your_node_server_ip: Den här parametern pekar aliaset till en IP-adress eller ett värdnamn för en hanterad nod.
Vi kommer att använda CentOS 8 som en kontrollerad nod med Ansible. Som nämnts ovan använder Ansible 22-porten för fjärrvärddatorn för att ansluta.
Vi kommer att anta att våra CentOS-servrar för hanterade noder har IP-adresserna 192.168.0.2, 192.168.0.3 och 192.168.0.4.
För att Ansible-kontrollernoden ska kunna kommunicera med hanterade noder måste vi bekräfta att hanterade noder är åtkomliga på port 22 som är en SSH-port. Utför nedanstående kommando för att bekräfta anslutningen en efter en på alla tre hanterade noder från kontrollern.
$ssh [email protected]
$ssh [email protected]
$ssh [email protected]
Du kommer att uppmanas att ange lösenordet för rotanvändaren för alla noder. Ansible fungerar mycket smidigt om du har lösenordslös autentisering konfigurerad mellan Ansible-kontrollern och de hanterade noderna. Med olika parametrar i Ansible-kommandot kan lösenordsautentisering också fungera.
När vi har konfigurerat ssh-anslutning mellan Ansible-kontrollanten och de hanterade noderna, låt oss konfigurera hosts-filen för att ansluta till alla hanterade noder. Som tidigare nämnts kan vi lägga till flera node serveralias i en enda grupp. I det här fallet lägger vi till alla tre noderna och tilldelar ett alias som host1, host2 respektive host3. Vår hosts-fil bör se ut som nedan efter att vi har lagt till alla detaljer för de hanterade noderna. Utför nedanstående kommando för att redigera värdfilen som vi skapade tidigare.
Öppna filen med root-privilegier genom att utföra nedanstående kommando:
$sudo vi /etc/ansible/hosts
Låt oss lägga till nedanstående konfiguration i hosts-filen.
host1 ansible_ssh_host=192.168.0.2
host2 ansible_ssh_host=192.168.0.3
host3 ansible_ssh_host=192.168.0.4
Här har vi lagt till alla IP-adresser och alias för de hanterade noderna i en grupp som heter node_servers.
Vi försöker nu ansluta till hanterade noder från Ansible-kontrollen.
$ansible -m ping node_servers
Ovanstående kommando använder modulen ping för att ansluta till gruppen ”node_servers” som vi definierade i hosts-filen ovan.
Du kan stöta på fel av olika anledningar.
- Ansible försöker som standard ansluta till den hanterade noden med ditt nuvarande användarnamn om du inte angett något. Om den användaren inte finns på nodservern får du nedanstående fel.
- Om ssh-port 22 inte är öppen för anslutning på hanterade noder. (Som tidigare nämnts ansluter Ansible på ssh-porten)
- Om IP-adressen i hosts-filen inte är korrekt.
Om något av ovanstående villkor misslyckas får du nedanstående fel.
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
}
Låt oss specifikt tala om för Ansible att den ska ansluta till hanterade noder i gruppen ”node_servers” med användaren james. Skapa katalogen group_vars enligt nedan.
$sudo mkdir /etc/ansible/group_vars
Filerna i den här katalogen används specifikt för att konfigurera variabler som vi kan använda i våra Ansible playbooks.
Låt oss skapa en variabelfil för vår uppsättning genom att utföra nedanstående kommando:
$sudo vim /etc/ansible/group_vars/node_servers.yml
Lägg till nedanstående kod till filen:
---
ansible_ssh_user: james
YML-fil börjar alltid med ”—” på den första raden. Låt oss spara och stänga filen när du är klar. Nu kommer Ansible alltid att använda användaren james för gruppen node_servers, oavsett vilken aktuell användare du använder för att köra ett kommando.
Kontrollera den hanterade nodens anslutning:
Nu när vi har våra värdar konfigurerade och tillräckligt med konfigurationsdetaljer för att framgångsrikt kunna ansluta till våra hanterade noder kan vi prova samma kommando som vi körde tidigare.
$ansible -m ping servers
Ansible kommer att returnera en utdata som denna:
host1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host3 | SUCCESS => { ”changed”: false, ”ping”: ”
Detta är ett grundläggande test för att se till att Ansible har en anslutning till sina hanterade noder.
Slutsats:
Det är inte nödvändigt att använda operativsystemet CentOS för hanterade noder. Du kan använda samma testkonfiguration som vi har använt ovan för CentOS, RedHat, Ubuntu och alla andra Linuxdistributioner.