Ansible; Red Hat tarafından desteklenen, agent’sız çalışan açık-kaynak konfigürasyon yönetimi ve otomasyon aracıdır. Hedef makineler üzerinde herhangi bir daemon çalıştırmaz; SSH (veya WinRM) üzerinden bağlanır, Python yorumlayıcısını kullanarak modülleri çalıştırır. Bu basitlik, Ansible’ı küçük ekiplerden hyperscale operasyonlara kadar her ölçekte kullanışlı kılar.
Konfigürasyon dili olarak YAML (playbook’lar) kullanılır; Jinja2 şablonları ile değişken ikamesi yapılır. Roller (rol = bir hizmetin tüm yapılandırma birimi) yeniden kullanımın temel yapı taşıdır ve Ansible Galaxy üzerinden topluluk paylaşımı vardır.
Mono’nun yaklaşımı
Mono ekibi, 800+ üretim sunucusunu Ansible ile yönetir. Standartlarımız:
- Inventory: Statik YAML değil, dinamik inventory (cloud sağlayıcı API’sinden veya Netbox’tan).
- Vault: Tüm sırlar
ansible-vaultile şifrelenir; CI’davault-password-fileile çözülür. Hassas üretim ortamlarında HashiCorp Vault ile entegrasyon. - Roller: Kurumsal “altın imaj” rolü → güvenlik sıkılaştırma, izleme ajanları, log shipping. Her hizmet için ayrı bir rol.
- Test: Molecule ile rol başına Docker bazlı testler. CI pipeline her PR’da
molecule testçalıştırır. - Yürütme: AWX/Ascender üzerinden zamanlanmış işler; sürüm güncellemeleri için canary node akışı.
Tipik kurulum şablonu
Yeni bir Linux sunucu Mono operasyonuna alındığında çalışan ilk playbook ~12 dakika sürer ve şu adımları içerir: hostname, /etc/hosts, sudo politikaları, kullanıcı/SSH anahtarı dağıtımı, NTP, log shipping (Fluent Bit → Loki), izleme ajanı (Zabbix/Wazuh), kernel parametreleri, paket güncellemeleri, otomatik güvenlik yamaları. Bu süreçte hiçbir manuel adım yoktur.
Yaygın sorunlar ve çözümler
- Yavaş playbook’lar:
gather_facts: falseile hızlandırın, gerekli olduğundagather_subsetkullanın.pipelining = True(ansible.cfg) %30 hız kazandırır. becomepermission denied: Hedef host’ta sudo NOPASSWD veyabecome_passwordile sırrın doğru iletilmesi gerekir.- Versiyon kayması: Ansible çekirdeği ile collection sürümlerini
requirements.yml‘da pin’leyin. - Idempotency kırılması: Shell modülünü kullanmak yerine native modüller; gerekirse
changed_when: falseveyacheck_mode: falseile kontrol.
İlgili hizmetlerimiz
Sıkça sorulan sorular
Ansible mi Terraform mu?
Agent'sız olması bir kısıtlama mı?
AWX/Ascender ne zaman gerekli?
Idempotency'i nasıl garanti ederiz?
ansible.builtin.copy, package, service); shell/command’tan kaçının. Eğer şart ise creates/removes argümanlarıyla durum kontrolü ekleyin. CI’da --check --diff ile dry-run zorunlu olsun.