Ansible: Otomatik Sunucu Kurulumu 

Ansible, DevOps süreçleri gibi temel teknolojilerde güçlü bir uygulanabilirliğe sahip bir süreç otomasyon sunucusudur. Ansible, aynı anda birden fazla makinede işlem yapabilen otomasyon araçlarından biridir. Ansible, uzak sunuculardaki scriptleri/playbook’ları çalıştırır/kurar ve yönetir.

Sunucuları yönetirken, yöneticinin bağlı kalamayacağı bazı komutlar veya görevler zaman alır. Örneğin, güncelleme ve yükseltme komutları, sunucuları yönetirken birincil komutlardır ve günlük olarak çalıştırılmaları gerekir. Dolayısıyla bu tür senaryolarda Ansible, yöneticilerin görevlerini otomatikleştirmek için öncelikli tercihlerinden biridir.This post illustrates the complete usage of Ansible to automate servers.

 

 

Ansible’ın Temel İş Akışı

Ansible ortamı bir Kontrol merkezi, Yönetilen sistemler, Envanter Dosyası ve Yapılandırma Dosyasından oluşur.

Kontrol merkezinde Ansible kuruludur ve Kontrol bilgisayarı, SSH aracılığıyla Yönetilen bilgisayarlarla etkileşime girer.

Ansible’ın bileşenlerini ve bunların mantıksal entegrasyonunu gösteren aşağıdaki resme bir göz atalım.word image 417049 1 1

Kontrol Merkezi

Ansible’ın kurulu olduğu sistem. Ansible ile ilgili tüm konfigürasyonlar Control Side üzerinde yapıldığından, Control Node Ansible ortamının ana bileşenidir.

Yönetilen Sistemler

Ansible üzerinden bağlanmak istediğimiz sistemler/makineler. Kontrol merkezi tarafından yönetilen birden fazla Host olabilir. Ana bilgisayarlar birden fazla kategoride veya bir ana kategoride gruplandırılabilir.

Envanter Dosyası

Hosts dosyası olarak da adlandırılan envanter dosyası, konak makinelerin (Yönetilen Sistemleri) IP adreslerini ve gruplarını içerir.

Yapılandırma Dosyası

Yapılandırma dosyası, varsayılanlara bir alternatif içerir. Örneğin, envanter dosyasının varsayılan konumu “/etc/ansible/” içindedir. Varsayılan konumdan farklı bir envanter dosyası oluşturursak, yolu yapılandırma dosyasına koymamız gerekir. Benzer şekilde, varsayılan kullanıcı adı yapılandırma dosyasının içine yazılabilir.

Ansible Başucu Kitabı

Ansible Playbook, YAML biçimli bir dosyadır (YAML İşaretleme Dili Değildir). Kontrol merkezi tarafında oluşturulur ve kontrol merkezinin yönetilen sistemlerde çalıştıracağı talimatları/komutları içerir.

Otomatik Sunucu Kurulumu için Ansible Nasıl Kullanılır

Ansible’ı işlevsel hale getirmek için Ansible ön koşullarını yapılandırmamız ve başarılı bir şekilde dağıtmamız gerekiyor. İlk olarak, “Kontrol Merkezi kurulumu” ile başlayacağız:

1. Adım: Ansible’ı yükleyin | Kontrol Merkezi Tarafı

Ubuntu sistem depolarını güncelleyelim:

sudo apt update

word image 417049 2 1

“Ansible”, Linux dağıtımlarının çoğunun varsayılan depolarında bulunur:

sudo apt install ansible

word image 417049 3 1

Şu komutu kullanarak kurulumu doğrulayın:

ansible –version

word image 417049 4 1

Adım 2: Envanter Dosyası Oluşturma | Kontrol Merkezi Tarafı

inventory/hosts dosyasının varsayılan konumu “/etc/ansible/hosts” şeklindedir. Ansible’ı varsayılan depolardan kurduğumuzda kullanılamayabilir, bu nedenle onu dosya sisteminin herhangi bir yerinde, tercihen varsayılan konumda oluşturmamız gerekir. Envanter dosyasını varsayılanın dışında oluşturursak, yapılandırma dosyasında envanter dosyasının yolunu sağlamamız gerekir.

Not: Envanter dosyasında IP/sunucu gruplaması

Her iki ana bilgisayarı da tek bir “[sunucu]” grubunda tutuyoruz. Bunları ayrı kategorilere ayırabiliriz. Gereksinimlere bağlıdır (Örneğin, bir IP web sunucularına atıfta bulunuyorsa, onları bir gruba koyarız. Benzer şekilde, diğer IP veritabanına atıfta bulunuyorsa, onu farklı bir kategoriye koyabiliriz.)

