Di episode ini kita akan membedah arsitektur Chef dari alur Chef client run, peran Workstation, Chef Infra Server, dan Nodes, hingga komponen inti seperti cookbook, recipe, resource, dan run list.

Di episode 1 kalian sudah memahami mengapa Chef ada: menyelesaikan configuration drift, menjamin idempotency, dan menjadikan infrastruktur sebagai kode dengan model pull-based. Pertanyaan berikutnya yang wajar muncul adalah: bagaimana semua itu bekerja di balik layar?
Episode 2 ini menjawabnya dengan membedah arsitektur utama Chef. Kita akan menelusuri alur lengkap sebuah Chef client run — mulai dari Ohai yang mengumpulkan fakta node, mengunduh cookbook dan run_list, meng-compile recipe, mengkonvergen state, hingga melaporkan hasilnya. Kemudian kita akan membahas peran tiga komponen utama (Workstation, Chef Infra Server, Nodes) dan mengenal sembilan komponen inti yang akan kalian pakai setiap hari.
Ini adalah episode konseptual terpenting di fase awal series. Setelah menguasai peta arsitektur ini, seluruh episode praktik berikutnya hanyalah detail dari kerangka yang sama. Mari kita mulai dari jantungnya: alur chef-client.
Saat sebuah node menjalankan chef-client, terjadi serangkaian langkah yang berurutan. Pahami alur ini dengan baik karena seluruh troubleshooting Chef bermuara pada memahami fase mana yang gagal.
1. Ohai ── kumpulkan fakta node (OS, memory, network, dll)
2. Unduh ── ambil cookbook & run_list dari Chef Infra Server
3. Compile ── terjemahkan recipe menjadi kumpulan resource
4. Converge ── terapkan setiap resource (sesuai desired state)
5. Report ── kirim hasil run ke server untuk diauditLangkah pertama, chef-client menjalankan Ohai: tool yang mengumpulkan fakta (disebut attributes) tentang node — sistem operasi, versi kernel, memory, disk, hostname, IP address, dan ribuan data lainnya. Fakta ini tersimpan sebagai attribute node yang bisa dibaca recipe nanti (akan dibahas di episode 5).
Node memiliki run_list — daftar berurutan recipe yang harus diterapkan. Berdasarkan run_list ini, node mengunduh cookbook-cookbook yang dibutuhkan dari Chef Infra Server, beserta semua dependency-nya.
Recipe Ruby diterjemahkan menjadi kumpulan resource dalam memory. Fase ini belum mengubah apa pun — ia hanya membangun "rencana" resource yang ingin diterapkan, lengkap dengan properti dan action masing-masing.
Fase inti: Chef mengeksekusi setiap resource. Untuk setiap resource, ia memeriksa state saat ini di node dan hanya melakukan aksi jika terjadi perbedaan dari desired state. Inilah idempotency yang bekerja — resource yang sudah sesuai dilewati tanpa melakukan apa-apa.
Terakhir, hasil run — resource mana yang berhasil, berubah, atau gagal — dikirim kembali ke server untuk disimpan dan diaudit. Di ekosistem modern, laporan ini bisa ditampilkan di Chef Automate.
Tip
Jika kalian hanya ingat satu hal dari episode ini, ingatlah lima fase ini: Ohai → Unduh → Compile → Converge → Report. Semua diagnosis masalah Chef dimulai dengan menentukan fase mana yang bermasalah.
Arsitektur Chef dibagi menjadi tiga peran besar yang tidak bisa dipisahkan:
+------------------+ +----------------------+ +----------------+
| WORKSTATION | ---> | CHEF INFRA SERVER | <--- | NODES |
| menulis kode | | registry & store | | jalankan |
| (author) | | cookbook, data, | | chef-client |
+------------------+ | node data, policies | +----------------+
upload / knife +----------------------+ pull & applyWorkstation adalah mesin tempat kalian sebagai developer menulis kode: membuat cookbook, menulis recipe, menguji lokal, lalu meng-upload hasilnya ke server menggunakan knife atau berks. Inilah "kursi penulis" infrastruktur.
Chef Infra Server adalah pusat registry dan gudang penyimpanan. Ia menyimpan cookbook, node data, data bag, environment, roles, dan kebijakan (policy). Setiap node berkomunikasi dengan server ini untuk mendapatkan konfigurasi yang harus diterapkan.
Nodes adalah mesin yang dikelola (managed node). Di setiap node berjalan agent chef-client, yang secara berkala menarik konfigurasi dari server dan menerapkannya. Node bisa berupa server fisik, VM, container, maupun instance cloud.
| Komponen | Peran | Lokasi |
|---|---|---|
| Workstation | Author kode (cookbook, recipe) | Mesin developer |
| Chef Infra Server | Registry, cookbook store, data | Server sentral |
| Nodes | Menjalankan chef-client | Server target |
Note
Untuk belajar di rumah tanpa server penuh, ada chef-zero dan chef-solo yang mensimulasikan Chef Infra Server di satu mesin — ini akan kita praktikkan di episode 3.
Ini adalah sembilan komponen yang akan menemani kalian sepanjang series. Pahami perannya satu per satu:
Unit terbesar organisasi kode Chef. Sebuah cookbook berisi recipe, attribute, template, file, library, dan metadata — semuanya untuk mengelola satu area konfigurasi, misalnya cookbook nginx.
File Ruby yang berisi resource-resource untuk dikonvergen. Recipe adalah "resep masakan" — urutan resource yang mendeskripsikan bagaimana node harus dikonfigurasi.
Unit terkecil dan paling fundamental: satu pernyataan tentang apa yang diinginkan. Contoh package, service, file, template. Resource akan dibahas mendalam di episode 4.
Data tentang node, baik dari Ohai (otomatis) maupun dari cookbook (default/override). Attribute memberi recipe "konteks" seperti OS dan versi aplikasi.
Daftar urutan recipe (dan/atau role) yang harus dijalankan node. Run list adalah jembatan antara node dan cookbook.
Penyimpanan data global yang terstruktur di server, misalnya daftar user atau pengaturan aplikasi. Bisa dienkripsi untuk menyimpan secret (dibahas di episode 7).
Pengelompokan logis node, misalnya development, staging, production. Environment memungkinkan konfigurasi berbeda per tahap tanpa mengubah cookbook.
Template run list yang bisa dipakai ulang. Role webserver bisa berisi beberapa recipe dan dipasang ke banyak node sekaligus.
CLI utama Chef untuk berinteraksi dengan server: knife node list, knife cookbook upload, knife data bag create, dan lainnya.
knife node list # daftar semua node terdaftar
knife cookbook upload nginx # upload cookbook ke server
knife data bag create admins # buat data bag baru
knife environment show production # lihat detail environmentImportant
Jangan bingung membedakan tiga tingkatan: cookbook berisi recipe, recipe berisi resource, dan resource adalah pernyataan desired state terkecil. Setiap kali merasa tersesat di materi Chef, kembalilah ke hierarki ini.
Mari kita rangkum bagaimana komponen-komponen itu bekerja sama dalam satu skenario nyata: sebuah node baru ingin dipasangi nginx.
nginx berisi recipe default yang mendeklarasikan resource package 'nginx' dan service 'nginx'.knife cookbook upload nginx.recipe[nginx::default].chef-client menarik run_list dan cookbook dari server, meng-compile recipe menjadi resource, lalu mengkonvergen: menginstall package nginx dan memastikan service-nya berjalan.package 'nginx' do
action :install
end
service 'nginx' do
action [:enable, :start]
endDi episode 2 ini kita sudah membedah arsitektur Chef secara menyeluruh: alur lima fase chef client run (Ohai, unduh, compile, converge, report), peran tiga komponen utama (Workstation, Chef Infra Server, Nodes), dan sembilan komponen inti yang membentuk bahasa kerja Chef.
Inti yang harus dibawa pulang:
chef-client.Sekarang peta arsitektur sudah jelas di kepala kalian. Di episode 3 selanjutnya, kita langsung turun tangan: setup dan instalasi — menginstall Chef Workstation dan Chef Client, menjalankan chef-client dalam mode client, solo, maupun zero, melakukan bootstrap node, dan membuat struktur cookbook pertama dengan chef generate cookbook.