ลองเล่น Puppet Master กับ Puppet Agent บนเครื่องเราเอง

puppet-labs-logo

หมายเหตุ ทดสอบกับ Ubuntu เวอร์ชั่น 14.04 Vagrant เวอร์ชั่น 1.5.3 และ Puppet เวอร์ชั่น 3.7.3

อย่างน้อยเราต้องมีเครื่องสัก 2 เครื่อง เครื่องหนึ่งติดตั้ง Puppet Master และอีกเครื่องหนึ่งติดตั้ง Puppet Agent วิธีที่ง่ายที่สุด และถูกที่สุดคือสร้าง Virtual Machine (VM) ขึ้นมาใช้งาน ถ้า Geek หน่อยก็ใช้ Vagrant สร้าง Multi-Machine สร้าง VM บล็อกนี้จะขอแนะนำให้ใช้ Vagrant นะครับ ชีวิตสบายขึ้นเยอะ

ข้างล่างนี้เป็นไฟล์ Vagrantfile ที่จะใช้

# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.vm.box = "trusty64"

    config.vm.define "puppet" do |master|
        master.vm.host_name = "puppet"
        master.vm.network :private_network, ip: "192.168.33.10"
    end

    config.vm.define "web1" do |agent|
        agent.vm.host_name = "web1"
        agent.vm.network :private_network, ip: "192.168.33.11"
    end
end

โดยผมจะเอาเครื่อง puppet (ใข้ IP 192.168.33.10) ทำเป็นเครื่อง Master ส่วน web1 (ใช้ IP 192.168.33.11) ทำเป็นเครื่อง Agent เมื่อเซตอัพ Vagrant Box กันเรียบร้อยแล้ว (ขอข้ามขั้นตอนการสร้าง Box ไปนะครับ) ก็สั่ง vagrant up โลด

พอเราได้เครื่องมา 2 เครื่องเรียบร้อย อย่างแรกที่เราควรจะต้องทำคือทำให้ทั้ง 2 เครื่องคุยกันแบบปกติได้ก่อน เราไม่จำเป็นต้องไปเซต DNS อะไรให้วุ่นวาย เราทำแค่เซต Hosts ก็พอ

อย่างที่สองคือเราต้องเซตเวลาของระบบให้ตรงกัน ซึ่งถ้าเวลาไม่ตรงกันแล้วอาจจะมีปัญหาเกี่ยวกับ Certificate ตามมาได้ (ตัว Master กับ Agent เวลาคุยกัน จำเป็นต้องมี Certificate เหมือนเป็นการยืนยันตัวตน) ในที่นี้ผมใช้ Network Time Protocol (NTP) เพื่อช่วยในการเซตเวลา ให้รันคำสั่งข้างล่างนี้ทั้งเครื่อง Master และ Agent เลยครับ

sudo ntpdate pool.ntp.org; sudo apt-get update && sudo apt-get -y install ntp; sudo service ntp restart

เสร็จแล้วเราก็จะเอา Debian Package จาก Puppet Labs มาติดตั้งบนเครื่องเราก่อน (ทั้ง Master และ Agent) ใช้คำสั่งข้างล่างนี้

cd ~; wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb; sudo dpkg -i puppetlabs-release-trusty.deb; sudo apt-get update

ต่อไปเราจะดูไปทีละเครื่องนะครับ

ติดตั้ง Puppet Master เริ่มด้วยคำสั่งนี้

sudo apt-get install puppetmaster

หลังจากติดตั้งเสร็จ ให้เข้าไปแก้ไฟล์ /etc/puppet/puppet.conf โดยแค่ลบบรรทัด templatedir=$confdir/templates ออกไป เพราะว่ามัน Deprecated ไปแล้ว.. ไม่เข้าใจเหมือนกันทำไมเวอร์ชั่นใหม่ๆ ไม่เอาบรรทัดนี้ออกไป

ทีนี้จะลองสร้างไฟล์​ site.pp ไว้ที่ /etc/puppet/manifests/ ข้างในไฟล์ก็แค่บอกว่าเราจะติดตั้ง Git บนเครื่อง Agent ตามนี้

package { "git-core":
    ensure => "installed"
}

ต่อมาให้เรา Restart ตัว Puppet Master

sudo service puppetmaster restart

เสร็จเรียบร้อยสำหรับตัว Master ถ้าใครอยากดูพวกข้อความต่างๆ บน Master แบบ Real-Time ให้รันแบบนี้แทน

sudo puppet master --verbose --no-daemonize

ต่อไป ติดตั้ง Puppet Agent ให้รันคำสั่งนี้

sudo apt-get install puppet

