İçeriğe geç

Ansible yazı dizisi – I

Ansible, en kısa tabiriyle bir otomasyon ve konfigürasyon yönetimi aracıdır. Ekim 2015’de 100 milyon dolarlık meblağ karşılığında Red Hat tarafından satın alınmıştır. Bu yazıyı yazdığım dakikalarda kullanılan son sürümü 2.4’tür.

Ansible; yönetim, test, konfigürasyon, deployment gibi işlemler için “playbooks” denilen yapıları kullanmaktadır.

Mimarisine göz attığımızda, arka planda bir public/private cloud ortamını baz alacak olursak, kullanıcılar Ansible ve cloud ortamı ile etkileşime girmektedir ve Ansible’ın cloud ile arasındaki iletişimde kullandığı yapılar; core modules, custom modules, hosts, playbooks, plugins nesneleridir. Tek Ansible ortamıyla node’lar kontrol edilir.

 

 

Ansible’ı yakın rakipleri olan Puppet, Chef, SaltStack gibi otomasyon araçlarından ayıran en büyük özelliklerden birisi, “agentless” olarak çalışmasıdır. Diğer araçlar master-slave yapısında bir controller node’a ihtiyaç duyuyorken, Ansible’da eyleme geçmek için duyulan yegâne etmen SSH’tır. Bir başka farklılığı, iş akışında diğer araçlar controller node’un pull metodu ile çalışırken, Ansible push ile işlemini gerçekleştirir. Bunun ne gibi farklılıklar oluşturduğuna ilerleyen yazılarda değineceğim.

 

Ansible, playbook düzeni için YAML standardını kullanmaktadır, bazı araçlar (Puppet gibi) DSL standardını kullanıyor. YAML ve DSL arasında karşılaştırma yaparken “bu daha iyidir” denilemeyeceğini düşünüyorum zira kendilerine göre avantaj ve dezavantajları mevcut.

 

Playbook oluştururken veya mevcut bir playbook üzerinde çalışırken, YAML sunduğu kolay okunabilir format sayesinde bir conversion veya migration işleminde kolaylıklar sunmaktadır, tabi işlemin gerçekleştirileceği ikinci kümeye de hakim olunduğunu hesaba katarak bunu söylüyorum.

 

İki adet basit YAML içerik örneği görelim.

 

Görüldüğü gibi klasik değişken – değer ilişkisi mevcut. Değişken değerleri string, integer, float ve boolean değerler alabilir. Çift tırnak arasına yazılan bir rakam veya sayı, string olarak kabul edilir.

 

Özet bilgilerden sonra elleri biraz ısındıralım. Kullandığım ortam:

 

 

Ansible’ın Kurulması

İki makineye de aynı şekilde Ansible paketini kuruyorum.

 

Makineler arasındaki SSH iletişimi key authentication üzerinden olmalı.

 

komutlarıyla bu işlemi gerçekleştirebilirsiniz. Olası bir yetkilendirme hatasında id_rsa.pub dosyasının içeriğini, webserver tarafında ~/.ssh/authorization_keys dosyasının sonuna ekleyebilirsiniz. /etc/ssh/sshd_config dosyasındaki gerekli opsiyonların aktif ve doğru ayarlandığından emin olun.

komutuyla Ansible’ın durumunu kontrol edebilirsiniz.Ansible’a ait ayar dosyaları, /etc/ansible/ dizininde bulunmaktadır.Ansible’a ait asıl bileşenlerin kontrolünü ansible.cfg dosyası üzerinden sağlayabiliriz. Loglama için /var/log/ansible dosyası kullanılır (değiştirebilirsiniz) fakat bu ayar yorum satırında olduğu için, # karakterini sileceğiz.Ansible’ın iletişim kurabilmesi için hosts dosyasında ufak bir düzenleme yapalım.

 

Köşeli parantezler içerisinde tanımlama yaptığımızda, aslında bir host grubu oluşturmuş oluyoruz.

Bu aşamada

komutunu girdiğimizde tanımlı makineleri görebiliyoruz. Bunun yerine tek bir grup üzerinden de bu komutu çalıştırabiliriz.

Bir iletişim denemesi yapalım.

Normalde host tanımlamaları için /etc/ansible/ansible.cfg dosyasında tanımlı olan inventory değişkeninin aldığı değerdeki dosya kabul edilir. Geçici olarak bunu ezebiliriz (override).

Webserver üzerinde bir komut çalıştırıp çıktısını alalım.

-b parametresi “sudo”yu temsil etmektedir, eski sürümlerde bunun yerine -s parametresi kullanılıyordu. -m ile shell modülünü, -a ile bu modül üzerinde yapacağım işlemi tanımlıyorum. Modüllerin alabileceği argümanların söz dizimleri farklı olabilir. Modüller konusunu ilerleyen yazılarda daha ayrıntılı işleyeceğim.

 

Playbook Oluşturma

 

Komut satırında yaptığımız eylemin bir benzerini playbook üzerinden gerçekleştirelim. playbook.yml adında bir dosya oluşturarak aşağıdaki içeriği giriyorum.

Playbook’u çalıştıralım:

Son satırdaki “ok=2 changed=1 unreachable=0 failed=0” değerlerinden de anlaşılacağı gibi, yapmış olduğum işlemin webserver makinesinde çalışmış olması gerekiyor.

Görüldüğü gibi, root’un ev dizininde “a” adında boş bir dosya oluştu.

Biraz daha farklı bir örnek yapalım. apache.yml adında yeni bir playbook dosyası oluşturalım ve içeriği uygun şekilde dolduralım.

Hosts bölümünü kendi makine IP adresi veya host adına göre değiştirin. Sırasıyla http paketinin kurulumu, servisin başlatılması, firewalld servisinde 80 portuna izin verilmesi ve bu kuralın işlenmesine yönelik ayarları oluşturdum.

Oluşturduğumuz playbook’u çalıştıralım.

Bir problem görünmüyor, webserver makinesinin IP’sine gidelim, test sayfasını görmemiz gerekiyor.

Bu kadar. Ayarları doğru yapmanıza rağmen test sayfasına erişemiyorsanız:

  1. Webserver tarafındaki SELinux ayarlarınızı kontrol edin.
  2. Cloud ortamı kullanıyorsanız, webserver makinesindeki inbound kurallarını kontrol edin.

Umarım Ansible’a yeni giriş yapan arkadaşlara faydalı olmuştur. İlgi duyulursa devamını getireceğim.

 

İyi çalışmalar.

Tarih:DevOpsLinux

2 Yorum

  1. Emin Emin

    çok güzeldi bence. devamının gelmesini dilerim. )

  2. Mehmethex Mehmethex

    Teşekkür ederiz çok güzel bşir başlangıç olmuş devamının gelmesini isterim.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

DenizParlak.