Kubedo Academy’e hoş geldiniz! Bu laboratuvarda Ansible kurulumu, inventory yönetimi ve ilk playbook’unuzu yazmayı öğreneceksiniz.
Zorluk seviyesi: Başlangıç
Süre: Yaklaşık 45 dakika
1. Ansible Nedir?
Ansible, IT otomasyonu için kullanılan açık kaynaklı bir araçtır. Red Hat tarafından geliştirilen Ansible şu özelliklere sahiptir:
| Özellik | Açıklama |
|---|---|
| Agentless | Hedef sistemlerde agent kurulumu gerektirmez |
| SSH tabanlı | Linux/Unix sistemlere SSH ile bağlanır |
| Idempotent | Aynı görevi tekrar çalıştırmak aynı sonucu verir |
| YAML | Okunabilir YAML formatında playbook’lar |
| Push-based | Kontrol makinesinden hedeflere push yapılır |
Ansible vs Diğer Araçlar
| Araç | Mimari | Dil | Öğrenme Eğrisi |
|---|---|---|---|
| Ansible | Agentless | YAML | Düşük |
| Puppet | Agent-based | Ruby DSL | Yüksek |
| Chef | Agent-based | Ruby | Yüksek |
| Salt | Agent/Agentless | YAML/Python | Orta |
2. Ansible Kurulumu
Ubuntu/Debian
$ apt update && apt install ansible -yRHEL/CentOS
yum install epel-release -y
yum install ansible -y
Python pip ile
pip install ansible
Kurulum Doğrulama
$ ansible --version[!TIP] Ansible 2.9+ sürümü kullanmanızı öneririz. Ansible 2.10 ile birlikte koleksiyonlar (collections) eklendi.
3. Ansible Yapısı
Temel Bileşenler
ansible-project/
├── ansible.cfg # Ansible yapılandırması
├── inventory/ # Host tanımları
│ ├── hosts # Statik inventory
│ └── group_vars/ # Grup değişkenleri
├── playbooks/ # Playbook'lar
│ └── site.yml
├── roles/ # Roller
│ └── webserver/
└── files/ # Statik dosyalar
ansible.cfg
[defaults]
inventory = ./inventory/hosts
remote_user = root
host_key_checking = False
retry_files_enabled = False
[privilege_escalation]
become = True
become_method = sudo
become_user = root
4. Inventory (Envanter)
Inventory, Ansible’ın yöneteceği sunucuları tanımlar.
Statik Inventory Örneği
# inventory/hosts
[webservers]
web1.example.com
web2.example.com ansible_host=192.168.1.10
[dbservers]
db1.example.com ansible_port=2222
[production:children]
webservers
dbservers
[all:vars]
ansible_user=admin
Inventory Değişkenleri
| Değişken | Açıklama |
|---|---|
ansible_host | Hedef IP adresi |
ansible_port | SSH portu (varsayılan: 22) |
ansible_user | SSH kullanıcısı |
ansible_ssh_private_key_file | SSH private key yolu |
ansible_become | Privilege escalation |
Inventory Kontrolü
$ ansible-inventory --list -y5. Ad-hoc Komutlar
Playbook yazmadan hızlı görevler için ad-hoc komutlar kullanılır.
Temel Sözdizimi
ansible <host-pattern> -m <module> -a "<arguments>"
Örnekler
Ping testi:
$ ansible all -m pingKomut çalıştırma:
ansible webservers -m shell -a "uptime"
Paket kurma:
ansible webservers -m apt -a "name=nginx state=present"
Dosya kopyalama:
ansible all -m copy -a "src=/etc/hosts dest=/tmp/hosts"
[!NOTE] Ad-hoc komutlar basit görevler için uygundur. Karmaşık işlemler için playbook kullanın.
6. İlk Playbook
Playbook’lar YAML formatında yazılan otomasyon senaryolarıdır.
Basit Playbook
# playbooks/first.yml
---
- name: İlk Playbook
hosts: webservers
become: yes
tasks:
- name: Nginx kurulumu
apt:
name: nginx
state: present
update_cache: yes
- name: Nginx servisini başlat
service:
name: nginx
state: started
enabled: yes
- name: Index sayfası oluştur
copy:
content: "<h1>Merhaba Ansible!</h1>"
dest: /var/www/html/index.html
Playbook Çalıştırma
ansible-playbook playbooks/first.yml
Playbook Seçenekleri
| Seçenek | Açıklama |
|---|---|
-i | Inventory dosyası |
-l | Limit (belirli hostlar) |
-v | Verbose (-vvv daha detaylı) |
--check | Dry-run (değişiklik yapmaz) |
--diff | Değişiklikleri göster |
-t | Tags (belirli task’ları çalıştır) |
7. Modüller
Ansible modülleri, belirli görevleri gerçekleştiren kod parçalarıdır.
Sık Kullanılan Modüller
| Modül | Açıklama |
|---|---|
apt / yum | Paket yönetimi |
copy | Dosya kopyalama |
template | Jinja2 şablon |
file | Dosya/dizin yönetimi |
service | Servis yönetimi |
user | Kullanıcı yönetimi |
shell / command | Komut çalıştırma |
git | Git repository |
docker_container | Docker container |
Modül Dokümantasyonu
$ ansible-doc apt8. Değişkenler
Playbook’ta Değişken Tanımlama
---
- name: Değişken Örneği
hosts: webservers
vars:
http_port: 80
max_clients: 200
tasks:
- name: Apache yapılandırması
template:
src: httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
Değişken Önceliği (En düşükten en yükseğe)
- Role defaults
- Inventory variables
- Playbook vars
- Task vars
- Extra vars (-e)
Extra Variables
ansible-playbook site.yml -e "http_port=8080"
Konu Tekrarı - Kısa Sınav
Sonraki Adım
Bu temel bilgilerle Ansible kullanmaya başlayabilirsiniz. İleri seviye konular için:
- Roller (Roles): Tekrar kullanılabilir otomasyon blokları
- Jinja2 Şablonları: Dinamik konfigürasyon dosyaları
- Ansible Galaxy: Hazır roller ve koleksiyonlar
- Ansible Vault: Şifreli değişkenler