วิธีใช้ Puppet Modules สำหรับ IT Infrastructure Automation?



บทช่วยสอนเกี่ยวกับหุ่นมือที่พูดถึงการเขียนโมดูลหุ่นกระบอกและการใช้รายการเพื่อทำให้เป็นอัตโนมัติและบำรุงรักษาโครงสร้างพื้นฐานด้านไอทีขององค์กร

ก่อนหน้านี้ผู้ดูแลระบบใช้เชลล์สคริปต์เพื่อรันเซิร์ฟเวอร์และวิธีนี้ไม่มีความสามารถในการปรับขนาดได้ เป็นงานที่น่ากลัวในการแก้ไขสคริปต์สำหรับเซิร์ฟเวอร์ที่เปลี่ยนแปลงตลอดเวลานับร้อยหรือหลายพันเซิร์ฟเวอร์และการกำหนดค่าระบบ

ในบทความนี้เกี่ยวกับ โมดูลและรายการหุ่นเชิด มาดูกันว่าเราจะใช้โมดูลหุ่นเชิดสำหรับการตั้งค่าเซิร์ฟเวอร์อัตโนมัติการติดตั้งโปรแกรมและการจัดการระบบได้อย่างไร





บล็อกนี้จะครอบคลุมหัวข้อต่อไปนี้:

ความรู้เบื้องต้นเกี่ยวกับการเขียนโปรแกรมหุ่นกระบอก

หุ่น เป็นหนึ่งในเครื่องมือ DevOps ที่นิยมใช้กันอย่างแพร่หลายสำหรับการจัดการการกำหนดค่า จะใช้เพื่อนำมาซึ่ง ความสม่ำเสมอ ในโครงสร้างพื้นฐาน Puppet สามารถกำหนดโครงสร้างพื้นฐานเป็นรหัสจัดการเซิร์ฟเวอร์หลายเครื่องและบังคับใช้การกำหนดค่าระบบซึ่งจะช่วยในกระบวนการจัดการโครงสร้างพื้นฐานโดยอัตโนมัติ



หุ่นกระบอกได้ภาษากำหนดค่าของตัวเอง หุ่น DSL . เช่นเดียวกับโปรแกรม DevOps อื่น ๆ Puppet ทำการเปลี่ยนแปลงโดยอัตโนมัติกำจัดการเปลี่ยนแปลงที่ขับเคลื่อนด้วยสคริปต์ด้วยตนเอง. อย่างไรก็ตาม Puppet ไม่ได้เป็นเพียงภาษาเชลล์อื่นหรือเป็นภาษาการเขียนโปรแกรมที่บริสุทธิ์เช่น PHP แทนที่จะใช้ Puppetถึง วิธีการตามแบบจำลองที่เปิดเผย ไปจนถึงระบบไอทีอัตโนมัติ สิ่งนี้ทำให้ Puppet สามารถกำหนดโครงสร้างพื้นฐานเป็นรหัสและบังคับใช้การกำหนดค่าระบบด้วยโปรแกรม

ก่อนที่จะเริ่มต้นการสาธิตเรามาดูประเด็นหลักบางประการของการเขียนโปรแกรมหุ่นกระบอก

แฮชแมพและแฮชแมปต่างกันอย่างไร

คำสำคัญในการเขียนโปรแกรมหุ่นกระบอก

สำแดง

โปรแกรมหุ่นกระบอกเรียกว่า รายการ และมีชื่อไฟล์ด้วย .pp ส่วนขยาย. รายการหลักเริ่มต้นของ Puppet คือ /etc/puppet/manifests/site.pp . (สิ่งนี้กำหนดการกำหนดค่าระบบส่วนกลางเช่นการกำหนดค่า LDAP เซิร์ฟเวอร์ DNS หรือการกำหนดค่าอื่น ๆ ที่ใช้กับทุกโหนด)



ชั้นเรียน

ภายในไฟล์ Manifest เหล่านี้จะมีการเรียกโค้ดบล็อค ชั้นเรียน โมดูลอื่น ๆ สามารถโทร. คลาสกำหนดค่าฟังก์ชันการทำงานขนาดใหญ่หรือขนาดกลางเช่นแพ็กเกจไฟล์คอนฟิกูเรชันและบริการทั้งหมดที่จำเป็นในการรันแอปพลิเคชัน ชั้นเรียนทำให้ง่ายต่อการนำรหัสหุ่นกระบอกมาใช้ซ้ำและปรับปรุงความสามารถในการอ่าน

