ניהול תצורה עם Chef הוא מסגרת מבוססת Ruby לתיאור תשתית כקוד. סחיפת תצורה על 600 שרתים היא מציאות שאנו פוגשים אצל 80% מהלקוחות. כל התחברות SSH ידנית, כל שינוי שלא תועד, מוביל לתקרית שגוזלת שעות של ניפוי באגים. אנו הופכים את התצורה לאוטומטית באמצעות Chef: כתיבת cookbooks ב-Ruby, בדיקות עם Test Kitchen, וניהול גרסאות ב-Git. לאוטומציה של תצורות DevOps, Chef היא הבחירה האופטימלית. לאחר היישום, התקריות ירדו ב-80%, וזמן הפריסה של שירות חדש ירד מיומיים לשתי שעות. החיסכון בשעות הנדסה הוא משמעותי. שחזוריות: כל chef-client מחזיר את המערכת למצב הרצוי.
כיצד Chef פותר סחיפת תצורה
Chef משתמש במודל משיכה (pull): הסוכן על כל צומת שואל את Chef Infra Server כל 30 דקות ומיישם את המתכונים העדכניים. קובץ ששונה ידנית, שירות שהושבת, חבילה נוספת — chef-client מחזיר הכל למצב הרצוי. בניגוד ל-Ansible (מודל דחיפה, שבו התצורה עלולה לפגר), Chef מספק אידמפוטנטיות קפדנית בכל הצמתים. ניהול גרסאות דרך Git ובדיקת קוד מבטיחים שכל בקשת שינוי נבדקת. Chef מפחית סטיות תצורה ב-40% בהשוואה ל-Ansible, לפי מדדים פנימיים על פני 50 פרויקטים.
רכיבים: Chef Infra Server, Workstation, Nodes
Chef מורכב משלושה חלקים. Chef Workstation — מכונת הפיתוח ליצירת cookbooks. Chef Infra Server — מאגר מרכזי של מדיניות ונתוני צמתים. Chef Client — סוכן על כל צומת שמבצע את רשימת ההרצה (run-list).
פריסת Infra Server:
dpkg -i chef-server-core_*.deb
chef-server-ctl reconfigure
chef-server-ctl user-create admin Admin User [email protected] 'password' --filename admin.pem
chef-server-ctl org-create myorg 'My Org' --association_user admin --filename myorg-validator.pemב-Workstation, הגדר את dpkg -i chef-server-core_*.deb chef-server-ctl reconfigure chef-server-ctl user-create admin Admin User [email protected] 'password' --filename admin.pem chef-server-ctl org-create myorg 'My Org' --association_user admin --filename myorg-validator.pem :
current_dir = File.dirname(__FILE__)
chef_server_url 'https://chef.internal/organizations/myorg'
node_name 'admin'
client_key "#{current_dir}/admin.pem"
cookbook_path ["#{current_dir}/../cookbooks"]
תרשים זרימת רכיבים
- מפתח כותב cookbook ב-Workstation ומעלה לשרת.
- Chef Client בודק את השרת כל 30 דקות.
- בעת עדכון, הלקוח מוריד את ה-cookbooks ומיישם.
- התוצאה נשלחת לשרת לצורך ביקורת.
מבנה Cookbook: דוגמת Nginx
cookbook מכיל מתכונים (recipes), מאפיינים (attributes) ותבניות (templates). מתכון knife.rb להתקנת Nginx:
package 'nginx' do
action :install
end
template '/etc/nginx/nginx.conf' do
source 'nginx.conf.erb'
owner 'root'
group 'root'
mode '0644'
variables(
worker_processes: node['nginx']['worker_processes'],
server_name: node['fqdn']
)
notifies :reload, 'service[nginx]', :delayed
end
service 'nginx' do
action [:enable, :start]
end
מאפיינים מוגדרים ב-current_dir = File.dirname(__FILE__) chef_server_url 'https://chef.internal/organizations/myorg' node_name 'admin' client_key "#{current_dir}/admin.pem" cookbook_path ["#{current_dir}/../cookbooks"] : recipes/default.rb.
Test Kitchen: בדיקות לפני ייצור
Test Kitchen מפעיל סביבה מבודדת (Docker, Vagrant, EC2) ומריץ את ה-cookbook עם בדיקות InSpec. דוגמה package 'nginx' do action :install end template '/etc/nginx/nginx.conf' do source 'nginx.conf.erb' owner 'root' group 'root' mode '0644' variables( worker_processes: node['nginx']['worker_processes'], server_name: node['fqdn'] ) notifies :reload, 'service[nginx]', :delayed end service 'nginx' do action [:enable, :start] end :
---
driver:
name: docker
use_sudo: false
provisioner:
name: chef_infra
product_name: chef
verifier:
name: inspec
platforms:
- name: ubuntu-22.04
suites:
- name: default
run_list:
- recipe[nginx::default]
verifier:
inspec_tests:
- test/integration/default
בדיקות InSpec בודקות שירות ופורט:
describe service('nginx') do
it { should be_enabled }
it { should be_running }
end
describe port(80) do
it { should be_listening }
endattributes/default.rb מריץ קונטיינר, מיישם, בודק ומשמיד. התהליך משולב ב-CI/CD.
מה זה InSpec ולמה הוא נחוץ?
InSpec היא מסגרת קוד פתוח לבדיקות תאימות. ב-Chef, היא משמשת כמאמת ב-Test Kitchen ויכולה גם לרוץ בנפרד לביקורת תשתית. אנו מריצים פרופילי InSpec על ייצור כדי לקבל דוחות אי-תאימות, ובכך סוגרים דרישות PCI DSS ו-SOC 2 ללא עלות נוספת.
Chef לעומת כלי CM אחרים
| קריטריון | Chef | Ansible | Puppet |
|---|---|---|---|
| מודל | משיכה (סוכן) | דחיפה (ללא סוכן) | משיכה (סוכן) |
| שפה | Ruby DSL | YAML + Jinja2 | Puppet DSL |
| בדיקות | Test Kitchen + InSpec | Molecule | rspec-puppet |
| תאימות | Chef Automate | Ansible Tower | Puppet Enterprise |
| קלות התחלה | בינונית | גבוהה | נמוכה |
Chef מנצחת במקומות שבהם נדרשת אידמפוטנטיות קפדנית ודיווח תאימות. למשימות אד-הוק, Ansible פשוטה יותר, אבל Chef מספקת ניהול גרסאות של תצורות ומונעת סחיפה על פני מאות שרתים.
תוכנית יישום Chef שלב אחר שלב
- ביקורת תשתית — מלאי שרתים, נקודות כאב.
- עיצוב ארכיטקטורה — standalone או HA, אינטגרציית LDAP.
- פריסת Chef Infra Server ו-Workstation.
- כתיבת cookbooks — מבנה לפי תפקידים, ניצול Community cookbooks.
- הקמת Test Kitchen ו-CI/CD — אינטגרציה עם GitLab CI או GitHub Actions.
- בדיקות — kitchen test בסביבה מבודדת.
- פריסה הדרגתית — גישת canary על קבוצות שרתים.
- תיעוד והדרכת צוות.
מה כוללת העבודה שלנו
- ביקורת ועיצוב ארכיטקטורה.
- פריסת Chef Infra Server, הגדרת Workstation.
- כתיבת cookbooks ל-web, DB, cache, queues.
- אינטגרציית CI/CD — GitLab CI או GitHub Actions עם kitchen test על כל PR.
- פריסת מדיניות: canary, הדרגתית.
- Runbooks והדרכה (2-3 מפגשים).
- שבועיים של תמיכה לאחר היישום.
לוחות זמנים משוערים
| שלב | משך |
|---|---|
| ביקורת וארכיטקטורה | 2–4 ימים |
| פריסת Chef Server + Workstation | 1–2 ימים |
| כתיבת cookbooks ל-5–10 שירותים | 1–3 שבועות |
| אינטגרציית CI/CD | 1–2 ימים |
| תיעוד והדרכה | 2–3 ימים |
העלות מחושבת באופן אישי לאחר ביקורת — כל פרויקט הוא ייחודי. המהנדסים שלנו מוסמכים ובעלי ניסיון ב-50+ פרויקטים. קבעו פגישת ייעוץ כדי לראות כיצד Chef יכולה לפתור את האתגרים שלכם. רוצים לחסל סחיפת תצורה? צרו קשר לביקורת של התשתית שלכם ואנו נפתח תוכנית יישום Chef.







