GNU/Linux >> Linux Esercitazione >  >> Linux

Configurazione automatizzata di Ansible Lab con Vagrant e Virtualbox in Linux

Abile è una piattaforma di automazione utilizzata nell'area dell'orchestrazione, della gestione della configurazione, delle implementazioni, del provisioning, ecc. Se sei un principiante che vuole imparare ansible o qualcuno che intende prendere la certificazione ansible, allora devi disporre di una configurazione di laboratorio a casa per esercitarti in ansible . L'impostazione manuale di un laboratorio domestico è un'attività che richiede tempo. Esistono un paio di soluzioni automatizzate come Docker , Vagabondo , Soluzioni cloud che possono essere utilizzate per costruire il laboratorio ansible. In questa guida impareremo un modo automatico per configurare Ansible lab con Vagrant e VirtualBox in Linux.

Vagrant è uno strumento eccellente per configurare rapidamente il tuo ambiente di sviluppo. Se non conosci il vagabondo, ti suggerisco di dare un'occhiata alla nostra introduzione alla guida di Vagrant.

  • Tutorial Vagrant - Iniziare con Vagrant in Linux

Ai fini di questa guida, utilizzeremo Vagrant con VirtualBox come provider per creare il nostro laboratorio ansible. Puoi anche usare KVM invece di VirtualBox. Se desideri utilizzare KVM come provider, fai riferimento al seguente articolo su come utilizzare Vagrant con KVM.

  • Come utilizzare Vagrant con il provider KVM Libvirt

Impostazione di Ansible Lab

Come prerequisito, devi avere Vagrant e Virtualbox installati sulla tua macchina Linux. Se non hai ancora installato Vagrant, fai riferimento alla seguente guida per installare Vagrant su diverse distribuzioni Linux.

  • Come installare Vagrant su Linux

Costruiremo una configurazione di laboratorio ansible a tre nodi. Un nodo fungerà da nodo master/controller e due nodi fungeranno da nodi gestiti. A scopo dimostrativo, sto usando ubuntu/focal64 casella vagabondo.

Ecco i dettagli della configurazione del mio laboratorio Ansible.

TIPO DI NODO NOME DEL NODO INDIRIZZO IP OS FLAVOUR
Nodo di controllo controller.anslab.com 192.168.10.3 ubuntu/focal64
Nodo gestito managed1.anslab.com 192.168.10.4 ubuntu/focal64
Nodo gestito managed2.anslab.com 192.168.10.5 ubuntu/focal64

Qui sto configurando solo tre nodi per il mio lab, ma puoi aggiungere tutti i nodi gestiti che desideri quando configuri il tuo lab.

Clone del repository del progetto

Ho ospitato tutti i file necessari per configurare Ansible Lab nel mio repository GitHub. Esegui il comando seguente per clonare il repository in locale.

$ git clone --recursive https://github.com/KarthickSudhakar/Ansible_lab_vagrant_virtualbox.git

Navighiamo all'interno della directory del progetto per vedere quali file sono presenti.

Lascia che ti dia una breve introduzione a ciascun file.

1. Vagrantfile

Tutte le configurazioni relative alla VM sono archiviate in questo file. Ecco il contenuto di questo file.

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  
  config.vm.provider "virtualbox" do |rs|
    rs.memory = 2048
    rs.cpus = 2
  end

  # Will not check for box updates during every startup.
  config.vm.box_check_update = false


  # Master node where ansible will be installed
  config.vm.define "controller" do |controller|
    controller.vm.box = "ubuntu/focal64"
    controller.vm.hostname = "controller.anslab.com"
    controller.vm.network "private_network", ip: "192.168.10.3"
    controller.vm.provision "shell", path: "bootstrap.sh"
    controller.vm.provision "file", source: "key_gen.sh", destination: "/home/vagrant/"
  end

  # Managed node 1.
  config.vm.define "m1" do |m1|
    m1.vm.box = "ubuntu/focal64"
    m1.vm.hostname = "managed1.anslab.com"
    m1.vm.network "private_network", ip: "192.168.10.4"
    m1.vm.provision "shell", path: "bootstrap.sh"
  end

  # Managed node 2.
  config.vm.define "m2" do |m2|
    m2.vm.box = "ubuntu/focal64"
    m2.vm.hostname = "managed2.anslab.com"
    m2.vm.network "private_network", ip: "192.168.10.5"
    m2.vm.provision "shell", path: "bootstrap.sh"
  end