ทรัพยากร

รหัสหุ่นประกอบด้วยการประกาศทรัพยากรเป็นส่วนใหญ่ ก ทรัพยากร อธิบายองค์ประกอบเฉพาะเกี่ยวกับสถานะที่ระบบต้องการ ตัวอย่างเช่นอาจรวมถึงไฟล์ที่เฉพาะเจาะจงควรมีอยู่หรือควรติดตั้งแพ็คเกจ

โมดูลหุ่น

ยกเว้นตัวหลักsite.ppรายการ,มันแสดงให้เห็นใน โมดูล .

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

โมดูลประกอบด้วยคลาส Puppet ประเภทที่กำหนดงานแผนงานความจุประเภททรัพยากรและปลั๊กอินตัวอย่างเช่นประเภทที่กำหนดเองหรือข้อเท็จจริง ติดตั้งโมดูลใน Puppetเส้นทางโมดูล. Puppet โหลดเนื้อหาทั้งหมดจากทุกโมดูลในโมดูลพา ธ ทำให้โค้ดนี้พร้อมใช้งาน

โมดูล - การเขียนโปรแกรมหุ่นกระบอก - EdurekaPuppetlabs มีโมดูลที่กำหนดไว้ล่วงหน้าซึ่งเราสามารถใช้งานได้ทันทีโดยดาวน์โหลดจาก หุ่นเชิด . คุณยังสามารถสร้างโมดูลหุ่นที่กำหนดเองเพื่อให้เหมาะกับความต้องการของคุณ

ขั้นตอนการทำงานของโปรแกรมหุ่นกระบอก

เราจะใช้ภาษาประกาศของ Puppet เพื่ออธิบายสถานะที่ต้องการของระบบในไฟล์ที่เรียกว่าไฟล์ Manifest Manifests อธิบายถึงวิธีที่คุณควรกำหนดค่าทรัพยากรเครือข่ายและระบบปฏิบัติการเช่นไฟล์แพ็กเกจและบริการ

หุ่นที่รวบรวมปรากฏเป็น แคตตาล็อก และใช้แต่ละแค็ตตาล็อกกับโหนดที่เกี่ยวข้องเพื่อให้แน่ใจว่าการกำหนดค่าของ tเขาโหนถูกต้องในโครงสร้างพื้นฐานของคุณ

สาธิต: การติดตั้ง Apache & MySQL โดยอัตโนมัติ

บทความเกี่ยวกับโมดูลหุ่นนี้เป็นแบบลงมือปฏิบัติซึ่งจะแสดงสองวิธีในการใช้โมดูลหุ่นกระบอกและยังสอนวิธีการ อัตโนมัติ การติดตั้งเซิร์ฟเวอร์ที่กำหนดค่าด้วยโมดูลทั้งสองนี้

ในการเริ่มต้นตรวจสอบให้แน่ใจว่าคุณมีการตั้งค่าโครงสร้างพื้นฐานของ Puppet พร้อมซึ่งจะมีเซิร์ฟเวอร์หลักหุ่นกระบอกและตัวแทนหุ่น 2 ตัว

  • Puppet Master: Ubuntu 18.04
  • ตัวแทน 1: Ubuntu 18.04
  • ตัวแทน 2:CentOS7

นี่คือโครงร่างของสิ่งที่เราจะประสบความสำเร็จในภาคปฏิบัติ:


เริ่มต้นด้วยการลงมือปฏิบัติ:

การสร้างโมดูลตั้งแต่เริ่มต้น

ในโมดูลหุ่นนี้เราจะจัดการกับงานต่างๆเช่นการดาวน์โหลดแพ็คเกจ Apache การกำหนดค่าไฟล์และการตั้งค่าโฮสต์เสมือน

  • จาก Puppet Master ไปที่ไดเร็กทอรีโมดูลของ Puppet และสร้างไดเร็กทอรี Apache:
    cd / etc / หุ่น / โมดูล sudo mkdir apache
  • สร้างไดเร็กทอรีย่อยจากภายในไดเร็กทอรี apache: manifest, template, files และตัวอย่าง
    cd apache sudo mkdir {รายการเทมเพลตไฟล์ตัวอย่าง}
  • ไปที่ไดเร็กทอรี manifest:
    ซีดีรายการ
  • จากที่นี่เราจะแยกโมดูลออกเป็นชั้นเรียนตามเป้าหมายของส่วนนั้นของโค้ด

