ถ้าใช้งาน Chef ต้องลองสร้าง Cookbook ใช้เองด้วยถึงจะครบกระบวนการ นอกจาก Cookbook ใน Opscode Community แล้วเราสามารถสร้าง Cookbook แบบที่เราต้องการเองได้ด้วย สำหรับท่านที่ถนันภาษา ruby ก็คงได้เปรียบสักหน่อย แต่สำหรับท่านที่ไม่ถนันก็ไม่เป็นไร เราสามารถสร้าง Cookbook แบบง่ายๆ ได้ โดยใช้เครื่องมือเดิมคือ Knife

แนวคิดของ Cookbook เหมือนกับการทำอาหารมีสูตรในการทำ (recipe) ดังนั้น Cookbook หนึ่งมีสูตรอาการได้หลายสูตรแล้วแต่ว่าจะปรุงอะไรออกมา ในการปรุงแต่ละสูตรจะมีกระบวนการปรุงซึ่งจะทำหนด อยู่ใน recipe นั่นเอง สำหรับ resource ทีี่ต้องใช้ recipe ได้แก่

  • package: จัดการ package ใน node
  • service: จัดการ service ใน node
  • user: จัดการ user ใน node
  • group: จัดการ group ใน node
  • template: จัดการไฟล์ที่อยู่ในรูปแบบ ruby template
  • cookbook_file: เก็บไฟล์สำหรับย้ายไปใช้กับ node โดยตรง
  • file: จัดการไฟล์ ใน node
  • directory: จัดการไดเรคทอรี ใน node
  • execute: ใช้คำสั่ง ใน node
  • cron: แก้ไข cron ใน node


Continue reading

Knife DigitalOcean เป็นส่วนเสริมที่ช่วยให้คุณจัดการ Droplet บน DigitalOcean ได้ง่ายๆ ผ่าน Knife ซึ่งนอกจากจัดการ Droplet ได้แล้วยังสามารถสั่ง Bootstrap เพื่อ register node ไปยัง Chef Server ได้อีกด้วย หรือใช้ Knife กำหนด runlist ให้ droplet ได้เช่นกัน มาทดลองกัน

ก่อนอื่นใช้ ChefDK ติดตั้ง Knife DigitalOcean กันก่อนดังนี้

chef gem install knife-digital_ocean

สร้าง Personal Access Tokens ใน DigitalOcean เพื่อใช้กับ Knife ดังนี้


Continue reading

Chef ไม่เพียงแค่ใช้ตั้งค่าและจัดการเครื่องเซิร์ฟเวอร์เท่านั้นแต่ยังสามารถใช้งานร่วมกับ Container อย่าง Docker ได้ด้วย ในเบื้องต้น ใช้สำหรับสร้าง Chef Container ที่มี chef client, cookbook, run list ฝังเข้าไปพร้อมกับ Docker Image ส่วนการจัดการ Container ยังคงใช้ Docker เหมือนเดิม

สร้าง Chef Container ต้องเริ่มจากสร้าง Image ก่อนด้วย Knife Container ซึ่งเป็น plug-in เสริมของ Knife ซึ่งเราจะต้องติดตั้งเพิ่ม ก่อนจะติดตั้ง Knife Container ติดตั้งเครื่องมือที่จำเป็นต้องใช้ก่อน ได้แก่ Docker, ChefDK และ Knife Container

เริ่มจากติดตั้ง Docker ก่อน ดังนี้

curl -sSL https://get.docker.com/ubuntu/ | sudo sh

ติดตั้ง Chef Development Kit

wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chefdk_0.3.5-1_amd64.deb

dpkg -i chefdk_0.3.5-1_amd64.deb


Continue reading

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 คือ เครื่องปลายทางที่ต้องการคอนฟิก


Continue reading

Chef เป็นเครื่องมือด้าน System Configuration อีกตัวนึง เหมาะสำหรับการ config เครื่องเซิร์ฟเวอร์ที่มีจำนวนมากๆ แบบไม่ต้อง ssh เข้าไปทีละเครื่อง แนวคิดของ Chef ก็เหมือนกับชื่อล่ะครับ กุ๊กอยากจะทำอาหารอะไร ก็ต้องมีตำราอาหาร (Cookbook) วิธีการทำ (Recipe) และ ขั้นตอนการทำ (Run list) ก่อนที่มาเล่น Chef ลองมาดูส่วนประกอบต่างๆ ที่จะต้องมีกันก่อน

  1. Workstation คือ เครื่องที่ System Admin ใช้ทำงาน เขียนตำราอาหาร เขียนสูตรอาหาร
  2. Chef Server คือ เครื่องที่ใช้เก็บตำราอาหาร สูตรอาหารต่างๆ
  3. Node คือ เครื่องที่เราต้องการ config โดยดึงข้อมูลจาก Chef Server มาประมวลผล

