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