1. Ana Sayfa
  2. DevOps
  3. Linux Sunucularda Ansible ile File System Oluşturma

Linux Sunucularda Ansible ile File System Oluşturma

ansible

Bir süredir konfigürasyon işlerimi scriptize etmek istediğimde bash script yazmak yerine playbookları oluşturmayı tercih ediyorum. ’ı tercih etmemin nedeni agentless çalışması, yazım dilinin basit ve herkes tarafından anlaşılabilir olması bunun yanında da idempotent olmasıdır. Idempotent özelliği sayesinde yazdığınız playbook’u sunucuda tekrar tekrar çalıştırdığınızda aynı işi yapıp daha önce yapmış olduğu değişiklikleri tekrar yapmıyor olmasıdır. ’ı iki şekilde kullanabilirsiniz. Engine ile command line üzerinden veya Tower satın alarak web ara yüzünden kullanabilirsiniz. Tower Red Hat tarafından ulaştığı node sayısına göre lisanslanıyor. Ayrıca Tower’ın open source projesi olan AWX’i de kullanabilirsiniz. Tower ve AWX’den başka bir yazıda bahsederim. Biz bu gün Engine kullanıcaz. İlk olarak mimarisinden biraz daha bahsedip requirementları tamamladıktan sonra basit bir playbook yazıp sunucularımız üzerinde majör versiyonlarına göre file systemler oluşturacağız

Ansible Architecture

Ansible çok basit bir configuration management aracıdır. Ansible ile IT altyapınızın büyük bir bölümünü otomatize edebilirsiniz. Ansible playbook yazımı için YAML syntax’ını kullanır. YAML çok kolay anlaşılabilen ve hızlıca yazılabilen bir data serialization dilidir. Ansible 4 tane core componentten oluşur. Bunlar plugins, modules, playbooks ve inventory’dir.


Resim – 1

Plugins : Ansible’ın çalışmasını sağlayan kodlardır. Pluginler sayesinde Ansible inventory’ı okuyup playbookları çalıştırır ve sonuçları bize getirir. Python kullanılarak yazılır. İhtiyaçlara göre custom pluginlerde yazıla bilinir.

Moduls : Ansible’ın bağlandığı sunucuda çalıştırdığı küçük programlardır. Ansible çok çeşitli modüllere sahiptir. Copy, yum, service gibi modüllerle shell komutlarları kullanmaya gerek kalmadan işlemler yapılabilir. Ayrıca Ansible’ın shell ve command diye command line komutları çalıştırmayı sağlayan iki modülüde vardır.

Playbooks : YAML formatında yazılmış modüllerin nasıl çalışacağının, hangi variable’ların kullanılacağının, hangi host gruplarda çalıştırılacağının belirlendiği orchestration ve konfigürasyonun sağlandığı yapıdır. Playbook ve modüllerin örneğini file system oluşturmak için hazırladığım playbookta vereceğim.

Inventory : sAnsible’ın erişip modülleri çalıştıracağı sunucuların envanteridir. Bu envanter bir CMDB üzerinden veya Public Cloud’dan çekilebilir. Ayrıca aşağıdaki gibi gruplayarak istenen modüller sadece bu gruplarda çalıştırıla bilinir. Ayrıca bu gruplar alt gruplara bölünebilir. Envanter dosyası /etc/ansible/hosts dosyasında tutulur.

/etc/ansible/hosts örneği :

[webservers]

web01

web02

[dbservers]

db01

db02

Ansible ile Ad Hoc komutlarla direk olarak command line üzerinden birden çok sunucuda komut çalıştırabileceğiniz gibi playbooklar yardımıyla da daha karmaşık yapılar oluşturulabilirsiniz. Ayrıca Ansible playbookları birleştirip daha karmaşık işleri role oluşturularak da kofigüre edebilirsiniz. Bu yapıları da başka bir yazıda detaylı olarak inceleriz. Şu anda basit olarak ansible mimarisini inceleyip karmaşık bir script yazmak yerine basit bir playbook yardımıyla da aynı işi yapabileceğimizi göstereceğim.

