Ansible? Kurulum ve Ortamlarınızı Otomatikleştirme

Yunus emre
SabancıDx
5 min readApr 1, 2021

--

Merhaba, bu yazımda Ansible ile ilgili kurulum aşamasından yönetimimizde olan sunucularda herhangi bir güncelleme yaptığımızda (ki bu sayının fazla olduğunu hesap edelim) tek elden nasıl işlerimizi kolaylaştırabildiğini anlatmaya çalıştım.

Yazıma başlamadan önce de epey kaynak ve video izledim. Olabildiğince ziyaret ettiğim her siteyi yazının sonunda paylaşacağım fakat adı üstünde sunucu ortamlarımızı otomatikleştirirken bunu sağlayan diğer teknoloji araçları olduğunu, aslında hepsinin birbirinin muadili olsa da ansible’ın sunduğu ilk kolaylıkla başlayalım. Öncelikle Ansible puppet gibi bağlantı kurduğu sunucya gidip bir ajan kurma gereği duymaz, bunu serialized data language biçimlendirici olan /etc/ansible/ altında oluşturduğunuz bir yaml dosyasından yola çıkarak küçük programları (tasks) çalıştırarak işini halleder.

Ansible Server: 35.237.42.208 (RHEL7)

Ansible Client: 34.73.63.137 (RHEL8)

Daha sonradan havuza ekleyeceğimiz diğer sunucu;

Ubuntu: 104.154.21.22 (Ubuntu 18.04)

Kurulumu için Redhat 7.x sürümü tercih ettim ben özellikle diğer kaynaklardan farklı olması için fakat Centos/Fedora için

https://urclouds.com/2019/01/19/ansible-installation-and-configuration-on-centos-7/ yararlanabilirsiniz.

Belirtmekte fayda olacaktır, 0.0.0.0/0 allow ile bulut güvenlik duvarından dışarı erişim vermeniz gerekebilir, public ip ile testlerde erişim sıkıntısı yaşamamak adına ve python ön gerekliliklerden biridir.

Sunucuda süper kullanıcı yetkilerini almak için ben işlemlerini her defasında sudo koşmamak için root üzerinden gerçekleştirdim.

# yum -y install epel-release.# yum repolist# yum update
# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm // ansible kurulumu için gerekli paket yüklemeleri
# yum list available — disablerepo=* — enablerepo=epel# yum search ansible //ansible listelenebildikten sonra install edebilirsiniz# yum install ansible# ansible — version

İlk önce client sunucumuza erişebilmemiz ve üzerinde seri şekilde tasklarımızı tamamlayabilmemiz için bu sunucular arasında key oluşturmamız gerekiyor ve birbirlerine kopyaladığımız veya tanıttığımız bu key sayesinde root ssh gidebileceğimize bakalım.

# ssh-keygen

Enter passphrase adımlarını geçtikten sonra

# ssh-copy-id root@34.73.63.137

Bu adımda hata almanız gerekiyor. Permission denied ve benzerleri.

Bu adımları geçmek için öncelikle sunucularınızda

# vi /etc/ssh/sshd_config

PasswordAuthentication yes ve PermitRootLogin yes. satırlarını güncelleyip sshd restart edin

# systemctl restart sshd

Ardından /etc/ansible default kurulumu gerçekleştirdiğimiz dizinde hosts dosyası olduğunu göreceksiniz. Aslında bu host dosyası bizim ansible ile yönettiğimiz sunucuları eklediğimiz dns dosyası.

vi editör ile içerisine girip aşağıdaki gibi client sunucularımızı ekleyebiliriz.

[linux]34.73.63.137[linux:vars]ansible_user=root
ansible_password=your_root_passwd

Bu adımda hata almamak için root olduğunuz sunucularda #passwd ile belirleyebileceğiniz root şifrenizi burada variables’a eklemelisiniz.

Burada linux o host’daki sunucuları temsil eder (daha sonra ubuntu için de aynı benzer satırları ekleyeceğiz) , yani başlangıç ansible komutlarımızı koşalım:

# ansible -m ping linux
# ansible -m command -a “uptime” ‘linux’
#ansible linux -a “cat /etc/os-release”

Buraya kadar tamamsak eğer asıl ansible nerede söz söyler oraya geçelim.

# vi <anyname>.yml dosyası oluşturun /etc/ansible/ dizininde

Ben burada yml formatında hata almamak için VsCode ile sunucuma bağlanıp aynı yerde yaml dosyasını oluşturup kopyaladım.

Google cloud’daki Compute Engine VMlerinize bağlanmak için şu adımları takip edebilirsiniz:

# gcloud init# gcloud compute config-ssh // burada örnek ssh komutu çıktıda yazdırılır, siz sadece server makinenize bağlanmalısınız.# ssh ansible-server.us-east1-b.phrasal-descent-309313

vi editörle oluşturduğumuz yaml içerisine girelim.

# vi iluvlinux.yml

Buraya kadar konfigürasyonda değişiklik yapmadıysanız aşağıdaki şekilde devam edebilirsiniz.

----  name: iluvlinuxhosts: linuxtasks:-  name: Apache yuklemeyum:name: httpdstate: latest

Bundan sonra devreye playbook giriyor, ansible-playbook ile yaml dosyamızın içindeki verileri, sorasıyla okuyarak gerekli işlemleri tamamlar, hata alınırsa satırda hangi exception olduğunu belirtir.

# ansible-playbook iluvlinux.yml

Ardından Redhat client sunucumuzda yapmamız gereken tek şey;

# systemctl start&status httpd demek olacaktır

Peki bizim havuzumuzda farklı yayılım, versiyon ve amaçlar içeren sunucularımız olsa ve ansible ile yine aynı şekilde tek elden yönetmek istesek; o zaman da çok ufak dokunuşlarla aynı işlemi farklı host çatısı altındaki sunucularımıza hatta ilk başta yaptığımız gibi httpd start demeden bile onu da farklı görevde tanımlayarak gerçekleştirebiliriz. Yaml son hali;

----  name: iluvlinuxhosts: linuxtasks:-  name: Apache yuklemeyum:name: httpdstate: latest-  name: Apache baslatmaservice:name: httpdstate: started-  name: iluvlinuxhosts: ubuntutasks:-  name: Apache yukleme Ubuntuapt:name: apache2state: latest

Gördüğünüz gibi artık linux hostumuzun bir taskı başlatma ve ubuntu için yumdan farklı olarak apt koşuyoruz.

Rhel8 için httpd stop edip playbook ile yeniden sunuculardaki işleri başlatalım.

Tarayıcıdan da apache web sunucularımızı ön yüzde çağırabildik. Aynı işlemleri tekrardan yapsaydık Ansible yeşil yansa da changed 0 olarak gösterecekti yani yaptığı işi tekrardan yapma gereği duymuyor, bu 400 sunucuyu yönettiğiniz ve core os upgrade dahil daha zaman alıcı işlerde bize her trülü vakit kazandıran ansible yeteneklerinden birisi.

Yararlandığım kaynaklar:

https://medium.com/devopsturkiye/ansible-nedir-dosya-yap%C4%B1s%C4%B1-nas%C4%B1ld%C4%B1r-nas%C4%B1l-kullan%C4%B1l%C4%B1r-4d8c90cdb266

https://www.youtube.com/watch?v=5hycyr-8EKs

https://www.itzgeek.com/how-tos/linux/centos-how-tos/enable-epel-repository-for-centos-7-rhel-7.html

https://www.digitalocean.com/community/questions/ssh-copy-id-not-working-permission-denied-publickey

Faydalı olması dileğiyle, bir sonraki yazımda görüşmek üzere. Sağlıkla kalın.

--

--

Yunus emre
SabancıDx

Devops || Middleware Engineer who is into cloud and Linux fundamentals. Learning Openshift & keeping on Google Cloud Platform.