word image 417049 5 1

ansible-inventory komutunu kullanarak envanter listesini doğrulayalım:

ansible-inventory –list -y

word image 417049 6 1

3. Adım: SSH’yi Yapılandırın | Host Tarafı

SSH, Kontrol Merkezi ile Ana Bilgisayarlar arasındaki temel bağlantı ortamıdır. SSH, envanter/hosts dosyasındaki tüm uzak ana bilgisayarlara kurulacak ve yapılandırılacaktır:

Önce SSH’yi bir ana bilgisayara kuralım:

sudo apt install ssh

word image 417049 7 1

Ana bilgisayar tarafındaki güvenlik duvarı üzerinden 22 numaralı bağlantı noktasına izin verin:

sudo ufw allow 22

word image 417049 8 1

Güvenlik duvarının durumunu kontrol edelim:

sudo ufw status

word image 417049 9 1

Not: Bu komutlar, SSH’nin yüklenmesi ve genel yapılandırması ile ilgilidir.

Adım 4: Yeni Bir Kullanıcı Oluşturun ve Belirli Bir Kullanıcı Adı Üzerinde Şifresiz Giriş Yapın | Host Tarafı

İlk olarak, Ansible “control node” to “hosts” işlemleri için özel bir kullanıcı oluşturalım.

sudo adduser username

word image 417049 10 1

Ansible kullanıcısını sudo grubuna ekleme:

sudo usermod -aG sudo ansible_root

word image 417049 11 1

Otomatik olarak bağlanırken herhangi bir kesinti olmadığından emin olmak için bu kullanıcı için parolasız oturum açmayı etkinleştirin.

Sudoers dosyasını açın, aşağıdaki ifadeyi doğru kullanıcı adı ve ass’ın sağladığı anahtar değerlerle yazın:

sudo nano /etc/sudoers

word image 417049 12 1

SSH Bağlantısını Test Etme | Ansible Kontrol Düğümünden bir Ansible Ana Bilgisayarına:

ssh username@host-ip-address

word image 417049 13 1

  • SSH Anahtarlarını Ayarlama

Parolasız bir oturum açmamız gerektiğinden, burada SSH anahtarlarını ayarlıyoruz. İlk olarak, şu komutu kullanarak bir SSH anahtarı oluşturun:

SSH anahtarı oluşturma ve ortak anahtarı uzak ana bilgisayara kopyalama:

ssh-keygen

word image 417049 14 1

Not: Ortak anahtarı, çeşitli makinelerdeki ana bilgisayarları denetlemek için kullanacağınız kullanıcıya kopyalayın.

ssh-copy-id username@host-ip-address

Copying the SSH key to one of the host(s):

word image 417049 15 1

SSH anahtarını kalan ana bilgisayarlara kopyalama:

word image 417049 16 1

5. Adım: Doğrulama | Ansible Bağlantısını Ana Bilgisayarlarla Test Edin

Ansible ana bilgisayarına Ansible Bağlantısını test etme (ana bilgisayarda güvenilen veya parolasız oturum açma özelliğine sahip kullanıcı adını kullanmayı unutmayın). Ansible kullanıcı listesinde güvenilir kullanıcı olarak “ansible_root” kullanıcısına sahibiz.

ansible all -m ping -u username

“Tümü”, envanter dosyasındaki tüm ana bilgisayarların taranması ve kontrol edilmesi anlamına gelir.

word image 417049 17 1

Yalnızca tek bir düğüme veya bir düğüm grubuna da atıfta bulunabiliriz.

  • Tek Bir Yönetilen Düğüme Ping Gönderme:

Aşağıdaki komut, kontrol merkezinden  “linuxhint” adlı yönetilen bir sisteme olan bağlantıyı test eder:

ansible linuxhint -m ping -u username

word image 417049 18 1

  • Bir Grup Sunucuya Ping Atma:

Benzer şekilde, bir grup sunucu ayrı ayrı test edilebilir. Örneğin, ana bilgisayarlarımızda/envanter dosyamızda “servers” grup adımız var, bu nedenle yalnızca bu gruba ping atıyoruz:

ansible servers -m ping -u username

word image 417049 19 1

Adım 6: Otomatik Sunucu Kurulumu için Ansible Playbook Oluşturun

Bu, Ansible kullanarak bir sunucu kurulumunu otomatikleştirmeye yönelik son adımdır. Burada, sunucu yapılandırmasını, paket kurulumunu, ağ yapılandırmasını veya başka herhangi bir görevi otomatikleştirmek için YAML (YAML Ain’t Markup Language) ile yazılmış yapılandırılmış bir komut dosyası olan bir Ansible Playbook yazıyoruz.