Ansible agentless şekilde çalışır. sunuculara SSH ile Windows sunuculara winrm ile bağlantı kurarak playbooktaki playleri bağlantı yaptığı sunucuda çalıştırır. Ayrıca bazı durumlarda Ansible kendi modülleri kendi üzerinde çalışıp sonuçlarını da gönderebilir.

CentOS 7 üzerine

Vangrant ile 2 tane CentOS 7 bir tane de CentOS 6 vm oluşturup. Sunuculara aşağıdaki gibi hostname ve ip verdim.

ansible-master 192.168.50.50

ansible-client1 192.168.50.51

ansible-client2 192.168.50.52

Boş image üzerine ilk olarak epel reposu yüklemeliyiz. Ansible paketleri bu repodan çekilecektir. Kurulumu ansible-master sunucusunda yapıyorum.

[root@ansible-master ~]# yum install -y epel-release

Sonrasında ansible paketini yükleyebiliriz

[root@ansible-master ~]# yum install -y ansible

Ansible modüllerini SSH yaparak çalıştırdığı için masterden clientlara passwordless SSH gerekmektedir. SSH key generate edip clientlara göndermemiz gerekmektedir. Bunun için ssh-keygen komutu ile bir ssh key generate ediyorum.

Resim – 2

Sonrasında da oluşturduğumuz public key’i client sunucularımızın authorized_keys dosyasına kopyalamamız gerekmektedir. Bunun için ssh-copy-id komutu kullanıldım.

Sonrasında sunucuları “/etc/ansible/hosts dosyasına ekliyoruz.

Resim – 3

Master makinamızın clientlara ulaştığını kontrol etmek için basit bir ad hoc komutu ile ping modülünü kullanıyoruz.

Resim – 4

Resim – 5

Bundan sonra playbookları yazmaya başlayabiliriz. Playbooklar ile çoğu konfigürasyon işinizi yapabilirsiniz. Ben sunucularımda yeni bir file system oluşturacağım ve CentOS 6 sunucumda formatında CentOS 7 sunucumda ise formatında olmasını istiyorum. Disklerimi de LVM olarak oluşturacağım. Hadi playbook’u yazmaya başlayalım.

Playbookları YAML formatında yazıyoruz. Burada en çok dikkat etmeniz gereken şey girintileri tab ile değil de space ile yapmalısınız. İlk olarak hosts dosyamızda hangi grupta çalıştıracağımızı seçiyoruz. Burada da bir trick var sürekli “/etc/ansible/hosts” dosyamızı değiştirmek istemiyorsak başka bir dosyanın içine de aynı formatta yazıp playbook’u çalıştırırken -i parametresi ile bu dosyayı gösterip orda yazılan sunucular üzerinde de çalışabiliriz.

Sonrasında variableları belirliyoruz. Ben burada playbook’u sürekli editlemek yerine variableları promt ile almayı tercih ettim. İki tane variable’a ihtiyacımız var biri hangi fiziksel diskten file system oluşturulacağı diğeri ise file system’ın ismidir. Ben standart olması için volumu group’u ve lvm’ı file system ile benzer isimde oluşturacağım isterseniz bunları da prompt ile alabilirsiniz.

Variable’ları belirledikten sonra tasklarımıza başlayabiliriz. İlk taskımız lvg modülü ile fiziksel diskten volume group oluşturma sonrasında da lvol modülü ile bu volume grouptan lvm oluşturacağız. Son olarak da file system modülü ile file system’ı oluşturup mount modülü ile de formatladığımız file systemi sunucuya mount edeceğiz. Filesystem oluşturmada ve mount etmede when condition’ını kullanacağız böylece CentOS 6 sunucularda ext4 formatında CentOS 7 sunucularda da xfs formatında diski formatlamış olacağız.

Şimdi de anlattıklarımı newfilesystem.yml adında bir playbook’a yazıyorum.

[root@ansible-master ansible]# cat newfilesystem.yml

– hosts: filesystem

vars_prompt:

– name: “filesystem”

prompt: “filesystem ismini giriniz!!!!”

private: no

– name: “disk”

prompt: “fiziksel diski giriniz!!!”

private: no

tasks:

– name: volume group olustur

lvg:

vg: vg_{{ filesystem }}

pvs: “{{ disk }}”

– name: lvm olustur

lvol:

vg: vg_{{ filesystem }}

lv: lv_{{ filesystem }}

size: 100%FREE

– name: filesystem olustur

filesystem:

fstype: ext4

dev: /dev/vg_{{ filesystem }}/lv_{{ filesystem }}

when: ansible_distribution_major_version == ‘6’

– name: filesystem olustur

filesystem:

fstype: xfs

dev: /dev/vg_{{ filesystem }}/lv_{{ filesystem }}

when: ansible_distribution_major_version == ‘7’

– name: mount filesystem

mount:

name: /{{ filesystem }}

src: /dev/vg_{{ filesystem }}/lv_{{ filesystem }}

fstype: ext4

state: mounted

when: ansible_distribution_major_version == ‘6’

– name: mount filesystem

mount:

name: /{{ filesystem }}

src: /dev/vg_{{ filesystem }}/lv_{{ filesystem }}

fstype: xfs

state: mounted

when: ansible_distribution_major_version == ‘7’

Hadi şimdi de playbook’umuzu çalıştırıp file systemlerimizi oluşturalım. Ben iki vm’e 10gb disk ekledim. Fiziksel drive ismi sdb oldu bunu physical volume oluştururken “/dev/sdb” olarak belirteceğiz.

Resim – 6

[root@ansible-master ansible]# ansible-playbook newfilesystem.yml

komutu ile playbook’umuzu çalıştırıyoruz. Sonrasında bizden filesystem ismini ve fiziksel diski girmemizi isteyecek.

Resim – 7

Playbook’umuz sunucular üzerinde 4’er değişiklik yaptı ve hiç hata almadı. Şimdi sunucularımıza gidip file systemleri kontrol edelim.

Resim – 8

Resim – 9

Görmüş olduğunuz gibi CentOS 7 sunucuda xfs formatında CentOS 6 sunucuda ext formatında file systemlerimiz oluştu. Ayrıca yeni oluşan file systemler fstab dosyasına da yazıldı. Böylece reboot sonrasında da mount olarak gelecekler.

Şimdiye kadar ansible mimarisinden biraz bahsedip master makinemiz üzerinde ansible paketini yükledik. Sonrasında clientlar ile master arasında ssh keyleri tanımlayıp passwordless ssh yapmasını sağladık ve hızlıca Ad Hoc olarak ping modülünü kullanıp clientlara erişimi test ettik ve son olarak basit bir playbook oluşturup karmaşık bir script yazmak yerine modülleri kullanarak basit bir şekilde playbookumuzu oluşturduk. /dev/sdb fiziksel diskinden vg_ansible isminde bir volüme group oluşturup bu volüme group’dan da lv_ansible isminde bir logical volüme oluşturduk son olarak da file systemlerimizi majör versiyonlara göre formatlayıp mount ettik.

Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

www.mshowto.org

TAGs: Ansible, Linux, Ansible kurulumu, , , XFS, EXT4, , , ,

Yorum Yap

Yazar Hakkında

2016 yılında Yıldız Teknik Üniversitesi Elektronik ve Haberleşme Mühendisliğinden mezun oldum. Sonrasında Bilge Adamda 6 aylık sistem ve ağ uzmanlığı eğitimi alıdım. Bu eğitimde Microsoft On-Prem ürünlerini tecrübe ettim. Sonrasında da Vakifbank'ta Cloud & Linux Administrator olarak işe başladım. Storage ve sanallaştırma ekibindeyim. Storage tarafında EMC ve Hitachi ürünlerini SAN tarafında ise Brocade switchlerin yönetimini yapmaktayım. Bunlara ek olarak VMware ürünleri,ağırlıklı olarak Cisco UCS fiziksel sunucular ve Linux işletim sistemleri ile ilgilenmekteyim. VMware ürünlerinden de özellikle vRealize Orchestrator üzerine çalışmaktayım. Linuxlara işletim sistemi seviyesinde destek olmanın yanında Ansible üzerine yoğunlaşmış durumdayım.

Yorum Yap