เนื่องจากมีโอกาสได้กลับมาเล่น Puppet อีกรอบก็เลย blog ไว้สักหน่อย เป็นที่ระลึก เพราะครั้งนี้เล่น Puppet Enterprise เลยทีเดียว Puppet เป็นเครื่องมือใช้ทำ System Configuration Management ช่วย ติดตั้ง และ config package ลงในเครื่องเซิร์ฟเวอร์หลายๆ เครื่องได้อย่างรวดเร็ว โดยไม่ต้องไล่ ssh ไปทีละเครื่องเพิ่อติดตั้ง package นั้นๆ เอง Puppet สนับสนุนการใช้ใช้งานร่วมกับ Cloud Infra และ Bare Metal อีกด้วย (Razor) ก่อนเล่น Puppet ต้องเข้าใจเรื่องโครงสร้าง Puppet กันคร่่าวๆ สักหน่อย

puppet enterprise diagrame

Puppet ทำงานแบบ master – node คุยกันผ่าน mcollective ซึ่งจะต้องมี Puppet master และ node ที่ติดตั้ง agent เอาไว้ Puppet master จะทำหน้าที่ orchestration node ที่ผูกผ่าน agent ทำให้ Puppet master สามารถที่จะ config ติดตั้ง package ที่เราต้องการไปยัง node ผ่าน Puppet master ได้ อธิบายคร่าวๆ อย่างนี้ก็แล้วกันครับ อ้อ เกือบลืมไป Puppet Enterprise สามารถใช้งานได้ฟรี ผูก node ได้ 10 เครื่อง อยากผูก node เพิ่มต้องจ่ายตังค์เพิ่มครับ มาลงมือกันดีกว่า

เนื่องจากผมมีเครื่อง Ubuntu ก็ขอใช้ Ubuntu server 12.04.4 LTS ละกัน ติดตั้ง Ubuntu server, OpenSSH server และตั้ง NTP กับ time server ให้เรียบร้อย ทั้ง 2 เครื่อง คือ master, node1 ตามรูป เครื่อง master และเครื่อง node มองเห็นกันทดสอบ ping ผ่าน hostname ดูครับ

pupetlabs

เข้าไปที่เว็บไซต์ http://puppetlabs.com จากนั้น download Puppet Enterprise แบบ Full Install ให้ตรงกับ OS และ Architecture ที่คุณใช้ ซึ่งก็คือ Ubuntu 12.04 ของผมใช้ 32bits

puppet download

คุณจะได้ไฟล์ puppet-enterprise-3.2.0-ubuntu-12.04-i386.tar.gz มา ถ้าใช้ amd64 คุณจะได้ไฟล์ puppet-enterprise-3.2.0-ubuntu-12.04-amd64.tar.gz มาครับ อย่าดาวน์โหลดผิดเวอร์ชันเป็นพอ จากนั้นก็แตกไฟล์นี้ที่เครื่อง master และ เครื่อง node ให้เรียบร้อย

เครื่อง master สั่งติดตั้ง Puppet master

cd puppet-enterprise-3.2.0-ubuntu-12.04-i386
./puppet-enterprise-installer

ตัวติดตั้งจากถามคือถามเราเรื่อยๆ ก็ตอบ yes/no ไปเรื่อยๆ ดังนี้

ติดตั้ง Puppet master มั๊ย ตอบ y

Install puppet master? [y/N] y

ติดตั้ง PuppetDB มั๊ย ตอบ y

Install PuppetDB and console on this node? [Y/n] y

จะ provision vm บน cloud มั๊ย ตอบ n เพราะไม่ได้ใช้อ่ะ

Install the cloud provisioner? [y/N]

ตั้งชื่อ certificate อะไร ใช้ default

Puppet master’s certname? [Default: master]

ตั้ง DNS aliase ใช้ default

Puppet master’s DNS aliases (comma-separated list)? [Default: master,puppet]

ติดตั้ง PostgreSQL ไว้ที่เครื่อง master มั๊ย ตอบ y เพราะยังไม่มี PostgreSQL

Install the included Puppet Enterprise PostgreSQL server locally? [Y/n]

หลังจากนั้นก็ config console กำหนด admin account ใส่ email ที่จะใช้ login ลงไป

Admin email address (will be used as account name) for accessing the console interface? puppet@example.com

ใส่ password ที่เราต้องการ

Password for user puppet@example.com (minimum 8 characters)?

จากนั้นตัวติดตั้งจะแจ้งว่า package ที่ต้องใช้ติดตั้งเพิ่มเติมมีอะไรบ้าง และถามว่าเราว่าจะให้ติดตั้งให้ป่าว ตอบ y เพราะไม่มีก็ใช้ไม่ได้นี่

Install these packages automatically? [Y/n] y

จากนั้นตัวติดตั้งจะสรุปว่าจพติดตั้งอะไรบ้าง ตั้งแต่กด yes/no มายาวๆ แล้วถามว่าจะติดตั้งเลยมั๊ย ตอบ y

Perform installation? [Y/n] y

จากนั้นตัวติดตั้งก็จะทำการ ติดตั้ง package ที่ต้องใช้งาน และ config ค่าต่างๆ ให้อัตโนมัติ นั่งรอจนกระทั่งถึง STEP 4 ซึ่งจะแจ้งผลการติดตั้ง ที่อยู่ของ answer file เก็บ answer ไฟล์ไว้ดีๆ เพราะในไฟล์นี้จะมีข้อมูล config ต่างๆ และรวมถึงรหัสผ่านการเข้าใช้งาน PuppetDB และ PosgreSQL ด้วย ซึ่งอาจจะต้องใช้อีกในอนาคต :) เมื่อติดตั้งเรียบร้อยแล้วก็เปิด browser ขึ้นมาแล้ว browser ไปที่เครื่อง master ของคุณ ด้วย url https://master หรือตามด้วย ip ก็ได้ เช่น https://192.168.2.160 คุณก็จะได้หน้าล็อกอินแบบนี้

