GNU/Linux >> Belajar Linux >  >> Linux

Pengaturan Lab Otomatis yang Memungkinkan Dengan Vagrant Dan Virtualbox Di Linux

Mungkin adalah platform otomatisasi yang digunakan di bidang orkestrasi, manajemen konfigurasi, penerapan, penyediaan, dll. Jika Anda seorang pemula yang ingin belajar ansible atau seseorang berencana untuk mengambil sertifikasi ansible, maka Anda perlu memiliki setup lab rumah untuk berlatih ansible . Menyiapkan lab rumah secara manual adalah tugas yang memakan waktu. Ada beberapa solusi otomatis seperti Docker , Gelandang , Solusi cloud yang dapat digunakan untuk membangun lab yang memungkinkan. Dalam panduan ini, kita akan mempelajari cara otomatis untuk menyiapkan lab Ansible dengan Vagrant dan VirtualBox di Linux.

Vagrant adalah alat luar biasa untuk menyiapkan lingkungan pengembangan Anda dengan cepat. Jika Anda baru mengenal gelandangan, saya sarankan Anda melihat pengantar kami untuk panduan Gelandangan.

  • Tutorial Vagrant - Memulai Vagrant Di Linux

Untuk tujuan panduan ini, kami akan menggunakan Vagrant dengan VirtualBox sebagai penyedia untuk membangun lab kami yang memungkinkan. Anda juga dapat menggunakan KVM sebagai ganti VirtualBox. Jika Anda ingin menggunakan KVM sebagai penyedia, lihat artikel di bawah tentang cara menggunakan gelandangan dengan KVM.

  • Cara Menggunakan Vagrant Dengan Penyedia KVM Libvirt

Penyiapan Lab yang Memungkinkan

Sebagai prasyarat, Anda harus menginstal Vagrant dan Virtualbox di mesin Linux Anda. Jika Anda belum menginstal Vagrant, silakan lihat panduan berikut untuk menginstal Vagrant pada distribusi Linux yang berbeda.

  • Cara Menginstal Vagrant Di Linux

Kami akan membangun pengaturan lab tiga node yang memungkinkan. Satu node akan bertindak sebagai node master/controller dan dua node akan bertindak sebagai node yang dikelola. Untuk tujuan demonstrasi, saya menggunakan ubuntu/focal64 kotak gelandangan.

Berikut adalah detail penyiapan lab Ansible saya.

JENIS NODE NAMA KODE ALAMAT IP Rasa OS
Simpul Kontrol controller.anslab.com 192.168.10.3 ubuntu/focal64
Node Terkelola managed1.anslab.com 192.168.10.4 ubuntu/focal64
Node Terkelola managed2.anslab.com 192.168.10.5 ubuntu/focal64

Di sini saya hanya menyiapkan tiga node untuk lab saya, tetapi Anda dapat menambahkan node terkelola sebanyak yang Anda inginkan saat menyiapkan lab Anda sendiri.

Klon Repositori Proyek

Saya telah menghosting semua file yang diperlukan untuk menyiapkan lab Ansible di repositori GitHub saya. Jalankan perintah berikut untuk mengkloning repositori secara lokal.

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

Mari kita menavigasi ke dalam direktori proyek untuk melihat file apa yang ada.

Izinkan saya memberikan pengantar singkat untuk setiap file.

1. Vagrantfile

Semua konfigurasi yang terkait dengan VM disimpan dalam file ini. Berikut adalah isi dari file ini.

# -*- 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

Ini adalah skrip shell yang bertanggung jawab untuk menyiapkan kemungkinan di node pengontrol, menginstal paket, memodifikasi konfigurasi sistem.

Isi file ini diberikan di bawah ini:

#!/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

Skrip ini harus dipicu secara manual setelah ketiga pembuatan VM selesai. Skrip ini akan menangani pembuatan pasangan kunci ssh, mendistribusikannya ke ketiga node. Ini juga akan menjalankan contoh perintah ad-hoc yang memungkinkan untuk validasi.

Isi file ini diberikan di bawah ini:

#!/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

Ketiga file ini di-host di repositori GitHub saya. Jangan ragu untuk berkontribusi dan meningkatkannya.

Memahami Konfigurasi Vagrantfile

Sebelum membangun lab Ansible, Anda harus memahami konfigurasi di dalam skrip Vagrantfile dan shell.

1. Alokasi Memori Dan Vcore

Untuk ketiga kotak gelandangan, kita perlu mengatur memori dan nilai CPU. Di sini memori disetel ke 2GB dan CPU disetel ke 2 . Jika Anda ingin menambah atau mengurangi batas, cukup sesuaikan parameter yang disorot di Vagrantfile.

2. Rasa OS

Ketiga node (Pengontrol &terkelola) menggunakan gambar Ubuntu 20.04 LTS. Jadi ketika Anda menjalankan "vagrant up " command vagrant akan mencari parameter berikut dan mencoba menarik gambar jika tidak tersedia secara lokal.

3. Pengaturan Jaringan

Secara default gelandangan menggunakan NAT pada antarmuka pertama (adaptor1). Vagrant menggunakan penerusan port melalui NAT untuk terhubung ke mesin virtual. Di sini kami menyetel nama host dan alamat IP statis untuk ketiga VM melalui jaringan pribadi.

Antarmuka terpisah (Adapter2) akan dibuat dan alamat IP statis akan diberikan padanya. VM yang merupakan bagian dari jaringan pribadi dapat berkomunikasi satu sama lain.

Di lingkungan multi-vm, gelandangan akan secara otomatis memperbaiki tabrakan port.

==> 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. Nama Pengguna Dan Komunikasi SSH

