Neden Network Otomasyonunda Ansible Kullanıyorum?

Neden Network Otomasyonunda Ansible Kullanıyorum?

Uzun bir süredir network otomasyonu ve Ansible ile ilgili farklı şirketlerle çalışıyorum ve bu alanda eğitimler de veriyorum. Bu aşamalarda alternatifleri arasından, Ansible’ın neden benim ve birçok şirketin tercihi olduğunu, network otomasyonunda neden tercih edileceğini ve sağladıklarını bu yazı ile özetlemeye çalışıyorum. Bu yazı dizisinin ilerleyen bölümlerinde yine Ansible ile ilgili ağ otomasyonu tarafında teknik olan-olmayan birçok konudan bahsedeceğim.

Network sistemlerinin büyümesi cihaz sayısının artmasıyla sonuçlanırken, çok sayıda cihazın yönetimi aynı işin bir kişi tarafından tekrar tekrar yapılmasıyla sonuçlanabiliyor. Bu bariz bir şekilde zaman kaybı olabilirken, üstüne bir de ayarları yapan operatörün onlarca/yüzlerce, hatta bazen de binlerce cihaza aynı/benzer ayarları girerken kafasının karışabileceği, dikkatinin dağılabileceği gibi insani etkenler girince bütün cihazlara aynı işlem yapılsa bile aralarından bir tanesinde eksik, fazla veya yanlış ayar girilince farklılık oluşması mümkün oluyor. Bu farkların bulunması da bazı durumlarda tüm cihazların kontrolünü dahi gerektirebileceği için mühendislerin çok fazla zamanını alabiliyor. Tüm bu hata bulma ve çözme süreçleri sırasında, sözkonusu hata bir kesintiye yol açtıysa başa gelebilecek zararlar ise birçok ekibi değişiklik yapmaktan çekinir hale getirebiliyor.

Bazen tüm ayarlar doğru yapılsa bile, yapılan bazı değişiklikler istenen sonucu vermeyebiliyor veya günü kurtarmak için/geçici değişiklikler olabiliyor. Bu değişikliklerin de daha sonra geriye alınması gerekiyor. Geriye alma işlemi sırasında da, biraz önce bahsettiğimiz tüm riskler tekrar ortaya çıkıyor. Bazen de, “Dün a.b.c.d IP adresine ICMP echo isteği (ping) gönderip cevap alırken bugün onu dahi yapamıyorum” gibi istekler geldiğinde, son 1 gün içinde hangi network operatörünün hangi değişiklikleri yaptığını detaylıca görmek, sorunun kaynağını bulmayı ve çözmeyi oldukça hızlandırabiliyor. Ayrıca, ilgili gün ve saate ait ayarı seçerek tüm network altyapısını o anki ayarlara döndürme şansı da böyle durumlar için sistemi kurtarıcı işlev görebiliyor.

Ansible’ın Sağladıkları

Ağ içerisinde bulunan cihaz sayısı çok arttığında, yapıdan ve yöneten kişilerden bağımsız olarak bu cihazların yönetimi veya bazen sadece bir güvenlik/bugfix güncellemesi dahi ciddi zamanlar alabildiği için, enerjisini tamamen aynı işe harcayan daha fazla insanın bu iş üzerinde çalışması gerekebiliyor. Orkestrasyon, bu işlemlerin birden çok sayıda cihaza yapılmasıyla gerçekleştiği için, 100 cihaz için de 1000 cihaz için de aynı sayıda mühendis bir Ansible komutuyla tüm cihazlarda aynı değişikliği başlatabiliyor. Cihazları isterse gruplar halinde, 5’er 5’er veya 10’ar 10’ar da güncelleyebiliyor.