end

2. bootstrap.sh

Questo è uno script di shell che è responsabile della configurazione di ansible nel nodo controller, dell'installazione dei pacchetti, della modifica delle configurazioni del sistema.

Il contenuto di questo file è riportato di seguito:

#!/usr/bin/env bash

# vagrant by default creates its own keypair for all the machines. Password based authentication will be disabled by default and enabling it so password based auth can be done.

sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd

# Supressing the banner message everytime you connect to the vagrant box.

touch /home/vagrant/.hushlogin

# Updating the hosts file for all the 3 nodes with the IP given in vagrantfile

# 192.168.10.3 controller.ansible.com controller
# 192.168.10.4 managed1.ansible.com managed1
# 192.168.10.5 managed2.ansible.com managed2

echo -e "192.168.10.3 controller.anslab.com controller\n192.168.10.4 managed1.anslab.com managed1\n192.168.10.5 managed2.anslab.com managed2" >> /etc/hosts

# Installing necessary packages 

sudo apt update && sudo apt -y install curl wget net-tools iputils-ping python3-pip sshpass

# Install ansible using pip only in controller node

if [[ $(hostname) = "controller" ]]; then
  sudo pip3 install ansible
fi

3. key_gen.sh

Questo script deve essere attivato manualmente una volta completata la compilazione di tutte e tre le macchine virtuali. Questo script si occuperà di generare una coppia di chiavi ssh, distribuendola su tutti e tre i nodi. Verrà inoltre eseguito un comando ad-hoc di esempio ansible per la convalida.

Il contenuto di questo file è riportato di seguito:

#!/usr/bin/env bash

# THIS SCRIPT WILL CREATE SSH KEYPAIR AND DISTRIBUTE ACROSS ALL NODES

ssh-keygen -b 2048 -t rsa -f /home/vagrant/.ssh/id_rsa -q -N ""

# LOOPING THROUGH AND DISTRIBUTING THE KEY

for val in controller managed1 managed2; do 
	echo "-------------------- COPYING KEY TO ${val^^} NODE ------------------------------"
	sshpass -p 'vagrant' ssh-copy-id -o "StrictHostKeyChecking=no" [email protected]$val 
done

# CREATE THE INVENTORY FILE

PROJECT_DIRECTORY="/home/vagrant/ansible_project/"

mkdir -p $PROJECT_DIRECTORY
cd $PROJECT_DIRECTORY

# Creating the inventory file for all 3 nodes to run some adhoc command.

echo -e "controller\n\n[ubuntu1]\nmanaged1\n\n[ubuntu2]\nmanaged2" > inventory
echo -e "[defaults]\ninventory = inventory" > ansible.cfg
echo -e "-------------------- RUNNING ANSBILE ADHOC COMMAND - UPTIME ------------------------------"
echo

# running adhoc command to see if everything is fine

ansible all -i inventory -m "shell" -a "uptime"
echo

Tutti questi tre file sono ospitati nel mio repository GitHub. Sentiti libero di contribuire e migliorarlo.

Comprendere la configurazione di Vagrantfile

Prima di creare Ansible lab, devi comprendere le configurazioni all'interno di Vagrantfile e gli script della shell.

1. Allocazione di memoria e Vcore

Per tutte e tre le caselle vaganti, dobbiamo impostare la memoria e il valore della CPU. Qui la memoria è impostata su 2 GB e la CPU è impostata su 2 . Se desideri aumentare o diminuire il limite, regola semplicemente i parametri evidenziati nel Vagrantfile.

2. Sapore del sistema operativo

Tutti e tre i nodi (controller e gestiti) utilizzano l'immagine LTS di Ubuntu 20.04. Quindi, quando esegui il "vagrant up " command vagrant cercherà il parametro seguente e proverà a estrarre l'immagine se non è disponibile localmente.