init.pp -> เพื่อดาวน์โหลดแพ็คเกจ Apache

params.pp -> เพื่อกำหนดตัวแปรและพารามิเตอร์

config.pp -> เพื่อจัดการไฟล์กำหนดค่าสำหรับบริการ Apache

vhosts.pp -> เพื่อกำหนดโฮสต์เสมือน

โมดูลนี้จะใช้ประโยชน์จากไฟล์ Hiera (ระบบค้นหาข้อมูลการกำหนดค่าคีย์ - ค่าในตัวใช้สำหรับแยกข้อมูลออกจากรหัสหุ่น) ข้อมูล เพื่อจัดเก็บตัวแปรสำหรับแต่ละโหนด

ขั้นตอนที่ 1: ดาวน์โหลด Apache Package

สร้างคลาส init.pp

ตอนนี้เราจะสร้างไฟล์init.ppไฟล์ภายใต้ไดเร็กทอรี manifest เพื่อเก็บแพ็กเกจ apache
เนื่องจากเรามี 2 OS (ubuntu และ CentOS7) ที่ใช้ชื่อแพ็คเกจต่างกันสำหรับ Apache เราจึงต้องใช้ตัวแปร$ apachename.

/etc/puppetlabs/code/environment/production/modules/apache/manifests/init.pp

class apache {แพ็คเกจ {'apache': name => $ apachename, sure => present,}}

แพ็คเกจ ทรัพยากรช่วยในการจัดการแพ็คเกจ ใช้เพื่อเพิ่มลบหรือตรวจสอบให้แน่ใจว่ามีแพ็กเกจอยู่

ในกรณีส่วนใหญ่ไฟล์ ชื่อ ของทรัพยากร (apacheด้านบน) ควรเป็นชื่อของแพ็คเกจที่กำลังจัดการ เนื่องจากรูปแบบการตั้งชื่อที่แตกต่างกันเราเรียกชื่อจริงของแพ็คเกจเมื่อกับ ชื่อ เอกสารอ้างอิง. ดังนั้น ชื่อ เรียกตัวแปรที่ยังไม่ได้กำหนด$ apachename.

ทำให้มั่นใจ การอ้างอิงช่วยให้มั่นใจได้ว่าแพคเกจเป็นนำเสนอ.

สร้างไฟล์ params.pp

params.ppไฟล์จะกำหนดตัวแปรที่ต้องการ ในขณะที่เราสามารถกำหนดตัวแปรเหล่านี้ภายในไฟล์init.ppเนื่องจากต้องใช้ตัวแปรเพิ่มเติมนอกประเภททรัพยากรโดยใช้ไฟล์params.ppไฟล์อนุญาตให้กำหนดตัวแปรในรูปแบบถ้าคำสั่งและใช้ในหลายชั้นเรียน

สร้างไฟล์params.ppไฟล์และรหัสต่อไปนี้

/etc/puppetlabs/code/environment/production/modules/apache/manifests/params.pp

class apache :: params {if $ :: osfamily == 'RedHat' {$ apachename = 'httpd'} elsif $ :: osfamily == 'Debian' {$ apachename = 'apache2'} else {fail ('นี่ไม่ใช่ Distro ที่รองรับ ')}}

นอกของเดิม init.ppคลาสแต่ละชื่อคลาสต้องแตกแขนงออกไปapache. เราเรียกคลาสนี้ว่า apache :: params . ชื่อหลังเครื่องหมายทวิภาคคู่ควรใช้ชื่อร่วมกับไฟล์ อันถ้าคำสั่งใช้เพื่อกำหนดพารามิเตอร์โดยดึงข้อมูลจาก ปัจจัย , Puppet มีการติดตั้งแฟคเตอร์เป็นส่วนหนึ่งของการติดตั้งเอง ที่นี่ Facter จะดึงตระกูลระบบปฏิบัติการ (ครอบครัว) เพื่อแยกแยะว่าเป็นหมวกสีแดงหรือใช้ Debian

