Ansible Nedir? Ansible Kurulumu Nasıl Yapılır?
Ansible, yönetim dahilindeki sunucuların tek bir çatı altında istenilen her şeyin yapılması için imkan sağlayan, clientlar için de herhangi bir agent kurma gereksinimi gerektirmeyen, daha çok Ruby ve Python gibi dillerde geliştirilmiş olan bir platform olarak karşımıza çıkmaktadır. Günümüzde redhat çatısı altında bulunmakta olan ansible open source, ticari anlamda faaliyet göstermektedir.
Ansible, çok farklı rolleri bir arada içermektedir. Her yapılan işlem farklı bir rol olarak tanımlanabilir. Buna göre dosyalar çok daha anlamlı ve düzenli bir yapıda da olacaktır.
Sistem yöneticisinin işlerinin daha basit hale gelmesi için geliştirilmiş olan Ansible, agentsız bir yapıda olup otomasyon aracı olarak karşımıza çıkmaktadır. Otomasyon aracının kullanmış olduğu en önemli bileşen ise SSH protokolüdür.
Salt, Puppet ve Chef gibi alternatif kabul edilen sistemlere göre daha sade ve basit bir yapıya sahiptir. Ayrıca GitHub üzerinden geliştirilmeye devam edilen Ansible, Red Hat’ın kurumsal kullanımlar için de ücretli destekler sunmaktadır. Ayrıca kullanıcıların Ansible’i kullanmak için de herhangi bir lisans bedeli ödemesine de gerek yoktur.
Ansible Özellikleri
Ansible çeşitli özelliklere sahiptir. Bu özellikler ise:
- Python ile yazılmıştır.
- Açık kaynaktır.
- RedHat tarafından satın alınmıştır.
- Desteklediği işletim sistemleri
- Linux
- Windows
- BSD/MAC
Ansible genel anlamda bilgisayarları yönetmek ve yapılandırmak için kullanılmakta olan bir özgür yazılım platformudur. Öze amaçlı görev yürütmeyi, yapılandırma yönetimini ve çok uçlu yazılım dağıtımını birleştiren bir yapıya sahiptir.
Ansible’da uçları powershell ya da SSH üzerinden yöneten bir yapı söz konusudur. Üzerilerinde Python kurulmuş olmasına karşın bu kısımlara ihtiyaç duymaktadır. Ansible’da modüller standart çıktı ve JSON formatında çalışmakta olup ayrıca herhangi bir programlama dilinde de yazılabilir. Sistemlerin de yeniden kullanılabilir kaynaklarının ifade edilebilmesi için YAML kullanılır.
Ansible Tasarım Hedefleri
Ansible’nin tasarım hedefleri olarak şunları sıralayabiliriz:
- Doğal biçimde küçük yapıdadır.
- İstikrarlıdır.
- Güvenlidir.
- Çok güvenilir bir yapıdadır.
- Düşük öğrenme eğrisine sahiptir.
Ansible Modüller
Ansible’da modül kavramı, her bir bileşen için bir birim olarak hesaba katılmaktadır. Her birim ise genellikle kendi başına çalışma yeteneğine sahiptir. Ayrıca standart bir betik dil kapsamında (örneğin Python, Perl, Ruby, bash, gibi) da yazılabilir. Modüller için en genel özellik olarak eş kuvvetli olmalarını söyleyebiliriz. Bunun anlamı da eğer ki bir işlem sürekli olarak tekrar etse dahi her zaman için sistemi aynı duruma geri döndürecektir.
Ansible Envanter Yapılandırması
Ansible’de envanter, erişilebilen uçların tanımlanması işlemidir. Önden tanımlı olan Envanter /etc/ansible/host adı altındaki INI gibi bir yapılandırma dosyasında tanımlanmaktadır. Yapılandırma dosyası ile Ansible tarafından erişilen her ucun ya makine adını ya da IP adresini listelemektedir. Bununla birlikte uçlar gruplara atanabilir. Örnek bir yapılandırma dosyası olarak da şunu ifade edebiliriz:
192.168.6.1 [webservers] foo.example.com bar.example.com
Üç uç belirtmekte olan bu yapılandırma dosyasında ilk uç bir IP adresi ile belirtilir. Diğer iki uç ise ana makine adı ile belirtilir. Bununla birlikte son iki uç webservers grup adı altında gruplanma işlemine tabi tutulmuştur.
Bununla birlikte Ansible herhangi bir yazılım sistemi üzerinden veri çekebilen özelleştirilmiş bir “Dinamik Envanter”e de yöneltilebilir.
Ansible Platform Desteği
Ansible’ın platform desteği olarak kontrol makinelerinde Python 2.6 olarak karşımıza çıkmaktadır. Kontrol makineleri üzerinden desteklenen işletim sistemleri de birçok Unix ve Linux dağıtımı da desteklemektedir. Bunlara örnek olarak ise Red Hat, OS X, Debian ve CentOS, BSD gibi yapılar verilebilir.
Yönetilmekte olan uçlarda Python 2.4 ya da daha sonrası olmalıdır. Yönetilen uçlardan Python 2.5 ya da öncesi yüklü olanlarda ise python-simplejsonpaketinin yüklü olması gerekmektedir. Ayrıca Ansible 1.7 sürümünden sonra Windows uçlarını da yönetmektedir.
Ansible Bulut Bütünleşmesi
Ansible, sanal ortamlar ve açık ya da kapalı bulut ortamlar üzerinde dağıtım işlemi gerçekleştirebilir. Bunlar arasında ise AWS, Rackspace, VMware, OpenStack bulut sunucuları, Eucalyptus Bulut, DigitalOcean Damlacıkları, CloudStack ve KVM gösterilmektedir.
Ansible Büyük Veri Bütünleşmesi
Ansible büyük veri; Riak, Aerospike ve Hadoop gibi analiz ve saklama ortamlarının dağıtımını gerçekleştirebilir. Ansible’ın bu gibi ortamlar üzerinde araştırdığı sorunlardan biri de her bir uç için kaynak tüketiminin yönetimidir. Özellikle de depolama, büyük veri ve analiz ortamları olabildiğince az işlemci zamanı ve hafıza tüketerek kaynaklar üzerinde tutumlu olmayı hedeflemektedir. Bununla birlikte Ansible kullanılabilir olan işlemci kaynakları gibi değerlerin de ölçülmesi için izleme özellikleri sunmaktadır. Bu sayede de uçların yönetimi çok daha kolay biçimde gerçekleşmektedir.
Ansible Kurulumu ve Konfigürasyonu
Controller Node → controller.arif.com
Managed Node → client.arif.com
Controller sunucusunda Ansible kurulumu yapılmadan önce controller ve managed node’ların hostnameleri her iki sunucununda hosts file içerisine yazılır daha sonra kurulum yapılır.
# Debian 10.9 (Controller)sudo apt updatesudo apt install ansibleansible --version
Kurulum başarılı bir şekilde tamamlandıktan sonra, ansible managed node’ları yönetmek için agent yerine secure shell connection kullandığı için controller sunucunda ssh id oluşturulur.
# Debian 10.9 (Controller)ssh-keygen
Managed node’a yok ise ssh uygulaması kurulur.
# Debian 10.9 (Managed)sudo apt install openssh-server -y
sudo systemctl status sshd
sudo systemctl start sshd
sudo systemctl enable ssh
Managed node üzerinde default ansible kullanıcısı oluşturulur ve visudo yetkisi verilir.
# Debian 10.9 (Managed)sudo adduser --shell /bin/bash --gecos "" ansiblesudo visudo# Aşağıdaki satır eklenir.
ansible ALL=(ALL) NOPASSWD:ALL
Passwordless olarak bağlanabilmek için controller sunucusunda oluşturduğumuz key managed node’a eklenir.
# Debian 10.9 (Controller)ssh-copy-id ansible@client.arif.com
Kurulum ve konfigürasyon işlemleri bittikten sonra oluşturduğumuz ansible ortamını test etmek /etc/ansible içerindeki hosts file içerisinde yeni bir inventory alanı düzenlenir.
Test etmek için ansible ile ping komutu çalıştırılır.
# Debian 10.9 (Controller)ansible all -m ping