Puppet เป็น software ที่ผลิตโดย Puppet Labs เพื่อช่วยเพิ่มความสะดวกให้การทำงานของผู้ดูแลระบบในการจัดการ configuration และ software สำหรับ server เครื่องต่างๆ รวมทั้งยังสามารถช่วยลดเวลาการทำงานในส่วนงานที่มีการดำเนินการซ้ำๆ เนื่องจาก puppet สามารถดึงข้อมูลเพื่อดำเนินการโดยอัตโนมัติ

Puppet แบ่งออกเป็น 2 ประเภท คือ Puppet Enterprise และ open source Puppet โดยมีการใช้งานอย่างแพร่หลายบน Linux, UNIX และ Windows สำหรับในบทความนี้ จะนำเสนอการติดตั้ง puppet 4 บน CentOS 7 ซึ่งสามารถติดตั้งบน Cloud ของ HostPacific ได้

โครงสร้างของ puppet ประกอบด้วย

1) Puppet master server

  • ใช้งานจำนวน 1 เครื่อง
  • Spec server ขั้นต่ำที่ต้องการใช้งานคือ CPU 2 core และ Memory 1 GB
  • มีการใช้งานผ่าน port 8140

2) Puppet agent server

  • สามารถเปิดใช้งานได้มากกว่า 1 เครื่อง ซึ่งหากมีการใช้งานจำนวนเครื่องที่เพิ่มมากขึ้น จำเป็นต้องมีการเพิ่ม spec ของ puppet master server เพื่อรองรับการเรียกใช้งานของ puppet agent server ที่เพิ่มขึ้น

ขั้นตอนการเตรียม server

สำหรับตัวอย่างของการติดตั้งครั้งนี้ จะประกอบด้วย Cloud จำนวน 3 เครื่อง คือ

Puppet master จำนวน 1 เครื่อง

  • example.com : 10.0.10.113
  • Spec เครื่องคือ CPU 2 core และ RAM 4 GB

Puppet agents จำนวน 2 เครื่อง

  • example.com : 10.0.10.114
  • example.com : 10.0.10.115
  • Spec เครื่องคือ CPU 2 core และ RAM 2 GB

โดยดำเนินการทั้ง 3 ขั้นตอนดังต่อไปนี้ที่ server ทั้ง 3 เครื่อง

Build Cloud

โดยใช้ CentOS 7 สำหรับ server ทั้ง 3 เครื่อง update package เบื้องต้นต่างๆ ให้เรียบร้อย โดยใช้คำสั่ง

# yum -y update

ติดตั้ง NTP

NTP หรือ network time protocol คือ protocol ที่ใช้สำหรับปรับเทียบเวลา ระหว่างอุปกรณ์ computer ผ่านทางเครือข่าย internet ซึ่งให้บริการผ่าน protocol UDP ที่ port 123 เมื่อลงเซิร์ฟเวอร์ใหม่ ควรปรับเวลาให้ตรงทุกครั้ง เพราะการทำงานบางอย่างอาศัยการอิงเวลามาตรฐาน หากเวลาในเครื่องไม่ตรง การทำงานอาจคลาดเคลื่อนได้

 

กำหนด server สำหรับใช้เทียบเวลา โดยเลือกใช้ server pool ของ Asia (ด้านล่างนี้) แทน server กลุ่มเดิม

 

ตรวจสอบ Private FQDN (Fully qualified domain name)

เนื่องจาก puppet จะมีการส่งการร้องขอค่าระหว่างเครื่อง master node และ agent node ดังนั้นเครื่องที่ต้องการใช้งานในระบบ จึงต้องสามารติดต่อผ่าน FQDN ได้  สำหรับตัวอย่างนี้ จะเลือกกำหนดที่ไฟล์ hostname ของ server แต่ละเครื่อง ดังนี้

หรืออาจสร้าง DNS server เพื่อรองรับการใช้งานในส่วนนี้ได้

ติดตั้ง Puppet master

สำหรับ puppet master server (master node) จะเป็นเครื่องควบคุม configuration ต่างๆ เพื่อให้เครื่อง puppet agent เรียกไปใช้งาน

 

ติดตั้ง Puppet agent

puppet agent (agent node) จะสามารถติดตั้งได้บน Linux, Unix และ Windows สำหรับขั้นตอนนี้จะทำการติดตั้งที่ puppet agent จำนวน 2 เครื่อง

 

