Chef Nedir? Chef Server Kurulumu ve Kullanımı

Nuri GUNDOGAN
TurkNetDevOps
Published in
4 min readJan 18, 2021

Merhaba, IT alanında sıkça duyulan Chef; sistem ve uygulama yöneticileri tarafından tercih edilen, sistem altyapılarının kurulumlarını otomatize etme imkanı sağlayan ve yönetimi kolaylaştırmayı hedefleyen açık kaynak kodlu bir yazılımdır.

Chef, script tabanlı çalışan bir uygulamadır ve arka planda Ruby kullanmaktadır.

Kullanım amacına kısaca bir örnek verecek olursak; linux tabanlı bir web sunucunuz var ve içerisinde 10 adet site barındırıyorsunuz. Kaynak yetersizliğinden veya performans sorunlarından dolayı sunucu sayısını çoğaltmak ve farm yapısına geçmek isteyebilirsiniz. Normal bir durumda ilk olarak makineye NGINX veya Apache tarzı bir uygulama kurup, yayın yapılacak sitelerin dosyalarını ve konfigürasyonları tek tek yeni makinede veya makinelerde hazırlamanız gerekiyor olacaktı. Ama Chef ile bu işlemleri sadece bir kere script haline getirip, 10 adet web sitesini yeni bir makine veya makinelerde saniyeler içerisinde ayağa kaldırabilirsiniz.

Kuruluma ve kullanımına geçmeden önce Chef içinde en çok kullanılan birkaç teknik terime değinmek istiyorum. Bunlar;

  • Knife: Chef Server ile iletişimi sağlayan ve Chef ile uzak makineye kurulum yapma sırasında kullanılan komuttur. Örneğin; knife upload cookbook web-sunucu-kurulumu. Bu komut sayesinde oluşturulan cookbook’umuzu Chef Server’a upload etmiş oluyoruz.
  • Cookbook: Script havuzumuzun genel ismi gibi düşünebilirsiniz. Örneğin; cookbook ismi “web-sunucu-kurulumları” olsun. Bu oluşturulan cookbook’un altında ayrı ayrı nginx-kurulumu, apache-kurulumu vs. oluşturabiliriz.
  • Recipe: Yukarıdaki nginx-kurulumu ve apache-kurulumu örneğinde olduğu gibi, cookbook’un altında yer alan her alt kurulumlar recipe olarak adlandırılıyor. Aslında biz kurulum scriptlerimizi recipe denilen dosyaların içine Ruby kullanarak (uzantısı .rb) yazıyoruz. Örneğin; nginx-kurulumu.rb

CHEF SERVER KURULUMU

Chef Server’ın kurulumunu linux (Ubuntu) üzerinde gerçekleştireceğiz. İlk olarak, makinemizin hostname kısmını düzenleyelim ve hosts dosyamıza kayıt girelim.

hostnamectl set-hostname chef.demo.comvi /etc/hosts >> 127.0.0.1 chef.demo.com

Makinemize uygun Chef Server paketini aşağıdaki linkten seçip indirelim.

https://downloads.chef.io/

Aşağıdaki komutlarla yükleme işlemini gerçekleştirelim.

dpkg -i chef-server-*.debchef-server-ctl reconfigure

Yüklemeden sonra, Chef servisinin durumunu kontrol edelim.

chef-server-ctl status

Chef Server’ı yöneteceğimiz web arayüzünün kurulumunu, aşağıdaki komutlarla gerçekleştirelim.

chef-server-ctl install chef-managechef-server-ctl reconfigurechef-manage-ctl reconfigurechef-manage-ctl reconfigure --accept-license

Chef Server’ın konfigürasyonlarının tutulacağı bir klasör oluşturalım.

mkdir ~/.chef

Oluşturduğumuz klasörün içinde, web arayüzün erişimi için admin adında bir kullanıcı oluşturalım. Şifresi de Password1 olsun.

chef-server-ctl user-create admin Chef Administrator chef@demo.com Password1 -f ~/.chef/admin.pem

Tüm cookbook ve ayarların tutulacağı Chef Demo adında bir organizasyon oluşturalım.

chef-server-ctl org-create chef.demo.com 'Chef Demo' 
--association_user admin -f ~/.chef/my_org.pem

En sonda arayüz erişimini, oluşturduğumuz kullanıcı adı ve şifre ile giriş yaparak kontrol edelim.

chef.demo.com

CHEF KULLANIMI

Local bilgisayarımızdan Chef kullanarak uzak makineye kurulum yapabilmek için ChefDK indirip kurmamız gerekiyor. ChefDK, Chef Server ve local bilgisayarımız arasında bir link oluşturuyor gibi düşünebilirsiniz. Ben local bilgisayarımda da linux (Ubuntu) kullandığım için linux versiyonunu indirip kurdum. Aşağıdaki linkten size uygun sürümü indirip kullanabilirsiniz. Bundan sonraki Chef kullanım süreçlerini linux üzerinden anlatıyor olacağım.

https://downloads.chef.io/chefdk/

İkinci adımda Chef Yönetim Arayüzü’nden, Starter Kit’i indirmemiz gerekiyor. Starter Kit’i Chef Server konfigürasyonlarının bulunduğu dosyalar olarak düşünebilirsiniz. Size tavsiyem yeni bir folder oluşturup tüm işlemlerinizi bu folder üzerinden halletmeniz. Böylece karışıklığı ortadan kaldırmış olursunuz. Ben /home/nuri/chef-repo adında bir folder oluşturup, indirdiğim Starter Kit’i bunun içine attım. Ve artık tüm işlemlerimi bu dizin üzerinden yapıyor olacağım.

Aşağıdaki komutlarla, local bilgisayarımız ile Chef Server arasındaki bağlantıyı kontrol ediyoruz.

knife ssl fetchknife ssl check

Şimdi sıra ilk script havuzumuzu yani cookbook oluşturmaya geldi. Aşağıdaki komut ile ilk cookbook’umuzu oluşturalım.

chef generate cookbook web-server-setups
Görsel — 1

Oluşturduğumuz cookbook’u Chef Server’a upload edelim.

knife upload cookbook web-server-setups
Görsel — 2

Daha sonra cookbook’un içinde yer alan recipes klasörünün altındaki default.rb dosyasına kısa bir script yazalım.

Tekrardan oluşturduğumuz cookbook’u, Chef Server’a güncel hali ile upload edelim.

knife upload cookbook web-server-setups
Görsel — 3

Şimdi; aşağıdaki komut ile uzak sunucuya (CentOS) NGINX kurulumunu, oluşturduğumuz cookbook ile Chef üzerinden gerçekleştirelim.

knife bootstrap ServerIP --ssh-user user --sudo --use-sudo-password --node-name ServerName --run-list 'recipe[web-server-setups::default]'
Görsel — 4

Böylelikle uzak sunucuya Chef ile NGINX kurulumunu saniyeler içerisinde gerçekleştirmiş olduk. Chef ile yapabileceklerimiz bu kadar sınırlı değil elbette. Daha detaylı ve kullanışlı scriptler internette mevcut. Basit ve anlaşılır bir örnek olması için NGINX kurulumunu seçtim. Umarım faydalı bir anlatım olmuştur. Bir sonraki yazıda görüşmek üzere…

--

--