console login

ลอง login ดูว่าเข้าได้หรือเปล่า :)

after login

กลับมาที่เครื่อง node ติดตั้ง Puppet agent ดังนี้

cd puppet-enterprise-3.2.0-ubuntu-12.04-i386

./puppet-enterprise-installer

จากนั้นก็ตอบคำถาม yes/no กันอีกรอบ ดังนี้

Install puppet master? [y/N]

Install PuppetDB? [y/N]

Install the console? [y/N]

Install the cloud provisioner? [y/N]

Install puppet agent? [Y/n]

Install these packages automatically? [Y/n]

Perform installation? [Y/n]

นั่งรอจนกระทั่งถึง STEP 4 ซึ่งจะแจ้งผลการติดตั้ง ที่อยู่ของ answer file เก็บ answer ไฟล์ไว้ดีๆ เพราะเราอาจจะเอาไปใช้กับเครื่อง node เครื่องต่อไป หลังจาก config node เสร็จกลับไปดูที่หน้า web console จะพบว่ามี node request เข้ามาดังนี้

node request

กดเข้าไปแล้ว Acept Node ดังนี้

acept node request

รอ Agent ส่งข้อมูล factor เข้ามาที่ master ลอง refest หน้า web console ก็จะได้ node เข้ามา 1 ตัวแล้ว

add node

ที่เครื่อง node ทดสอบ Agent กันด้วยคำสั่ง

puppet agent --test

ให้ตรวจสอบว่า node ที่เพิ่มเข้ามาอยู่ในกลุ่ม mcollective หรือยัง

mcollective group

ทีนี้มาลองเล่น Live Management กัน เข้าไปที่ Live Management จากนั้นเลือก master, node ที่มีอยู่ แล้วลอง search package ดูว่าในเครื่อง master, node มี package ntp ติดตั้งหรือเปล่า เราก็จะได้ผลลัพท์ว่าเครื่อง master, node มี ntp ติดตั้งอยู่

find ntp package

มาเล่นในส่วน configuration management กันบ้าง เนื่องจาก Puppet Enterprise ที่ติดตั้งจะมี class พื้นฐาน ของ Puppet ที่ต้องใช้ แต่ไม่มีที่เราต้องใช้ T_T ดังนั้นเราต้องเขียน Puppet module กันเอาเอง หรือใช้บริการ Puppet module จาก Puppet Forge ก็ได้

puppet forge

วิธีการเล่นกับ Puppet Enterprise มีขั้นตอนง่ายๆ ดังนี้

  1. เขียน module หรือติดตั้งจาก Puppet Forge
  2. เพิ่ม Class เข้าไปในระบบ (ถ้าใช้ command line ก็เหมือนที่เราเขียน class ที่เป็น pp ไฟล์นั่นเอง)
  3. กำหนด node ให้อยู่ใน Class นั้นๆ หรือกำหนด node ให้อยู่ใน Group นั้นๆ

มาลองกันครับ

puppet module install puppetlabs-apache

puppet module install

ลองเช็คสักหน่อยว่าไม่มีอะไรพัง

puppet module list

puppet module list

ที่นี้กลับเข้ามาที่ web console เพิ่ม Class กัน กดปุ่ม Add Class แล้วค้นหา module Apache ดูครับ เราจะพบว่ามี Class ย่อยๆ อีกเยอะ สามารถเลือกได้ตามใจชอบ เช่น apapche, apache:php เป็นต้น จากนั้นกดปุ่ม Add Class เราก็จะได้ Class มาเพิ่มอย่างนี้

Class list apache

เพื่อความเป็นระเบียบเพิ่ม Group ขึ้นมาครับ กดปุ่ม Add Group สร้างกลุ่ม www ขึ้นมา เพิ่ม Class apache และ เพิ่ม node ของเราเข้าไป กดปุ่ม Create เท่านี้ก็เรียบร้อยแล้ว

add group

เข้าไปดูรายละเอียด node เราอยู่ใน Group www เรียบร้อยแล้ว

node1 detail

หลังจากนี้นั่งรอครับ mcollective จะเข้าไปคุยกับ node แล้ว deploy apache ให้ ถ้าใจร้อนก็เข้ามาที่ Live Management เลือก node เลือก Control Puppet เลือก runonce… กดปุ่ม run ได้เช่นกัน กลับไปดูหน้ารายละเอียด node จะพบว่ามี change แล้ว ดู report ว่าไม่มีอะไรพัง เป็นอันใช้ได้ครับ :)

change report

change event

อาจจะลองเข้าไปดู package list ว่า apache2 ติดตั้งหรือยังก็ได้

package list

ลอง browse ไปที่ node1 ดู ก็จะพบว่า apache ติดตั้งเรียบร้อยแล้ว

browse node1

หากคุณอยากได้เครื่อง webserver อีก ก็แค่เพิ่ม node ใหม่อยู่ในกลุ่ม www เท่านี้ node ที่เพิ่มเข้ามาก็จะติดตั้ง apache ให้เสร็จเรียบร้อยโดยไม่ต้อง ssh ไปติดตั้ง apapche เลย สำหรับการใช้งาน Puppet เราสามารถสร้าง module เพื่อ deploy application ที่เราต้องการได้ เช่น ติดตั้ง apache + php + mysql + wordpress เป็นต้น หากไม่อยากเขียนเอง ก็ download module จาก Puppet Forge มาใช้งานกันได้ :)