3. Impostazioni di rete

Per impostazione predefinita, il vagabondo utilizza NAT nella prima interfaccia (adattatore 1). Vagrant utilizza il port forwarding su NAT per connettersi alla macchina virtuale. Qui stiamo impostando il nome host e gli indirizzi IP statici per tutte e tre le VM sulla rete privata.

Verrà creata un'interfaccia separata (Adapter2) a cui verrà assegnato l'indirizzo IP statico. Le VM che fanno parte della rete privata possono comunicare tra loro.

Nell'ambiente multi-VM, il vagabondo risolverà automaticamente la collisione della porta.

==> m2: Fixed port collision for 22 => 2222. Now on port 2201.
==> m2: Clearing any previously set network interfaces...
==> m2: Preparing network interfaces based on configuration...
    m2: Adapter 1: nat
    m2: Adapter 2: hostonly
==> m2: Forwarding ports...
    m2: 22 (guest) => 2201 (host) (adapter 1)
==> m2: Running 'pre-boot' VM customizations...
==> m2: Booting VM...
==> m2: Waiting for machine to boot. This may take a few minutes...
    m2: SSH address: 127.0.0.1:2201

4. Nome utente e comunicazione SSH

C'è un utente predefinito chiamato "vagabondo" con password "vagabondo". L'utente Vagrant ha il privilegio sudo senza password configurato nella macchina virtuale per impostazione predefinita.

Per impostazione predefinita, l'autenticazione basata su password è disabilitata per la macchina virtuale. Vagrant creerà una coppia di chiavi ssh e utilizzerà la chiave privata per connettersi alla macchina virtuale quando esegui "vagrant ssh " comando.

$ vagrant ssh controller
$ vagrant ssh m1
$ vagrant ssh m2

L'autenticazione basata su password è abilitata tramite bootstrap.sh file in modo da poterti connettere al nodo utilizzando l'indirizzo IP e l'autenticazione basata su password anziché l'autenticazione basata su chiave.

5. Script Bootstrap

Lo script bootstrap.sh è responsabile di

  • Abilitazione dell'autenticazione basata su password.
  • Crea un .huhlogin per eliminare il messaggio banner predefinito.
  • Aggiungi le voci dell'host nel /etc/hosts file per tutti e tre i nodi.
  • Installazione dei pacchetti richiesti.
  • Installazione di ansible tramite python package manager(pip) solo sul nodo controller.

Sto usando il provisioner della shell, dove bootstrap.sh verrà copiato in /tmp/ posizione in tutte e tre le VM e lo script verrà eseguito con il privilegio di root.

Avviso: Se stai creando un lab basato su RHEL, dovresti modificare il comando di installazione del pacchetto da bootstrap.sh file secondo dnf o rpm . Resto tutto sarà simile in tutte le distribuzioni.

6. Genera coppia di chiavi

Ansible utilizza la coppia di chiavi SSH per comunicare con i nodi gestiti ed eseguire l'attività. Le nuove chiavi dovrebbero essere generate dal nodo controller e condivise con tutti i nodi gestiti in modo che ansible possa comunicare con i nodi gestiti senza richiedere password ogni volta.

Lo script key_gen.sh si occuperà di creare chiavi ssh e distribuire le chiavi a tutti i nodi. Lo script creerà anche una directory di progetto con ansible.cfg file e file di inventario. Il ad hoc il comando verrà attivato come parte dello script per convalidare la connettività.

Avviso: Questo script deve essere attivato manualmente dal nodo controller una volta eseguito il provisioning di tutte e tre le VM.

Crea configurazione di Ansible Lab

Vai alla directory del progetto ed esegui il comando "vagrant up" e il resto sarà curato dallo script vagrant e bootstrap.

$ cd Ansible_lab_vagrant_virtualbox
$ vagrant up

Risultato di esempio:

Bringing machine 'controller' up with 'virtualbox' provider…
Bringing machine 'm1' up with 'virtualbox' provider…
Bringing machine 'm2' up with 'virtualbox' provider…
………