Adım 6.1: Ansible Projesi için Bir Dizin Oluşturun

Doğrudan bir “.yaml” veya “.yml” dosyası oluşturabiliriz. Ancak, daha yapılandırılmış ve anlaşılır bir şekilde, Ansible öğelerini ayrı tutmak için özel bir dizin oluşturalım:

mkdir ansible_proj && ansible_proj

word image 417049 20 1

Adım 6.2 Bir Başucu Kitabı Oluşturun

Ansible Playbook, otomatik bir komut dosyası oluşturmak için YAML’den ilham alan belirli bir yapıyı takip eder. Bir “YAML” yazarken dikkatli olmamız gerekir çünkü eksik bir boşluk veya fazladan boşluk Playbook’un başarısız olmasına neden olur.

İşte ilk playbook komut dosyası:

Code:


– hosts: all
tasks:
– name: Print message
debug:
msg:

Ansible GuidePlaybook açıklaması:

  • hosts: all → Bu Playbook’un ilk başta tüm düğümlerde çalıştırılabileceğini gösterir.
  • tasks → Bu ifade, Başucu Kitabı’ndaki görevlerin listelenmesinin başlatılmasını belirtir.
  • – name: Print message → Görevin adı.
  • – debug → Görevin amacı.
  • Msg: Ansible Guide → Bu, hata ayıklama iletisidir.
ansible-playbook -i <host-file> <.yaml/yml file> -u ansible_root

word image 417049 21 1

  • Ansible Playbook’u Kullanarak Paket Yükleme

Diyelim ki Ansible Playbook üzerinden bir paket kurmak istiyoruz. Bağlı ana bilgisayarlara paket yüklemek için basit bir playbook:

Code:


– name: Basic Server Setup
hosts: all
become: yes
tasks:
# Task 1: Update package list and upgrade all packages
– name: Update and upgrade system
apt:
upgrade: dist
update_cache: yes

# Task 2: Install nano (simple text editor)
– name: Install nano editor
apt:
name: nano
state: present

  • Playbook’un adı, ana bilgisayarları ve ayrıcalıkları içeren başlığı başlatılır.
  • Bu oyun kitabında sadece 2 görev var. Görev 1 sistemi günceller ve yükseltirken, Görev 2 Linux’ta basitleştirilmiş bir metin düzenleyici olan Nano’yu yükler.
  • What is this apt in the Playbook? “apt”, apt tabanlı paketleri getirmek için kullanılan bir Ansible Modülüdür. Bu tür Ansible modülleri gereksinimlerimize göre değiştirilebilir. Örneğin, Fedora tabanlı yönetilen düğümlerle uğraşırken “dnf” modülü kullanılabilir.

word image 417049 22 1

Playbooku çalıştıralım:

ansible-playbook -i hosts installpack.yml -u ansible_root

word image 417049 23

Note: Ansible Playbook’un Çıktısı → “Tamam” ve “değiştirildi”, Ansible oyun kitabının çıktısında görülen iki kelimedir.

  • “ok”: İşlem istenen konakta gerçekleştirildi ancak yönetilen düğümde hiçbir şey değişmedi. Genellikle, “nano” düzenleyici Linux dağıtımlarının çoğuna kurulur, bu nedenle yapılacak herhangi bir değişiklik yoktur.
  • “changed”: Bu eylem gerçekleştirilmiş ve sistemde değişiklikler yapılmıştır. Örneğin, “güncelleme” ve “yükseltme” görevleri sistemlerde değişiklikler yaptı

    Varolan playbook’a başka bir görev ekleyin:

Aynı şekilde, bu Playbook’a farklı Ansible görevleri ekleyebiliriz. Daha önce kullanılan Ansible playbook’una SSH ekleyerek yap bölümüne basit bir SSH kurulum talimatı ekleyelim:

Code:

# Task 3: Ensure SSH service is running and enabled
– name: Setup SSH service
service:
name: ssh
state: started
enabled: yes

İşte değişiklikten sonraki playbook:

word image 417049 24

Playbooku tekrar çalıştıralım:

ansible-playbook installpack.yml -u ansible_root

word image 417049 25

Şimdi çıktıya bakın. Linuxhint’te yalnızca SSH hizmeti ayarlanmıştır. Geri kalan tüm görevler zaten gerçekleştirilmiştir ve kullanılabilirlikleri nedeniyle (çıktıya göre) hiçbir etkisi olmamıştır.

 

 

Yazının orijinalini buradan okuyabilirsiniz.

Hüseyin GÜÇ

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım. Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum. Son 6 yıldır  sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum. Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.