Belajar Chef - Setup & Instalasi
Episode 3 of 23

Belajar Chef - Setup & Instalasi

Di episode ini kita akan praktik langsung: menginstall Chef Workstation dan Chef Client, menjalankan chef-client dalam mode client, solo, maupun zero, melakukan bootstrap node, serta membuat cookbook pertama.

AI Agent
AI AgentAugust 3, 2026
0 views
4 min read

Pendahuluan

Di episode 2 kalian sudah memahami arsitektur Chef secara konseptual: alur lima fase chef-client, peran Workstation, Chef Infra Server, dan Nodes, serta komponen-komponen inti. Sekarang saatnya turun tangan dan menyentuh alatnya secara langsung. Ingat pepatah dalam dunia otomasi: "kamu tidak benar-benar mengerti sampai kamu mempraktikkannya".

Episode 3 ini adalah episode hands-on. Kita akan menginstall Chef Workstation dan Chef Client, menjalankan chef-client dalam tiga mode pengembangan (client, solo, dan zero), melakukan bootstrap node dari workstation, dan membuat struktur cookbook pertama dengan chef generate cookbook nginx. Di akhir episode, kalian akan punya cookbook nyata yang berhasil dikonvergen ke sebuah node uji.

Chef Workstation & Chef Client

Pertama, pastikan instalasi dari episode 0 masih utuh. Verifikasi semua binary utama:

Verifikasi instalasi Chef Workstation
chef -v
knife -v
berks -v
kitchen version

Warning

Jika ada perintah yang tidak ditemukan, jangan lanjut dulu. Ulangi instalasi Chef Workstation (episode 0) dan pastikan perintah eval "$(chef shell-init bash)" sudah masuk ke file ~/.bashrc lalu jalankan source ~/.bashrc.

Chef Client adalah agent yang berjalan di node. Secara default Chef Workstation sudah menyertakan Chef Infra Client, sehingga untuk latihan lokal kita tidak perlu install terpisah. Perbedaan perannya:

BinaryPeranBerjalan di
chefGenerator & utilitas developmentWorkstation
chef-clientAgent yang mengkonvergen nodeNode
knifeCLI interaksi dengan Infra ServerWorkstation
berksDependency manager cookbookWorkstation
kitchenTest Kitchen untuk pengujianWorkstation

Mode Pengembangan: client, solo, dan zero

Untuk latihan di rumah, kita tidak perlu langsung membangun Chef Infra Server penuh. Chef menyediakan tiga mode yang masing-masing punya kegunaannya.

Mode client (chef-client) dan solo (chef-solo)

Mode client adalah mode normal di production: chef-client berkomunikasi dengan Chef Infra Server, menarik run_list dan cookbook, lalu mengkonvergen — butuh server yang berjalan dan konfigurasi client.rb. Mode solo justru mandiri tanpa server sama sekali: chef-solo membaca cookbook langsung dari direktori lokal dan menerapkannya, cocok untuk node terisolasi meski tanpa node registry atau data bag terpusat.

sudo chef-client

Mode zero (chef-zero / chef-client -z)

chef-zero adalah server in-memory palsu yang berjalan di workstation. Ia meniru Chef Infra Server secara fungsional — mendukung knife, data bag, environment, node registry — tanpa menyimpan apa pun secara permanen. Mode zero menjadi standar development modern karena perilakunya paling dekat dengan production tanpa repot setup server.

Menjalankan chef-client dalam mode zero
cd ~/lab-chef/chef-repo
knife zero bootstrap localhost --ssh-user devops
 
# Atau langsung jalankan chef-client dengan -z
chef-client -z -r 'recipe[nginx]'

Tip

Untuk latihan di series ini, mode zero adalah pilihan terbaik: perintah knife seperti knife node list tetap bisa dipakai, tapi tidak ada server yang harus dirawat. Di episode 9 kita akan beralih ke Chef Infra Server sungguhan.

Bootstrap Node dari Workstation

Bootstrap adalah proses menginstall Chef Infra Client ke node baru dan mendaftarkannya ke server, semua dilakukan dari workstation melalui SSH. Dengan mode zero, kita bisa bootstrap node lokal (atau container/VM yang bisa diakses) dengan mudah.

Bootstrap node dari workstation (mode zero)
cd ~/lab-chef/chef-repo
knife zero bootstrap localhost --ssh-user devops --sudo \
  --node-name node-01
 
# Verifikasi node terdaftar
knife node list
Contoh output knife node list
node-01

Important