การยืนยัน certificate ของเครื่อง agent node และ master node

ก่อนเริ่มต้นการใช้งานสำหรับเครื่อง agent node นั้น ขั้นตอนแรกต้องดำเนินการสร้างค่า SSL certificate เพื่อใช้ในการยืนยันการติดต่อ และยืนยันตัวตนกับ master node ก่อนที่จะทำการส่งข้อมูลอื่นๆ ต่อไป โดยขั้นตอนนี้ต้องดำเนินการที่ agent node ทุกเครื่อง

 

เมื่อดำเนินการที่ agent node ทั้ง 2 เครื่องเรียบร้อยแล้ว ให้ตรวจสอบที่ master node โดยสั่งให้แสดงค่าการร้องขอจาก agent node

ยืนยันการร้องขอ

หากต้องการยกเลิก สามารถดำเนินการได้ด้วยคำสั่ง

จากคำสั่งนี้จะสถานะของ certificate ที่เกี่ยวข้อง

หากมีการยืนยัน certificate เรียบร้อยแล้วจะแสดงค่าขึ้นต้นด้วยเครื่องหมาย ‘+’  แต่หาก certificate ไม่ถูกต้องหรือถูกยกเลิกจะแสดงค่าขึ้นต้นด้วยเครื่องหมาย ‘-’

 

ส่วนประกอบพื้นฐานสำหรับ puppet

หลังจากที่ได้ติดตั้งส่วนของ software ต่างๆ เรียบร้อยแล้ว สำหรับส่วนต่อไปจะกล่าวถึงส่วนประกอบ สำหรับการเขียนชุดคำสั่ง และการสร้างไฟล์ต่างๆ ที่เครื่อง master node เพื่อกำหนดการทำงานของ agent node

  1. Manifest file

สำหรับส่วนแรกที่จะกล่าวถึงคือ ไฟล์ manifest

Manifest คือ ไฟล์ที่เก็บชุดคำสั่งต่างๆ ของ puppet ที่เครื่อง master node เพื่อให้ agent node อ่านค่าและนำไปดำเนินการจัดการตามคำสั่ง โดยไฟล์ manifest จะเป็นไฟล์ที่มีนามสกุล .pp และมีไฟล์หลักที่เรียกใช้งานที่ /etc/puppetlabs/code/environments/production/manifests/site.pp

  1. Resource type

Resource type คือส่วนของการประกาศค่าตัวแปรและฟังก์ชั่น เพื่อบอกให้ระบบทราบว่าต้องดำเนินการส่วนใด โดยจะเป็นการกำหนดค่าต่างๆ ลงในไฟล์ manifest

รูปแบบของการประกาศค่า เช่น

ตัวอย่างเช่น

สามารถตรวจสอบค่า resource type เพิ่มเติมได้ด้วยคำสั่ง

  1. Class

Class คือ การรวมกันของกลุ่ม code ต่างๆ ซึ่งสามารถเรียกใช้งานผ่านไฟล์ manifest ทั้งนี้เมื่อต้องการใช้งานบางกลุ่มคำสั่งบ่อยๆ สามารถกำหนดเป็น class และเรียกใช้งานผ่าน class ได้แทนการเขียน code กลุ่มเดิมซ้ำ

รูปการกำหนด class

เมื่อต้องการเรียกใช้งาน class จะต้องมีการประกาศค่า ซึ่งแบ่งออกเป็น 2 ประเภทคือ

การประกาศ class แบบทั่วไป คือ การประกาศก่อนเรียนใช้งานในไฟล์ manifest การประการเช่นนี้จะส่งผลให้ทุกส่วนในไฟล์ manifest สามารถเรียกใช้งานได้

และ การประกาศ class แบบ resource-like คือการประกาศก่อนเรียนใช้งานในไฟล์ manifest ซึ่งจะเป็นการนำส่วนประการวางใน resource ดังนั้นจะส่งผลให้สามารถใช้งานได้เฉพาะบางส่วนเท่านั้น

  1. Facts

Fact คือ การแสดงค่าข้อมูล global ที่เกี่ยวข้องกับระบบ เช่น operating system, network interface เราสามารถ run คำสั่งนี้ได้ทั้ง master node และ agent node

  1. Module