ด้วยพารามิเตอร์ที่กำหนดในที่สุดเราต้องเรียกไฟล์ params.pp ไฟล์และพารามิเตอร์ลงในไฟล์init.pp. ในการทำเช่นนี้เราต้องเพิ่มพารามิเตอร์หลังชื่อคลาส แต่ก่อนวงเล็บปีกกาเปิด({).

ดังนั้นinit.ppที่เราสร้างไว้ก่อนหน้านี้ควรมีลักษณะดังนี้:

class apache ($ apachename = $ :: apache :: params :: apachename,) สืบทอด :: apache :: params {package {'apache': name => $ apachename, sure => present,}}

สตริงค่า $ :: apache :: params :: value บอกให้ Puppet ดึงค่าจากไฟล์ apache โมดูล พารามิเตอร์ class ตามด้วยชื่อพารามิเตอร์ ส่วน สืบทอด :: apache :: params อนุญาตสำหรับinit.ppเพื่อสืบทอดคุณค่าเหล่านี้

ขั้นตอนที่ 2: จัดการไฟล์การกำหนดค่า

ไฟล์คอนฟิกูเรชัน Apache จะแตกต่างกันขึ้นอยู่กับว่าคุณกำลังทำงานบนระบบที่ใช้ Red Hat หรือ Debian

คุณสามารถค้นหาไฟล์อ้างอิงต่อไปนี้ได้ในตอนท้ายของการสาธิตนี้:httpd.conf(หมวกสีแดง),apache2.conf(เดเบียน).

  • คัดลอกเนื้อหาของ httpd.conf และapache2.confในไฟล์แยกต่างหากและบันทึกในไฟล์ ไฟล์ ไดเรกทอรีที่ / etc / Puppetlabs / รหัส / สภาพแวดล้อม / การผลิต / โมดูล / apache / ไฟล์ .
  • แก้ไขทั้งสองไฟล์เป็น ปิดการใช้งาน ให้มีชีวิตอยู่. คุณจะต้องแอดไลน์ ปิด KeepAlive ในhttpd.confไฟล์. หากคุณไม่ต้องการเปลี่ยนการตั้งค่านี้เราควรเพิ่มความคิดเห็นที่ด้านบนของแต่ละรายการไฟล์:
    /etc/puppetlabs/code/environment/production/modules/apache/files/httpd.conf
# ไฟล์นี้จัดการโดยหุ่น

เพิ่มไฟล์เหล่านี้ลงในไฟล์init.ppดังนั้น Puppet จะทราบตำแหน่งของไฟล์เหล่านี้ทั้งบนเซิร์ฟเวอร์หลักและโหนดตัวแทน ในการทำเช่นนี้เราใช้ไฟล์ ไฟล์ ทรัพยากร.

/etc/puppetlabs/code/environment/production/modules/apache/manifests/init.pp

ไฟล์ {'configuration-file': path => $ conffile, sure => file, source => $ confsource,}

เนื่องจากเรามีไฟล์คอนฟิกูเรชันในสองตำแหน่งที่แตกต่างกันเราจึงตั้งชื่อทั่วไปให้กับทรัพยากร ไฟล์การกำหนดค่า ด้วยไฟล์ เส้นทาง กำหนดเป็นพารามิเตอร์ด้วยเส้นทางแอตทริบิวต์

ทำให้มั่นใจ ตรวจสอบให้แน่ใจว่าเป็นไฟล์

แหล่งที่มา ระบุตำแหน่งบน Puppet master ของไฟล์ที่สร้างด้านบน

เปิดparams.ppไฟล์.

เรากำหนด $ conffile และ $ confsourceตัวแปรภายในถ้าคำให้การ:

/etc/puppetlabs/code/environment/production/modules/apache/manifests/params.pp

if $ :: osfamily == 'RedHat' {... $ conffile = '/etc/httpd/conf/httpd.conf' $ confsource = 'หุ่น: ///modules/apache/httpd.conf'} elsif $: : osfamily == 'Debian' {... $ conffile = '/etc/apache2/apache2.conf' $ confsource = 'หุ่น: ///modules/apache/apache2.conf'} else {...

เราจำเป็นต้องเพิ่มพารามิเตอร์ที่จุดเริ่มต้นของไฟล์apacheการประกาศคลาสในinit.ppไฟล์คล้ายกับตัวอย่างก่อนหน้านี้

เมื่อไฟล์คอนฟิกูเรชันเปลี่ยนไป Apache ต้องรีสตาร์ท ในการทำให้เป็นอัตโนมัติเราสามารถใช้ทรัพยากรบริการร่วมกับ แจ้ง แอตทริบิวต์ซึ่งจะเรียกทรัพยากรให้ทำงานเมื่อใดก็ตามที่ไฟล์กำหนดค่ามีการเปลี่ยนแปลง:

เฟรมเวิร์กที่ขับเคลื่อนด้วยข้อมูลในตัวอย่าง webdriver ของซีลีเนียม

/etc/puppetlabs/code/environment/production/modules/apache/manifests/init.pp

ไฟล์ {'configuration-file': path => $ conffile, sure => file, source => $ confsource, inform => Service ['apache-service'],} service {'apache-service': name => $ apachename, hasrestart => true,}

บริการ รีซอร์สใช้พารามิเตอร์ที่สร้างไว้แล้วซึ่งกำหนดชื่อ Apache บนระบบ Red Hat และ Debian
เริ่มต้นใหม่ แอตทริบิวต์ถูกใช้เพื่อเริ่มการทำงานของบริการที่กำหนดไว้

ขั้นตอนที่ 3: สร้างไฟล์โฮสต์เสมือน

ไฟล์ของโฮสต์เสมือนจะได้รับการจัดการแตกต่างกันขึ้นอยู่กับการแจกจ่ายระบบของคุณ ด้วยเหตุนี้เราจะเข้ารหัสโค้ดสำหรับโฮสต์เสมือนในไฟล์ถ้าคำสั่งคล้ายกับที่ใช้ในไฟล์params.ppคลาส แต่มีทรัพยากรของ Puppet จริง

  • จากภายในapache / รายการ /ไดเร็กทอรีสร้างและเปิดไฟล์vhosts.ppไฟล์. เพิ่มโครงกระดูกของถ้าคำให้การ:

/etc/puppetlabs/code/environment/production/modules/apache/manifests/vhosts.pp

class apache :: vhosts {if $ :: osfamily == 'RedHat' {} elsif $ :: osfamily == 'Debian' {} else {}}

ตำแหน่งของไฟล์โฮสต์เสมือนบนเซิร์ฟเวอร์ CentOS 7 ของเราคือ/etc/httpd/conf.d/vhost.conf . คุณต้องสร้างไฟล์เป็นเทมเพลตบนหุ่นต้นแบบ ทำเช่นเดียวกันกับไฟล์โฮสต์เสมือนของ Ubuntu ซึ่งอยู่ที่/etc/apache2/sites-available/example.com.confแทนที่example.comด้วย FQDN ของเซิร์ฟเวอร์

  • ไปที่ไฟล์ เทมเพลต ไฟล์ภายในไฟล์ apache โมดูลจากนั้นสร้างสองไฟล์สำหรับโฮสต์เสมือนของคุณ:

สำหรับระบบ Red Hat:
/etc/puppetlabs/code/environment/production/modules/apache/templates/vhosts-rh.conf.erb

ServerAdmin ชื่อเซิร์ฟเวอร์ ServerAlias ​​www. DocumentRoot / var / www // public_html / ErrorLog /var/www//logs/error.log CustomLog /var/www//logs/access.log รวมกัน

สำหรับระบบ Debian:
/etc/puppet/modules/apache/templates/vhosts-deb.conf.erb

ServerAdmin ชื่อเซิร์ฟเวอร์ ServerAlias ​​www. DocumentRoot / var / www / html // public_html / ErrorLog /var/www/html//logs/error.log CustomLog /var/www/html//logs/access.log รวมกันต้องได้รับอนุญาตทั้งหมด

เราใช้เพียงสองตัวแปรในไฟล์เหล่านี้: แอดมินอีเมล์ และ ชื่อเซิร์ฟเวอร์ . เราจะกำหนดสิ่งเหล่านี้แบบโหนดต่อโหนดภายในไฟล์site.ppไฟล์.

  • กลับไปที่ไฟล์vhosts.ppไฟล์. ตอนนี้เทมเพลตที่สร้างขึ้นสามารถอ้างอิงได้ในโค้ด:

/etc/puppetlabs/code/environment/production/modules/apache/manifests/vhosts.pp

class apache :: vhosts {if $ :: osfamily == 'RedHat' {file {'/etc/httpd/conf.d/vhost.conf': sure => file, content => template ('apache / vhosts-rh .conf.erb '),}} elsif $ :: osfamily ==' Debian '{ไฟล์ {' /etc/apache2/sites-available/$servername.conf ': sure => file, content => template (' apache /vhosts-deb.conf.erb '),}} else {fail (' นี่ไม่ใช่ distro ที่รองรับ ')}}

ครอบครัวกระจายทั้งสองโทรไปที่ไฟล์ทรัพยากรและรับชื่อตำแหน่งของโฮสต์เสมือนในการกระจายตามลำดับ สำหรับ Debian อีกครั้งหมายถึงการอ้างถึงไฟล์$ servernameมูลค่า.เนื้อหาแอตทริบิวต์เรียกเทมเพลตที่เกี่ยวข้อง.

  • ไฟล์โฮสต์เสมือนทั้งสองอ้างอิงสองไดเร็กทอรี โดยค่าเริ่มต้นจะไม่อยู่ในระบบ เราสามารถสร้างสิ่งเหล่านี้ได้โดยใช้ไฟล์ไฟล์ทรัพยากรแต่ละรายการภายในไฟล์ถ้าคำให้การ. ที่สมบูรณ์vhosts.confไฟล์ควรมีลักษณะ:

/etc/puppetlabs/code/environment/production/modules/apache/manifests/vhosts.pp

class apache :: vhosts {if $ :: osfamily == 'RedHat' {file {'/etc/httpd/conf.d/vhost.conf': sure => file, content => template ('apache / vhosts-rh .conf.erb '),} ไฟล์ {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / log ',]: sure => ไดเรกทอรี}} elsif $ :: osfamily == 'Debian' {ไฟล์ {'/etc/apache2/sites-available/$servername.conf': sure => file, content => template ('apache / vhosts-deb. conf.erb '),} file {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / logs ',]: sure => ไดเร็กทอรี ,}} else {fail ('นี่ไม่ใช่ distro ที่รองรับ')}}

ขั้นตอนที่ 4: ทดสอบโมดูล

  • ไปที่ไฟล์apache / รายการ /ไดเร็กทอรีเรียกใช้ไฟล์ ตัวแยกวิเคราะห์หุ่น ในไฟล์ทั้งหมดเพื่อให้แน่ใจว่าการเข้ารหัสหุ่นไม่มีข้อผิดพลาด:

sudo / opt / Puppetlabs / bin / หุ่นตัวแยกวิเคราะห์ตรวจสอบความถูกต้อง init.pp params.pp vhosts.pp

ควรคืนค่าว่างเปล่าโดยไม่มีปัญหา

  • ไปที่ไฟล์ ตัวอย่าง ไดเร็กทอรีภายในapacheโมดูล. สร้างไฟล์init.ppไฟล์และรวมคลาสที่สร้างขึ้น แทนที่ค่าสำหรับ$ servernameและ$ adminemailด้วยตัวคุณเอง:

/etc/puppetlabs/code/environment/production/modules/apache/examples/init.pp

การใช้คิวลำดับความสำคัญใน java
serveremail = 'webmaster@example.com' $ servername = 'puppy.example.com' รวม apache รวมถึง apache :: vhosts
  • ทดสอบโมดูลโดยการเรียกใช้ ใช้หุ่น กับ –Noop แท็ก:
    ใช้ sudo / opt / หุ่นเชิด / ถัง / หุ่น --noop init.pp

ไม่ควรส่งคืนข้อผิดพลาดและผลลัพธ์ที่จะทำให้เกิดการรีเฟรชจากเหตุการณ์ ในการติดตั้งและกำหนดค่า apache บน Puppet master ให้รันอีกครั้งโดยไม่ต้อง–Noopหากต้องการ

  • กลับไปที่ไดเร็กทอรี Puppet หลักจากนั้นไปที่ไฟล์ปรากฎโฟลเดอร์ (ไม่ที่มีอยู่ในโมดูล Apache)

cd / etc / Puppetlabs / code / environment / production / manifest

สร้างไฟล์site.ppไฟล์,และรวมโมดูล Apache สำหรับแต่ละโหนดเอเจนต์ ป้อนตัวแปรสำหรับไฟล์แอดมินอีเมล์ และ ชื่อเซิร์ฟเวอร์พารามิเตอร์ ของคุณsite.ppควรมีลักษณะดังต่อไปนี้:

/etc/puppetlabs/code/environment/production/manifests/site.pp

โหนด 'Puppet-agent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'puppy.example.com' รวมถึง apache รวมถึง apache :: vhosts} node 'Pupe-agent-centos.example .com '{$ adminemail =' webmaster@example.com '$ servername =' puppy.example.com 'รวมถึง apache รวมถึง apache :: vhosts}

ตามค่าเริ่มต้นบริการ Puppet agent บนโหนดที่มีการจัดการของคุณจะตรวจสอบกับต้นแบบโดยอัตโนมัติทุกๆ 30 นาทีและใช้การกำหนดค่าใหม่จากต้นแบบ คุณยังสามารถเรียกใช้กระบวนการ Puppet agent ด้วยตนเองระหว่างการรันตัวแทนอัตโนมัติ หากต้องการรันโมดูลใหม่บนโหนดตัวแทนของคุณด้วยตนเองให้ล็อกอินเข้าสู่โหนดและรัน:

sudo / opt / หุ่นเชิด / bin / ตัวแทนหุ่น -t

ตอนนี้เราได้เรียนรู้วิธีสร้างโมดูลตั้งแต่เริ่มต้นแล้วเรามาเรียนรู้วิธีใช้โมดูลที่มีอยู่แล้วจากการปลอมแปลงหุ่นกระบอก

ใช้โมดูลจาก PuppetForge

หุ่นปลอม มีโมดูลมากมายให้เซิร์ฟเวอร์ทำงาน เราสามารถกำหนดค่าสิ่งเหล่านี้ได้เช่นเดียวกับโมดูลที่คุณสร้างขึ้นและสามารถประหยัดเวลาได้เนื่องจากเราไม่จำเป็นต้องสร้างโมดูลตั้งแต่ต้น

ตรวจสอบให้แน่ใจว่าคุณอยู่ในไฟล์ / etc / Puppetlabs / รหัส / สภาพแวดล้อม / การผลิต / โมดูล ไดเร็กทอรีและติดตั้งไฟล์ โมดูล MySQL ของ Puppet Forge โดย PuppetLabs นอกจากนี้ยังจะติดตั้งโมดูลที่จำเป็นต้องมี

cd / etc / Puppetlabs / รหัส / สภาพแวดล้อม / การผลิต / โมดูล

sudo / opt / หุ่นเชิด / bin / หุ่นโมดูลติดตั้งหุ่นเชิด-mysql

ใช้ Hiera เพื่อสร้างฐานข้อมูล

ก่อนที่คุณจะสร้างไฟล์คอนฟิกูเรชันสำหรับโมดูล MySQL ให้พิจารณาว่าคุณอาจไม่ต้องการใช้ค่าเดียวกันกับโหนดเอเจนต์ทั้งหมด ในการจัดหา Puppet ด้วยข้อมูลที่ถูกต้องต่อโหนดเราใช้ Hiera คุณจะใช้รหัสผ่านรูทที่แตกต่างกันต่อโหนดดังนั้นการสร้างฐานข้อมูล MySQL ที่แตกต่างกัน

  • นำทางไปยัง/ etc / หุ่นและสร้างไฟล์การกำหนดค่าของ Hierahiera.yamlหลักหุ่นเชิดไดเรกทอรี คุณจะใช้ค่าเริ่มต้นของ Hiera:

/etc/puppetlabs/code/environment/production/hiera.yaml

--- รุ่น: 5 ลำดับชั้น: - ชื่อ: เส้นทางทั่วไป: common.yaml ค่าเริ่มต้น: data_hash: yaml_data datadir: data
  • สร้างไฟล์common.yaml. มันจะกำหนดค่าเริ่มต้น ราก รหัสผ่านสำหรับ MySQL:

/etc/puppetlabs/code/environment/production/common.yaml

mysql :: เซิร์ฟเวอร์ :: root_password: 'รหัสผ่าน'

เราใช้ไฟล์common.yamlไฟล์เมื่อไม่ได้กำหนดตัวแปรไว้ที่อื่น ซึ่งหมายความว่าเซิร์ฟเวอร์ทั้งหมดจะแชร์รหัสผ่านรูท MySQL เดียวกัน รหัสผ่านเหล่านี้สามารถแฮชเพื่อเพิ่มความปลอดภัยได้

  • หากต้องการใช้ค่าเริ่มต้นของโมดูล MySQL คุณสามารถเพิ่มไฟล์ รวม ':: mysql :: server' บรรทัดไปที่site.ppไฟล์. อย่างไรก็ตามในตัวอย่างนี้คุณจะลบล้างค่าเริ่มต้นบางส่วนของโมดูลเพื่อสร้างฐานข้อมูลสำหรับแต่ละโหนดของคุณ

แก้ไขไฟล์site.ppไฟล์ที่มีค่าต่อไปนี้:

โหนด 'Puppetagent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' รวม apache รวม apache :: vhosts รวม mysql :: server mysql :: db {'mydb_ $ {fqdn} ': user =>' myuser ', password =>' mypass ', dbname =>' mydb ', host => $ :: fqdn, allow => [' SELECT ',' UPDATE '], tag = > $ domain,}} node 'Puppetagent-centos.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' รวม apache รวม apache :: vhosts รวม mysql :: server mysql :: db {'mydb _ $ {fqdn}': user => 'myuser', password => 'mypass', dbname => 'mydb', host => $ :: fqdn, allow => ['SELECT', ' UPDATE '], tag => $ domain,}}

