Ansible adalah alat manajemen konfigurasi dan penyediaan perangkat lunak sumber terbuka untuk sistem operasi mirip Unix dan Microsoft Windows.
Tidak seperti, Wayang, Koki, dan CFEngine, perangkat lunak server diinstal pada satu mesin, dan mesin klien dikelola melalui perangkat lunak agen. Dimana Ansible, node dikelola dengan mengontrol node (Ansible server) melalui SSH, sehingga tidak akan ada perangkat lunak agen yang berjalan pada mesin node yang dikelola (Client Server).
Ansible dapat melakukan penyebaran, manajemen konfigurasi perangkat lunak pada 100-an node menggunakan SSH, seluruh operasi biasanya dijalankan oleh satu perintah tunggal yang dimungkinkan. Namun, dalam beberapa kasus, di mana Anda mungkin perlu menjalankan beberapa perintah untuk penerapan.
Panduan ini akan membantu Anda menginstal Ansible di CentOS 8 / RHEL 8.
Lingkungan
Nama Inang | Alamat IP | OS | Tujuan |
---|---|---|---|
server.itzgeek.local | 192.168.0.10 | CentOS 8 / RHEL 8 | Mengontrol Mesin |
node1.itzgeek.local | 192.168.0.20 | CentOS 8 | Node 1 Terkelola |
node2.itzgeek.local | 192.168.0.30 | CentOS 7 | Node Terkelola 2 |
Instal Ansible pada CentOS 8 / RHEL 8
Setup Control Node
Untuk menginstal Ansible, kita harus mengaktifkan repositori EPEL dan Ansible masing-masing pada CentOS 8 dan RHEL 8.
### CentOS 8 ### yum install -y epel-release ### RHEL 8 ### subscription-manager repos --enable ansible-2.9-for-rhel-8-x86_64-rpms
Instal Ansible dengan perintah yum.
yum install -y ansible
Setelah Ansible diinstal, verifikasi versi Ansible dengan menjalankan perintah di bawah ini.
ansible --version
Keluaran:
ansible 2.8.5 config file = /etc/ansible/ansible.cfg configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python3.6/site-packages/ansible executable location = /usr/bin/ansible python version = 3.6.8 (default, May 21 2019, 23:51:36) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]
Siapkan Node Terkelola
Mesin klien setidaknya harus memiliki Python 2 (versi 2.6 atau yang lebih baru) atau Python 3 (versi 3.5 atau yang lebih baru).
### CentOS 8 / RHEL 8 ### yum install -y platform-python ### CentOS 7 / RHEL 7 ### yum install -y python
SELinux
Jika Anda telah mengaktifkan SELinux pada node yang dikelola, Anda harus menginstal paket di bawah ini pada node sebelum menggunakan fungsi terkait salinan/file/templat di Ansible.
### CentOS 8 / RHEL 8 ### yum install -y python3-libselinux ### CentOS 7 / RHEL 7 ### yum install -y libselinux-python
Otentikasi SSH
Seperti yang dikatakan sebelumnya, Ansible menggunakan OpenSSH asli untuk komunikasi jarak jauh. Ansible mendukung otentikasi tanpa kata sandi dan kata sandi untuk menjalankan perintah pada node yang dikelola.
Di sini, untuk demo ini, saya telah menggunakan komunikasi tanpa kata sandi antara node pengontrol yang memungkinkan (root) dan node yang dikelola (root). Namun, saya akan menunjukkan cara menggunakan Ansible dengan otentikasi kata sandi.
Otentikasi kunci SSH (Otentikasi Tanpa Sandi)
Ketika berbicara tentang autentikasi ssh, secara default, ia menggunakan kunci ssh (otentikasi tanpa kata sandi) untuk mengautentikasi dengan mesin jarak jauh.
BACA :Cara Mengatur Login Tanpa Kata Sandi SSH di CentOS 8 / RHEL 8
BACA :Cara Mengatur Login Tanpa Kata Sandi SSH di CentOS 7 / RHEL 7
Seperti yang Anda ketahui, penyediaan perangkat lunak atau perubahan konfigurasi yang Anda lakukan pada node memerlukan hak akses root atau hak akses setara root (sudo). Jadi, atur komunikasi tanpa kata sandi antara pengguna root Server Ansible dan pengguna root node untuk kemudahan.Otentikasi Kata Sandi
Otentikasi kata sandi juga dapat digunakan jika diperlukan dengan menyediakan opsi –ask-pass. Opsi ini memerlukan sshpass ke mesin pengontrol aktif.
yum install -y sshpass
Buat Inventaris yang Mungkin
File /etc/ansible/hosts menyimpan inventaris host jarak jauh yang akan dihubungkan oleh Ansible melalui SSH/Winrm (Windows) untuk mengelolanya. Saat ini, kita hanya akan melihat bagaimana mengelola konfigurasi node Linux jarak jauh.
Edit file inventaris.
vi /etc/ansible/hosts
Masukkan satu atau lebih alamat IP atau nama host sistem jarak jauh di dalamnya. Anda dapat mengelompokkan server dengan [GROUP_NAME]. Di sini, saya telah menambahkan kedua mesin ke grup demoservers.
Grup digunakan untuk mengklasifikasikan sistem untuk penggunaan tertentu. Jika Anda tidak menentukan grup apa pun, mereka akan bertindak sebagai host yang tidak dikelompokkan.
[demoservers] 192.168.0.20 192.168.0.30
Periksa Konektivitas yang Memungkinkan
Mari kita periksa konektivitas node dengan menggunakan ping (modul) dari mesin pengontrol. Untuk melakukannya, kita akan menggunakan perintah yang dimungkinkan dengan opsi -m (load module) dan all (semua server) atau demoservers (sekelompok node).
Modul ping ini sering digunakan untuk memecahkan masalah konektivitas Ansible.# All servers - If you use passwordless authentication. Current logged in user on Ansible server and remote node's user are same ansible -m ping all # All servers - If you use passwordless authentication and the remote user is different from logged in user on Ansible server ansible -m ping -u raj all # All servers - If you use password authentication and the remote user is different from logged in user on Ansible server ansible -m ping all -u raj --ask-pass # Only demoservers group - If you use passwordless authentication. Current logged in user on Ansible server and remote node's user are same ansible -m ping demoservers
Keluaran:
192.168.1.20 | SUCCESS => { "changed": false, "ping": "pong" } 192.168.1.30 | SUCCESS => { "changed": false, "ping": "pong" }
Pada contoh di atas, kita telah melihat bagaimana menggunakan modul ping dengan perintah yang memungkinkan untuk melakukan ping ke semua atau sekelompok host jarak jauh dengan otentikasi tanpa kata sandi dan kata sandi.
Dengan cara yang sama, kita dapat menggunakan berbagai modul dengan perintah yang memungkinkan. Anda dapat menemukan modul yang tersedia di sini.
Jalankan Perintah Pada Node
Kali ini, kita akan menggunakan modul perintah dengan perintah yang memungkinkan untuk mendapatkan informasi mesin jarak jauh.
Perintah di bawah ini ditulis dengan asumsi bahwa Anda memiliki komunikasi tanpa kata sandi antara node kontrol dan node yang dikelola. Saya menggunakan grup demoservers untuk menjalankan perintah.Periksa Nama Inang
Dalam contoh pertama kami, kami akan menjalankan perintah hostname dengan modul perintah untuk mendapatkan nama host dari node jarak jauh sekaligus.
ansible -m command -a "hostname" demoservers
Keluaran:
192.168.1.30 | SUCCESS | rc=0 >> node2.itzgeek.local 192.168.1.20 | SUCCESS | rc=0 >> node1.itzgeek.local
Periksa Waktu Aktif
Untuk memeriksa waktu aktif node.
ansible -m command -a "uptime" demoservers
Keluaran:
192.168.1.30 | SUCCESS | rc=0 >> 16:36:45 up 56 min, 3 users, load average: 0.00, 0.00, 0.00 192.168.1.20 | SUCCESS | rc=0 >> 16:36:45 up 1:09, 2 users, load average: 0.05, 0.04, 0.05
Baca File Jarak Jauh
Anda juga dapat melihat konten file tertentu.
ansible -m command -a "cat /etc/hosts" demoservers
Keluaran:
192.168.1.30 | SUCCESS | rc=0 >> # This file is managed by man:systemd-resolved(8). Do not edit. # # This is a dynamic resolv.conf file for connecting local clients to the # internal DNS stub resolver of systemd-resolved. This file lists all # configured search domains. # # Run "systemd-resolve --status" to see details about the uplink DNS servers # currently in use. # # Third party programs must not access this file directly, but only through the # symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way, # replace this symlink by a static file or a different symlink. # # See man:systemd-resolved.service(8) for details about the supported modes of # operation for /etc/resolv.conf. nameserver 127.0.0.53 192.168.1.20 | SUCCESS | rc=0 >> # Generated by NetworkManager search itzgeek.local nameserver 8.8.8.8 nameserver 192.168.1.1
Mengalihkan Output File
Anda juga dapat menyimpan output (di server Ansible) ke file apa pun dengan menggunakan pengalihan.
ansible -m command -a "cat /etc/resolv.conf" demoservers > /tmp/ouput_file cat /tmp/ouput_file
Membuat Perubahan Konfigurasi pada Node
Kita dapat menggunakan modul lineinfile untuk mengedit file pada node jarak jauh. Misalnya, untuk menambahkan server nama tambahan, kita dapat menggunakan perintah di bawah ini.
ansible -m lineinfile -a "path=/etc/resolv.conf line=nameserver 8.8.4.4" demoservers
Anda dapat memvalidasi perubahan menggunakan perintah di bawah ini.
ansible -m command -a "cat /etc/resolv.conf | grep -i nameserver" demoservers
Kesimpulan
Itu saja. Anda sekarang telah berhasil menginstal Ansible di CentOS 8 / RHEL 8. Anda dapat melanjutkan untuk membuat playbook Ansible untuk mengotomatisasi tugas Anda.