เสร็จแล้วให้เข้าไปแก้ไฟล์ /etc/puppet/puppet.conf โดยให้ลบบรรทัด templatedir=$confdir/templates ออกเหมือนเดิม แล้วก็ลบส่วน [master] ออกไปด้วย

จากนั้นไปที่ไฟล์ /etc/default/puppet แล้วเปลี่ยนค่า START ให้เป็น yes ซะ เพื่อบอกว่าเครื่องนี้เป็น Agent นะ เสร็จแล้วก็ Restart

sudo service puppet restart

ทีนี้ให้เรากลับไปดูที่ตัว Master ครับ จะมีการส่งคำร้องขอ Certificate จาก Agent มา วิธีดู? รันคำสั่งตามนี้ครับ

sudo puppet cert list

เราจะเห็น web1 อยู่ในลิสต์ ประมาณนี้

"web1" (SHA256) 31:CF:6D:5D:9A:20:05:99:87:59:29:BD:4B:59:47:22:70:4F:89:0D:DB:38:1C:5F:D3:50:E0:6F:05:C7:35:36

ให้เรา Sign Certificate นี้ครับ ใช้คำสั่ง

sudo puppet cert sign web1

ถ้าเราลิสต์ดู Certificate อีกครั้ง จะเห็นว่า web1 หายไปแล้ว ให้ลองใส่ -all ดูครับ แล้วจะเห็นประมาณนี้

+ "puppet" (SHA256) 04:4C:EB:9A:6D:F1:F6:3E:8D:28:68:0A:63:CF:DF:3C:CD:EC:47:63:F7:F3:6F:8D:FC:37:33:F1:24:22:F0:55
 + "web1" (SHA256) 3D:96:2E:97:28:85:FD:20:DF:0B:E3:4D:3A:97:6A:AF:98:0E:E4:36:F9:08:98:7E:15:D1:F5:9E:61:D2:AB:F7

เครื่องหมาย + ข้างหน้าหมายความว่าเราได้ Sign ตัว Certificate นั้นๆ ไปเรียบร้อยแล้ว

แล้ว Agent จะใช้งาน Git ได้เลยหรือเปล่า? ยังครับ ให้เรา Enable มันก่อน มันจะได้ไป Poll หา Master สั่ง

sudo puppet agent --enable

ค่า Default ในการ Poll แต่ละทีจะประมาณ 30 นาทีครับ เวลาเราทดสอบให้ตั้งค่าให้น้อยลงกว่านี้ก็ได้ โดยไปแก้ที่ไฟล์ /etc/puppet/puppet.conf แล้วเพิ่มบรรทัดข้างล่างนี้ไปในส่วนของ [main]

runinterval=10

หลังจาก Restart ตัว Agent แล้วทุกๆ 10 วินาที Agent จะ Poll หา Master ครับ ถ้าติดตั้งถูกต้องมาตั้งแต่แรก เครื่อง Agent น่าจะใช้ Git ได้แล้วครับ ลองดู

หรือถ้าใครใจร้อนไม่อยากรอเวลาให้รันเทสตามนี้ (ต้อง Enable มาก่อนนะ ถึงจะรันเทสได้)

sudo puppet agent --test

ทีนี้ถ้าแก้ Configuration อะไรบน Master ก็อย่าลืม Restart มันด้วยนะ

สุดท้าย สังเกตดูว่าไฟล์ Configuration ทั้งหมดเก็บไว้ที่เดียวคือที่ Puppet Master ของเรา พวก Agent จะคอยมาเช็คจาก Master เองว่ามีอะไรเปลี่ยนแปลงไหมเทียบกับสถานะที่มันเป็นอยู่ ถ้ามีอะไรเปลี่ยนแปลงมันก็จะอัพเดทสถานะมันให้ตรงกับ Configuration ที่อยู่บน Master เองแบบอัตโนมัติ!

เอาล่ะ บอกลา Manual Infrastructure Management ได้เลย ยุคต่อจากนี้คือยุค Automated Infrastructure Management 😀

Credit: How to Install Puppet To Manage Your Server Infrastructure

Author: zkan

Soon to be a newbie data scientist. I ♥ machine learning, computer vision, robotics, image processing, data visualization, and data analytics.

2 thoughts on “ลองเล่น Puppet Master กับ Puppet Agent บนเครื่องเราเอง”

  1. I have noticed you don't monetize your site, don't waste your traffic, you can earn additional bucks every month because you've got hi quality content.
    If you want to know how to make extra money, search for: Ercannou's essential
    adsense alternative

  2. I often visit your website and have noticed that you don't update it often. More frequent updates will give your
    page higher rank & authority in google. I know that writing articles takes a
    lot of time, but you can always help yourself with miftolo's tools which will shorten the
    time of creating an article to a few seconds.

Leave a Reply

Your email address will not be published. Required fields are marked *