Module คือ การรวบรวมไฟล์ manifest และ ข้อมูลไฟล์อื่นๆ ที่เกี่ยวข้อง เพื่อนำไปใช้งาน เช่น puppetlabs-apache, puppetlabs-mysql เป็นต้น โดยข้อมูล model ของ puppet จะอยู่ที่ path : /etc/puppetlabs/code/environments/production/modules

 

เริ่มต้นการใช้งาน Puppet

ตัวอย่างที่ 1 เริ่มต้นการสร้างไฟล์ manifest เพื่อทดสอบการทำงานระหว่างเครื่อง master node และ agent node

#ตรวจสอบไฟล์

การทำงานของเครื่อง agent node นั้นจะมีการเรียกมาที่ master node ทุกๆ 30 นาที เพื่อตรวจสอบค่า configuration หรือชุดคำสั่งว่ามีการเปลี่ยนแปลงหรือแก้ไขเพิ่มเติมหรือไม่ เพื่อนำคำสั่งต่างๆ ไปดำเนินการที่เครื่อง agent node ต่อไป

กรณีที่ต้องการตรวจสอบการทำงานทันทีโดยไม่ต้องรอให้ครบรอบ 30 นาที สามารถทำได้โดยการ run คำสั่งด้านล่างนี้ที่เครื่อง agent node ทั้ง 2 เครื่อง

ตัวอย่างการ run ที่ node1pp

จากตัวอย่างนี้แสดงว่า node1pp และ node2pp agent node สามารถติดต่อ masterpp mode เพื่อนำชุดคำสั่งจากไฟล์ manifest มาทำงานที่เครื่อง agent node ได้เรียบร้อย

ตัวอย่างที่ 2 ทดสอบสร้างไฟล์ manifest โดยกำหนดให้สามารถเรียกใช้งานได้เฉพาะ node1pp เท่านั้น

โดยกำหนดไฟล์ site.php ตามคำสั่งด้านล่างนี้

 

ตัวอย่างที่ 3 เนื่องจาก puppet community มี module มากมายเพื่อให้เลือกใช้งาน สำหรับตัวอย่างนี้จะเป็นติดตั้ง module และสร้างไฟล์ manifest เพื่อติดตั้ง apache, mariadb, php และสร้างไฟล์ php สำหรับ agent node

ติดตั้ง module apache

 

ติดตั้ง module สำหรับ mariadb (ผู้ติดตั้งสามารถเลือกติดตั้ง module อื่นๆ เพื่อใช้งาน mariadb ได้)

 

สร้างไฟล์ php.conf ตามด้านล่างนี้ เพื่อให้ agent node นำไฟล์ configuration ไปใช้งาน

บันทึกไฟล์ให้เรียบร้อย

กำหนดไฟล์ site.php ตามคำสั่งด้านล่างนี้

เมื่อบันทึกไฟล์เรียบร้อย สามารถทดสอบการทำงานได้ดังนี้ (จะแสดงตัวอย่างผลการทดสอบเฉพาะเครื่อง node2pp เท่านั้น เนื่องจาก ได้ผลการทำงานเช่นเดียวกัน)

ตรวจสอบการทำงาน

จะพบว่าเครื่อง node2pp มีการติดตั้ง httpd เรียบร้อย

ทดสอบใช้งาน mariadb ด้วย password ที่มีการกำหนดในไฟล์ manifest ก่อนหน้า

ทดสอบการใช้งาน web โดยการลองเรียก http://node2pp.example.com

หรือ http://node2pp.example.com/info.php

 

ข้อสรุป

จากการทดสอบใช้งาน puppet เบื้องต้น ผ่าน master และ agent node ด้วย puppet code ทั้งจากไฟล์ manifest และการใช้งาน module จะเห็นได้ว่า puppet สามารถนำไปประยุกต์ เพื่อเพิ่มความสะดวกให้กับผู้ดูแลระบบในการดำเนินการกับ server ต่างๆ ในความดูแลได้เพิ่มมากขึ้น เนื่องจากผู้ดูแลระบบสามารถปรับ หรือแก้ไขไฟล์ configuration ที่เครื่อง puppet master node ก็จะสามารถกระจายการงานที่ต้องการส่งไปยังเครื่อง puppet agent node ต่างๆ ได้

ข้อมูลเพิ่มเติม

 

 

Share this:Share on FacebookTweet about this on TwitterShare on Google+Pin on Pinterest