Ada pengguna default yang disebut "gelandangan" dengan kata sandi "gelandangan". Pengguna gelandangan memiliki hak istimewa sudo tanpa kata sandi yang dikonfigurasi di vm secara default.

Secara default, otentikasi berbasis kata sandi dinonaktifkan untuk VM. Vagrant akan membuat pasangan kunci ssh dan menggunakan kunci pribadi untuk terhubung ke vm saat Anda menjalankan "vagrant ssh " perintah.

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

Otentikasi berbasis kata sandi diaktifkan melalui bootstrap.sh file sehingga Anda dapat terhubung ke node menggunakan alamat IP dan otentikasi berbasis kata sandi alih-alih otentikasi berbasis kunci.

5. Skrip Bootstrap

Script bootstrap.sh bertanggung jawab untuk

  • Mengaktifkan autentikasi berbasis sandi.
  • Buat .huhlogin file untuk menyembunyikan pesan spanduk default.
  • Tambahkan entri host di /etc/hosts file untuk ketiga node.
  • Menginstal paket yang diperlukan.
  • Penginstalan yang dimungkinkan melalui pengelola paket python(pip) hanya pada node pengontrol.

Saya menggunakan penyedia shell, di mana bootstrap.sh akan disalin ke /tmp/ lokasi di ketiga VM dan skrip akan berjalan dengan hak akses root.

Perhatian: Jika Anda sedang membangun lab berbasis RHEL, Anda harus mengedit perintah instalasi paket dari bootstrap.sh file sesuai dengan dnf atau rpm . Selebihnya semua akan serupa di semua distribusi.

6. Buat Pasangan Kunci

Ansible menggunakan keypair SSH untuk berkomunikasi dengan node yang dikelola dan menjalankan tugas. Kunci baru harus dibuat dari node pengontrol dan dibagikan dengan semua node terkelola sehingga memungkinkan untuk berkomunikasi dengan node terkelola tanpa meminta sandi setiap saat.

Skrip key_gen.sh akan mengurus pembuatan kunci ssh dan mendistribusikan kunci ke semua node. Script juga akan membuat direktori proyek dengan ansible.cfg berkas dan berkas inventaris. adhoc perintah akan dipicu sebagai bagian dari skrip untuk memvalidasi konektivitas.

Perhatian: Skrip ini harus dipicu secara manual dari node pengontrol setelah ketiga VM disediakan.

Buat Penyiapan Lab yang Memungkinkan

Buka direktori proyek dan jalankan perintah "vagrant up" dan sisanya akan ditangani oleh skrip gelandangan dan bootstrap.

$ cd Ansible_lab_vagrant_virtualbox
$ vagrant up

Contoh keluaran:

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

Skrip Pasca-Instal

Setelah ketiga VM disediakan, masuk ke node pengontrol untuk menjalankan /home/vagrant/key_gen.sh untuk membuat pasangan kunci ssh dan memvalidasi dengan menjalankan perintah ad-hoc yang memungkinkan.

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

Perintah Vagrant Untuk Mengelola VM

Perintah berikut akan membantu Anda mempertahankan siklus hidup mesin gelandangan.

Untuk mulai membangun mesin virtual, jalankan perintah berikut dari direktori tempat file vagrant berada.

$ vagrant up

Jika Anda hanya ingin memunculkan satu node, Anda dapat menambahkan nama host ke "vagrant up " perintah.

$ vagrant up controller

Untuk memeriksa status mesin, jalankan perintah berikut.

$ vagrant status
Current machine states:

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

Anda juga dapat menggunakan perintah berikut yang akan memberikan informasi lebih lanjut tentang 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 

Untuk terhubung ke mesin virtual, Anda dapat menjalankan "vagrant ssh " perintah. Anda harus memberikan nama vm jika tidak maka akan muncul kesalahan berikut.

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

Untuk ssh ke m1 VM, perintahnya adalah:

$ vagrant ssh m1

Atau,

$ vagrant ssh cf2e302

Anda juga dapat terhubung menggunakan nama pengguna dan sandi jika otentikasi berbasis sandi diaktifkan.

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

Untuk menghentikan mesin virtual tertentu, jalankan perintah halt dengan nama vm.

$ vagrant halt controller

Untuk menghentikan semua mesin virtual, jalankan perintah berikut.

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

Untuk menghancurkan semua vm termasuk disk-nya, jalankan perintah berikut.

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

Kesimpulan

Pada artikel ini, saya telah menunjukkan cara otomatis untuk menyiapkan lab yang memungkinkan menggunakan Vagrant dan VirtualBox. Lab dibuat dengan tumpukan Ubuntu 20.04 LTS.

Jika Anda berencana untuk mengambil sertifikasi yang memungkinkan dan ingin lab berlatih, saya sarankan Anda untuk mengedit vagrantfile dengan mengarahkan nama kotak ke rasa RHEL dan mengganti apt perintah ke dnf yang sesuai /yum perintah di bootstrap.sh berkas.

Baca Selanjutnya:

  • File Inventaris dan Konfigurasi yang Memungkinkan

Linux
  1. Cara Menginstal dan Menguji Ansible di Linux

  2. Daftarkan Red Hat Enterprise Linux dan lampirkan langganan dengan Ansible

  3. Kesalahan pada Vagrant Up di Linux

  1. Edit teks di Linux dengan KWrite dan Kate

  2. Bagaimana saya menggunakan Vagrant dengan libvirt

  3. Coba Linux di sistem operasi apa pun dengan VirtualBox

  1. Menyesuaikan terminal Linux saya dengan tmux dan Git

  2. Mengelola proses di Linux dengan kill dan killall

  3. Cara Menginstal Vagrant dan menggunakannya dengan VirtualBox di Ubuntu 20.04