Script post-installazione

Una volta eseguito il provisioning di tutte e tre le VM, accedi al nodo controller per eseguire /home/vagrant/key_gen.sh per creare coppie di chiavi ssh e convalidare eseguendo un comando ad-hoc ansible.

$ vagrant ssh controller
$ cd /home/vagrant/
$ bash key_gen.sh

Comandi Vagrant per gestire VM

I seguenti comandi ti aiuteranno a mantenere il ciclo di vita delle macchine vagabonde.

Per iniziare a costruire le macchine virtuali, esegui il seguente comando dalla directory in cui si trova il file vagrant.

$ vagrant up

Se vuoi portare in alto un solo nodo, puoi aggiungere il nome host a "vagrant up " comando.

$ vagrant up controller

Per controllare lo stato della macchina, esegui il comando seguente.

$ vagrant status
Current machine states:

controller running (virtualbox)
m1 running (virtualbox)
m2 running (virtualbox)

Puoi anche usare il comando seguente che fornirà maggiori informazioni sulla VM.

$ vagrant global-status --prune

name       provider   state    directory                                                                    
---------------------------------------------------------------------------------------------------------------------
6095cc7  controller virtualbox running  /home/karthick/Karthick_Root/Work/Vagrant/Lab/Ansible_lab_vagrant_virtualbox 
cf2e302  m1         virtualbox running  /home/karthick/Karthick_Root/Work/Vagrant/Lab/Ansible_lab_vagrant_virtualbox 
af10f7d  m2         virtualbox running  /home/karthick/Karthick_Root/Work/Vagrant/Lab/Ansible_lab_vagrant_virtualbox 

Per connetterti alla macchina virtuale puoi eseguire "vagrant ssh " comando. Devi passare il nome vm altrimenti genererà il seguente errore.

$ vagrant ssh
This command requires a specific VM name to target in a multi-VM environment.

Per accedere a m1 VM, il comando sarebbe:

$ vagrant ssh m1

Oppure,

$ vagrant ssh cf2e302

Puoi anche connetterti utilizzando il nome utente e la password se l'autenticazione basata su password è abilitata.

$ ssh [email protected]
[email protected]'s password:
[email protected]:~$

Per arrestare una particolare macchina virtuale, eseguire il comando halt con vm name.

$ vagrant halt controller

Per arrestare tutte le macchine virtuali, esegui il comando seguente.

$ vagrant halt
==> m2: Attempting graceful shutdown of VM…
==> m1: Attempting graceful shutdown of VM…
==> controller: Attempting graceful shutdown of VM…

Per distruggere tutte le macchine virtuali incluso il relativo disco, eseguire il comando seguente.

$ vagrant destroy -f
==> m2: Destroying VM and associated drives…
==> m1: Destroying VM and associated drives…
==> controller: Destroying VM and associated drives…

Conclusione

In questo articolo, ho mostrato il modo automatico per configurare ansible lab utilizzando Vagrant e VirtualBox. Il lab viene creato con uno stack Ubuntu 20.04 LTS.

Se hai intenzione di prendere una certificazione ansible e vuoi esercitarti in un laboratorio, ti suggerisco di modificare il file vagrant puntando il nome della casella su RHEL sapore e sostituire apt comando per appropriarsi di dnf /yum comando nel bootstrap.sh file.

Leggi il prossimo:

  • Inventario Ansible e file di configurazione

Linux
  1. Modifica il testo su Linux con KWrite e Kate

  2. Come uso Vagrant con libvirt

  3. Come installare e testare Ansible su Linux

  4. Registra Red Hat Enterprise Linux e allega un abbonamento ad Ansible

  5. Errore su Vagrant Up su Linux

Installa e configura Ansible in Linux

Come creare una macchina virtuale con Vagrant e VirtualBox

Guida introduttiva a Vagrant e VirtualBox – Parte 1

Come lavorare con Ansible Provisioner in Vagrant

Configura il bilanciamento del carico con HAProxy, Nginx e Keepalived in Linux

Installa Windows 10 su Linux con VirtualBox