จะใช้งาน Chef ต้องมี Chef Server ครับ สำหรับท่านที่ต้องการใช้ Chef Server ที่ทาง OpsCode เป็นคนดูแลก็สามารถใช้งานได้ (ผมแนะนำ) แต่ถ้าต้องการตั้ง Chef Server เองก็สามารถทำได้ครับ ก่อนอื่นมาติดตั้ง Chef Server กันก่อน ผมมีเครื่อง Ubuntu Server 64ิBits ต้องเป็น 64Bits เท่านั้นนะครับ

ดาวน์โหลด Chef Server และติดตั้งด้วยคำสั่ง

sudo dpkg -i chef-server_11.0.12-1.ubuntu.12.04_amd64.deb

sudo chef-server-ctl reconfigure

เมื่อติดตั้งเสร็จให้เปิด browser ไปที่ https://chef-server ใส่ username = admin และ password = p@ssw0rd1 จะได้หน้าตาแบบนี้

ได้ Chef Server แล้ว กลับมาที่เครื่อง Admin Workstation หรือเครื่องที่เราใช้งานกันนี่แหละครับ ดาวน์โหลด Chef Client มาติดตั้งที่เครื่องเรากันก่อนดังนี้

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

รอให้ติดตั้งจนเสร็จ จากนั้นมาเขียนไฟล์ config กัน ถ้าคุณใช้ Hosted Chef Server ดึงออกมาจาก Kick Start ได้เลยครับ แต่เรายากจนติดตั้ง Chef Server เองก็ต้องมาเขียน config กันเอาเอง ดังนี้

mkdir ~/.chef

เขียน config ชื่อ knife.rb ใส่ข้อมูลลงไปดังนี้

node_name 'admin'

chef_server_url 'https://chef-server.ffeee.org'

validation_client_name 'chef-validator'

validation_key '/etc/chef/chef-validator.pem'

cookbook_path ["~/.chef/cookbooks"]

สร้างไฟล์ /etc/chef/client.pem เอา Private Key ของ Admin มาใส่

และไฟล์ /etc/chef/chef-validator.pem เอาค่า chef-validator มาใส่

สร้างไดเรคทอรี cookbook ใน ~/.chef/cookbooks ดังนี้

mkdir -p ~/.chef/cookbooks

จากนั้น init git repository ที่ไดเรคทอรี cookbooks ดังนี้

cd ~/.chef/cookbooks

touch readme.md

git init

git add .

git commit -m 'init repo'

ลองใช้คำสั่ง knife ดูครับ

knife client list

ค่าที่ได้จะแสดง chef-validator และ chef-webui ออกมา และไม่ error ถือว่าเป็นอันใช้ได้ :)

เมื่อได้ Workstation, Chef Server แล้วก็ถึง Node ต่างๆ Chef มีเครื่องมือลัดให้เราติดตั้ง Chef Client โดยที่เราไม่ต้อง ssh ไปทีละ node ทำให้ไม่เหนื่อยมากนัก โดยใช้คำสั่งดังนี้

knife bootstrap node01.example.com --sudo -x username -P password -N "chef-node01"

จากนั้น knife จะติดตั้ง Chef Client ที่เครื่อง Node ให้ สั่งแบบนี้จนครบทุกเครื่องครับ :P ถ้าไม่อยากเหนื่อยก็เขียน shell script เอาก็ได้ :) เมื่อติดตั้งเสร็จแล้วเราจะพบว่ามีรายละเอียดของ Node ใน Chef Server แล้ว

เมื่อได้ Node ครบแล้ว กลับมาที่ Workstation เราครับ เราจะดึง Cookbook จาก Chef Community Cookbook มาใช้กัน ตัวอย่างเป็น Apache2 :) ใช้คำสั่งดังนี้

knife cookbook site install apache2

Knife จะดาวน์โหลด Cookbook ของ Apache2 และ dependency cookbook มาให้เราด้วย :) ถ้าอยากจะแก้ไข หรือ recipe ก็สามารถแก้ไขได้เลย จากนั้นอัพโหลด Cookbook ไปไว้ที่ Chef Server โดยใช้คำสั่ง

knife cookbook upload apache2 iptables logrotate pacman

ลองเข้าไปดูใน Chef Server เราจะเห็นว่ามี Cookbook อัพโหลดเข้ามาแล้ว

จากนั้นมากำหนด run list ให้ node01 ที่เราจะติดตั้ง Apache2 กันดังภาพ

เมื่อกำหนด run list แล้วสั่ง chef-client ที่เครื่อง node ได้เลย หรือจะสั่งผ่าน knife ได้เช่นกัน ตัวอย่างเช่น ให้ node ที่มีชื่อ * (คือทุก node) ใช้คำสั่ง chef-client ดังตัวอย่าง

knife ssh 'name:*' 'chef-client' --sudo -x username -P password

เมื่อสั่ง chef-client เครื่อง node จะเรียกดูข้อมูลจาก Chef Server ว่าเครื่องนี้้ต้องใช้ Cookbook อะไรบ้าง จากนั้นก็ทำตามลำดับที่กำหนดไว้ใน run list ลองเปิด browser เข้าไปดูที่เครื่อง node01 ก็จะพบว่า ได้ติดตั้ง Apache2 เรียบร้อยแล้ว ;)