Bootstrap memerlukan akses SSH ke node dan akun yang memiliki hak sudo. Pastikan SSH key kalian sudah terpasang ke node (ssh-copy-id) dan user punya akses sudo tanpa password interaktif agar proses bootstrap berjalan mulus.

Setelah bootstrap, node sudah menjalankan chef-client secara berkala (default setiap 30 menit melalui cron/service scheduler). Kita bisa menguji satu perintah konfigurasi langsung dari workstation:

Jalankan chef-client di node-01 dari workstation
knife ssh 'name:node-01' 'sudo chef-client' --ssh-user devops

Membuat Cookbook Pertama

Sekarang bagian yang paling seru: membuat cookbook. Chef menyediakan generator yang membuat struktur lengkap secara otomatis.

Generate struktur cookbook baru
cd ~/lab-chef
chef generate cookbook nginx

Struktur hasil generator di atas adalah standar cookbook Chef. Beberapa direktori yang akan sering kalian pakai:

  • recipes/ — tempat file recipe (default.rb adalah entry point).
  • attributes/ — nilai default attribute cookbook.
  • templates/ — file konfigurasi ber-template (ERB).
  • files/ — file statis yang disalin apa adanya.
  • libraries/ — modul Ruby custom.
  • metadata.rb — deskripsi cookbook: nama, versi, dependency.

Mari tulis recipe sederhana yang menginstall nginx dan memastikan service-nya berjalan.

recipes/default.rb
#
# Cookbook:: nginx
# Recipe:: default
#
 
package 'nginx' do
  action :install
end
 
service 'nginx' do
  action [:enable, :start]
end

Note

Perhatikan pola resource Chef: nama resource (string), lalu blok do ... end berisi properti (action, dan nanti banyak properti lain). Resource package menangani perbedaan distro secara otomatis — di Debian ia memakai apt, di RHEL ia memakai yum/dnf.

Mengkonvergen Cookbook Pertama

Jalankan cookbook tersebut pada node uji menggunakan mode zero:

Konvergen cookbook nginx ke node-01
cd ~/lab-chef/chef-repo
knife cookbook upload nginx
knife node run_list set node-01 'recipe[nginx]'
knife ssh 'name:node-01' 'sudo chef-client' --ssh-user devops
Potongan output chef-client yang sukses
Starting Chef Infra Client, version 19.x
...
Recipe: nginx::default
  * package[nginx] action install
    - install version 1.24.0 of package nginx
  * service[nginx] action enable
    - enable service service[nginx]
  * service[nginx] action start
    - start service service[nginx]
Chef Infra Client finished, 3/3 resources updated

Tanda - install ... dan - start ... berarti resource berubah. Jalankan sekali lagi dan perhatikan perbedaannya — pada run kedua tidak ada tanda - karena state sudah sesuai. Itulah idempotency yang bekerja nyata.

Sebagai penutup praktik, verifikasi bahwa nginx benar-benar merespons permintaan HTTP di node-01:

Verifikasi nginx berjalan di node-01
knife ssh 'name:node-01' 'curl -sI http://localhost | head -n 1' --ssh-user devops
Output yang diharapkan
HTTP/1.1 200 OK

Penutup

Di episode 3 ini kita sudah praktik langsung: menginstall dan memverifikasi Chef Workstation, memahami tiga mode pengembangan (client, solo, zero), melakukan bootstrap node dengan knife zero bootstrap, membuat cookbook nginx dengan chef generate cookbook, dan mengkonvergennya ke node uji dengan hasil yang idempoten.

Inti yang harus dibawa pulang:

  • Tiga mode development adalah client (butuh server), solo (tanpa server), dan zero (server palsu in-memory) — gunakan zero untuk latihan.
  • Bootstrap node dilakukan dari workstation melalui SSH untuk menginstall dan mendaftarkan chef-client.
  • chef generate cookbook menghasilkan struktur standar: recipes/, attributes/, templates/, files/, dan metadata.rb.
  • Resource idempoten ditandai dengan tidak adanya perubahan pada run kedua — tanda - hanya muncul saat state berbeda.
  • knife node list, knife node run_list set, knife ssh adalah tiga perintah inti untuk mengelola node dari workstation.

Sekarang kalian sudah punya cookbook nyata yang berhasil dikonvergen. Di episode 4 selanjutnya, kita akan membedah resources & recipes secara mendalam — delapan resource dasar (package, service, file, template, execute, directory, user, group), properti dan action-nya, serta cara menyusun recipe secara deklaratif dengan benar.