Networkler üzerinde yer alan cihazların teker teker uğraşmadan, ortak bir noktadan kontrol edilebilmesi; istenen komutların çalıştırılabilmesi ve çıktılarının alınabilmesi gibi süreçlerde network otomasyon araçları devreye giriyor. Bunların arasında açık kaynaklı ve GPL-3.0 lisanslı olan Ansible sık kullanılan çözümler arasında geliyor. Ansible’ın declarative yapısı sayesinde desteklenen çok sayıda cihaz ve komutta, aynı ayarları tekrar tekrar uygulasak bile Ansible cihazlara bağlanıp çalışan config’e bakıyor, eğer elinde yer alan ayarlarla aynıysa hiçbir işlem yapmadan diğer cihazlara geçiyor. Bir farklılık görürse de düzeltiyor. Bu sayede, herhangi bir sebepten ayarları bozulan/değiştirilen bir cihaz olduğunda içinde neler değişmiş diye elle kontrol etmekle uğraşmadan, işi Ansible’a bırakarak hızlıca önceki çalışır haline döndürülebiliyor. Tüm bunlara ek olarak, yeni bir cihaz alındığında base configuration dahil olmak üzere tüm ayarların tek bir Ansible komutu ile o cihaza da girilmesi sağlanabiliyor.

Ansible birçok kişi tarafından sistem yöneticilerinin kullandığı bir araç olarak bilinse de, özellikle son yıllarda Ansible için network otomasyonu ile sistem otomasyonu arasında pek fark kalmamış durumda. Bu tarafta yapılan çalışmalar ve işbirlikleri, networklerin de sistemlerle benzer şekilde otomasyona tutulabilmesini, orkestrasyonunu, konfigürasyon yönetimini yapabilmemizi ve bunları hem declarative hem de bir sürüm kontrol sistemi üzerinde yapabilmemize imkan sağlıyor.

Ansible, birçok network cihazı üzerindeki entegrasyonu, anlaşılması basit ve güzel duran YAML formatı kullanılması sebebiyle kolay yazımı, template desteği ile de dinamik olarak dosya üretimini destekliyor. Ayrıca, bağlanacağı cihazlar üzerinde bir agent gerektirmediği için karşı taraftaki cihazlara herhangi bir kurulum gerekmiyor. Normalde bağlantısını SSH üzerinden yapsa da, istersek (tercih etmesek de) Ansible’ı telnet veya farklı bağlantı yöntemleri üzerinden network cihazlarına bağlanıp istediklerimizi yapması üzerine ayarlayabiliyoruz.

Network otomasyonu, orkestrasyonu ve konfigürasyon yönetimi, bahsettiğimiz özellikleri yazdığımız dosyalarla sağlanabildiği için bu dosyaları yedeklemek de bir kopyala-yapıştır sürecinden ibaret oluyor. Hatta bu dosyaları git gibi bir sürüm kontrol sistemine vererek, kimin hangi tarih ve saatte hangi dosyada hangi değişikliği yaptığını tutmak ve istenen sürüme geri dönmek oldukça kolay ve takip edilebilir bir hal alıyor.

Arayüz ve Sonuç

Tüm bu süreçleri bir web arayüzü üzerinden kontrol etmek, rol bazlı erişim kontrolü (RBAC), kimin ne zaman hangi işi çalıştırdığı ve daha detaylı süreç takibi gibi birçok ekstra özellik için Ansible Tower veya onun açık kaynaklı ve Apache-2.0 lisanslı upstream’i olan AWX projesi kullanılarak yönetilebilir, ölçeklenebilir, izlenebilir, dağıtık versiyon kontrolüne sahip, otomatize edilmiş bir sistem elde edilebiliyor.

Sonraki yazılarda, bu yazıdaki bazı kavramların açıklamalarına, önemine ve neden hayatımızda yer alması gerektiğine değinerek teknik örneklere doğru ilerleyeceğiz. Güncellemeler ve detaylar için Twitter üzerinden @gurayyildirimTR hesabından bana ulaşabilirsiniz. Ansible ve network otomasyonu ile ilgili paylaşmak istediğiniz tecrübeleriniz varsa onları da dinlemek isterim.

 
comments powered by Disqus