Chef เป็นเครื่องมือการจัดการตั้งค่าคอนฟิกระบบ (system configuration management) ตัวหนึ่งที่ได้รับความนิยม เหมาะสำหรับการ config เครื่องเซิร์ฟเวอร์ที่มีจำนวนมากๆ แบบไม่ต้อง ssh เข้าไป config ทีละเครื่อง การทำงานของ Chef จะทำตาม runlist ที่เรากำหนดให้ node หรือกำหนดใส่ไว้ใน Role ดังนั้นเราสามารถทำขั้นตอนซ้ำๆ ได้หลายรอบผ่านการกำหนดค่าตาม role หรือกำหนด runlist ให้กับ node จากนั้นก็สั่งให้ทำงาน

Chef มีเวอร์ชันที่เป็น Open Source และ Enterprise ในเวอร์ชัน Enterprise สามารถติดตั้งเองหรือใช้บริการ Chef Management แบบ Hosted ได้โดยไม่จำเป็นต้องติดตั้งเองก็ได้ ก่อนใช้งานต้องเข้าใจ Chef กันก่อน Chef มีส่วนประกอบที่ต้องใช้หลักๆ อยู่ 3 ส่วน

  • Chef Workstation คือ เครื่องที่ใช้สั่งงาน พัฒนา cookbook หรือเครื่องผู้ดูแลระบบ
  • Chef Server คือ เครื่องที่เก็บข้อมูล Node, Cookbook, Policy, Report ต่างๆ
  • Chef Client คือ เครื่องปลายทางที่ต้องการคอนฟิก

มาลงมือกัน เราจะใช้เครื่องอย่างน้อย 3 เครื่อง ในกรณีนี้เราจะใช้ Chef Server ที่ให้บริการโดย OpsCode กันเพื่อความสะดวก

เริ่มต้นสมัครใช้บริการ Chef Server กันก่อน เข้าไปที่หน้า Manage Chef ตัวระบบจะให้คุณสมัครสมาชิกและนำคุณเข้าสู่หน้า Starter Kit

ให้ดาวน์โหลด Starter Kit มาแล้วคลี่ไฟล์ไว้ที่เครื่อง Workstation ซึ่งก็คือเครื่องที่คุณทำงานนั่นเอง

apt-get install unzip

unzip chef-starter.zip

cd chef-repo

จากนั้นเข้าไปที่หน้าดาวน์โหลด Chef Client เลือกระบบปฏิบัติการและเวอร์ชั่นที่คุณใช้

เราจะใช้ cURL ssh ที่ได้มาติดตั้งเครื่องมือที่เครื่อง Workstation ก่อนดังนี้

curl -L https://www.opscode.com/chef/install.sh | sudo bash

เมื่อติดตั้งเสร็จแล้วให้ลองใช้คำสั่ง knife ดูว่าใช้งานได้หรือไม่ การทำงานกับ Client ควรจะมี FQDN ให้กับทุกเครื่อง และที่สำคัญหากคุณใช้ Linux แนะนำ copy ssh-pubkey ให้ทุดเครื่องด้วย เวลาทำงานจะได้สะดวก

มาเริ่มติดตั้ง Chef Client ผ่าน knife bootstrap ดังนี้

knife bootstrap web1.fffee.org -N "web1"
knife bootstrap web1.fffee.org -N "web2"

รอให้ knife ติดตั้ง Chef Client และลงทะเบียน Node ใน Chef Server ให้เรียบร้อยทั้ง 2 Node ลองเข้าไปดูที่ Chef Server เราจะพบว่ามี Node เพิ่มเข้ามาแล้ว

ใช้คำสั่ง Knife ssh เพื่อดูรายชื่อ Node และ Uptime ดังนี้

knife ssh "name:*" "uptime"

เราจะได้ชื่อ Node และ Uptime ของ Node นั้นๆ

มาลอง deploy อะไรง่ายๆ กันก่อน เช่น Apache2 เราจะใช้ Community Cookbook

สั่งติดตั้ง Cookbook ด้วยคำสั่ง knife ดังนี้

knife cookbook site install apache2

ให้ดู dependency ด้วยว่ามีอะไรบ้างในกรณีนี้คือ logrotate และ iptables เราจะพบว่า knife ดาวน์โหลด dependency มาให้ด้วยพร้อมติดตั้งให้เสร็จเรียบร้อย หากเราดูที่ไดเรคทอรี cookbooks จะพบว่ามี apache2 และ dependency ครบแล้ว จากนั้นสั่ง upload ไปยัง Chef Server ได้เลยดังนี้

knife cookbook upload --include-dependencies apache2

knife จะทะยอยดาวน์โหลด cookbook ไปยัง Chef Server

มาสร้าง Role ให้กับ Web กัน คลิกที่ Policy > Role > Create สร้าง Role ชื่อ Web

กำหนด runlist เป็น apache2

กำหนด default attribute เป็น

{
  "apache": {
    "default_site_enabled": true
  }
}

กดปุ่ม Create Role เราจะได้ Role มา 1 อัน

เลือก web1, web2 กำหนด runlist เป็น web ดังนี้

จากนั้นสั่ง knife ssh เพื่อ run คำสั่ง chef-client ที่เครื่องที่ใช้ role web

knife ssh "role:web" "chef-client"

รอสักพัก knife ติดตั้ง package ในเครื่องที่ใช้ role web ซึ่งก็คือ web1, web2 นั่นเอง ลองเปิด browser ตรวจสอบดูจะพบว่าติดตั้ง Apache 2 เรียบร้อยแล้ว

Comments are closed.