การติดตั้งโมดูลหุ่นโดยอัตโนมัติจากหุ่นต้นแบบไปยังตัวแทนหุ่น

  • คุณสามารถรันการอัปเดตเหล่านี้ด้วยตนเองในแต่ละโหนดโดย SSHing ในแต่ละโหนดและออกคำสั่งต่อไปนี้:

sudo / opt / หุ่นเชิด / bin / ตัวแทนหุ่น -t

  • มิฉะนั้นบริการตัวแทนหุ่นในโหนดที่มีการจัดการของคุณจะตรวจสอบกับต้นแบบโดยอัตโนมัติทุกๆ 30 นาทีและใช้การกำหนดค่าใหม่ใด ๆ จากต้นแบบ

ใช้แคตตาล็อกสำเร็จบนเอเจนต์ Ubuntu

ใช้แคตตาล็อกบนตัวแทน CentOS เรียบร้อยแล้ว

ดังนั้นการติดตั้งทั้งหมดจึงได้รับ อัตโนมัติ บนโหนดตัวแทนโดยใช้แค็ตตาล็อกไฟล์โค้ดและการอ้างอิงที่ใช้สำหรับการสาธิตนี้สามารถพบได้ ที่นี่ .

ฉันหวังว่าการสาธิตนี้จะช่วยให้คุณได้รับแนวคิดที่ชัดเจนเกี่ยวกับโมดูลหุ่นและการแสดงผลและการใช้งานสำหรับโครงสร้างพื้นฐานไอทีโดยอัตโนมัติในกรณีนี้งานของคุณจะกลายเป็นเรื่องง่ายเพียงระบุการกำหนดค่าใน Puppet Master และตัวแทนของ Puppet จะประเมินรายการหลักโดยอัตโนมัติและใช้โมดูลที่ระบุการตั้งค่า Apache และ MySQL หากคุณติดขัดกับข้อสงสัยใด ๆ โปรดโพสต์ได้ตามต้องการ .

หากคุณพบสิ่งนี้ สอนหุ่นกระบอก เกี่ยวข้อง ตรวจสอบไฟล์ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ซึ่งมีเครือข่ายผู้เรียนที่พึงพอใจมากกว่า 250,000 คนกระจายอยู่ทั่วโลก หลักสูตรการฝึกอบรมการรับรอง Edureka DevOps ช่วยให้ผู้เรียนมีความเชี่ยวชาญในกระบวนการและเครื่องมือ DevOps ต่างๆเช่น Puppet, Jenkins, Nagios และ GIT สำหรับการทำหลายขั้นตอนใน SDLC โดยอัตโนมัติ