Ansible ile Uzak Bilgisayarlara Docker ve Docker Compose Nasıl Yüklerim?

  • Agent’a gerek duymaksızın çalışması, istemci makinelere ek yük getirmediği için önemli artılarından bir tanesi. SSH ve WinRM üzerinden komutların iletilmesi sağlanıyor.
  • Yaml formatlı konfigürasyon dosyası (Ansible literatüründe playbook olarak adlandırılır) okunması ve geliştirilmesi kolay bir altyapı hazırlığı sunuyor.
  • Task bazlı sıralı bir şekilde çalışması, her task’ın çıktısını kullanıcı dostu bir şekilde göstermesi ve task’ların sonuçlarına göre akışın düzenlenebilmesi; kısaca bir workflow mantığı üzerine kurgulanmış bir ürün olması ürüne adaptasyonu oldukça kısaltıyor.
Kaynak: https://sysadmincasts.com/episodes/43-19-minutes-with-ansible-part-1-4

Docker ve Docker Compose Kurulumu

Yazının bundan sonrasında bir management node’a sahip olduğunuzu ve bu node’da Ansible’ın kurulu olduğunu varsayıyorum.

  • MANAGEMENT NODE-> 192.168.56.4
  • CLIENT01 -> 192.168.56.5
  • CLIENT02 -> 192.168.56.6
  • CLIENT03 -> 192.168.56.7
client01 ansible_host=192.168.56.5
client02 ansible_host=192.168.56.6
client03 ansible_host=192.168.56.7
[swarm_all]
client01
client02
client03
client01 | SUCCESS => {
"changed": false,
"ping": "pong"
}
client02 | SUCCESS => {
"changed": false,
"ping": "pong"
}
client03 | SUCCESS => {
"changed": false,
"ping": "pong"
}
TASK [Add Docker's official GPG key] *******************************************
ok: [client01]
ok: [client02]
ok: [client03]

Ansible Playbook

Kritik alanlardan biri root seviyedeki hosts alanı. Bu alana girilen ifade, hosts dosyasına tanımladığımız gruba işaret ediyor. all ifadesi kullanılarak, envanterdeki tüm makinelerde akışın çalışması sağlanabilir.

- name: Add Docker's apt repository
apt_repository:
repo: "deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_lsb.codename }} stable"
state: present
  • name: Task’lara dair yapacağınız açıklamaları bu alanda konumlandırabilirsiniz. Bu alana yazdığınız metin, ekrana basılan çıktıda da görünecektir.
  • apt_repository: Ansible içerisinde öntanımlı onlarca task bulunuyor. Paket yüklemesi, shell çalıştırma, servis tanımlama gibi komutları soyutlayan nesnelere task deniyor. Bu örnekte paket yöneticisine yeni bir paket kaynağı tanımlaması yapılıyor. {{ ansible_lsb.codename }} ifadesinde süslü parantezler içerisindeki ifade playbook variable olarak literatürde geçiyor. Örnek özelindeki ifade ile de, Linux dağıtımını almaya çalışıyoruz. Değişkenden; Ubuntu 16.04.4 ise “xenial”, Ubuntu 14.04.5 ise “trusty” gibi değerler dönecek ve metin içerisine yerleştirilecek. Kullanabileceğiniz bazı değişkenlere bu adresten ulaşabilirsiniz.
  • state: Yüklenecek paketin durumunun belirtildiği alan. Varsayılan olarak present değeri seçili. latest, build-dep gibi alternatifler de seçilebilir.

Küçük Bir Bonus

Bunun bir arayüzü yok mudur? sorusu kafanızı kurcalıyorsa ücretsiz olarak dağıtılan AWX ve lisanslı Ansible Tower ürünleri ihtiyacınızı maksimum seviyede giderecektir. Ancak bu tür ürünleri öğrenmenin — hatta üründen keyif almanın — en güzel yolunun CLI kullanımından ve konfigürasyon dosyalarının elle tanımlanmasından geçtiğine inananlardanım.

--

--

Engineering Manager (at) Hepsiburada. Former trainer & consultant. Tweets are mostly about tech and coding. https://superpeer.com/selcukusta

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Selçuk Usta

Selçuk Usta

Engineering Manager (at) Hepsiburada. Former trainer & consultant. Tweets are mostly about tech and coding. https://superpeer.com/selcukusta