ก่อนหน้านี้ผู้ดูแลระบบใช้เชลล์สคริปต์เพื่อรันเซิร์ฟเวอร์และวิธีนี้ไม่มีความสามารถในการปรับขนาดได้ เป็นงานที่น่ากลัวในการแก้ไขสคริปต์สำหรับเซิร์ฟเวอร์ที่เปลี่ยนแปลงตลอดเวลานับร้อยหรือหลายพันเซิร์ฟเวอร์และการกำหนดค่าระบบ
ในบทความนี้เกี่ยวกับ โมดูลและรายการหุ่นเชิด มาดูกันว่าเราจะใช้โมดูลหุ่นเชิดสำหรับการตั้งค่าเซิร์ฟเวอร์อัตโนมัติการติดตั้งโปรแกรมและการจัดการระบบได้อย่างไร
บล็อกนี้จะครอบคลุมหัวข้อต่อไปนี้:
- ความรู้เบื้องต้นเกี่ยวกับการเขียนโปรแกรมหุ่นกระบอก
- คำสำคัญในการเขียนโปรแกรมหุ่นกระบอก
- ขั้นตอนการทำงานของโปรแกรมหุ่นกระบอก
- การสาธิต: การติดตั้ง Apache & MySQL โดยอัตโนมัติ
ความรู้เบื้องต้นเกี่ยวกับการเขียนโปรแกรมหุ่นกระบอก
หุ่น เป็นหนึ่งในเครื่องมือ DevOps ที่นิยมใช้กันอย่างแพร่หลายสำหรับการจัดการการกำหนดค่า จะใช้เพื่อนำมาซึ่ง ความสม่ำเสมอ ในโครงสร้างพื้นฐาน Puppet สามารถกำหนดโครงสร้างพื้นฐานเป็นรหัสจัดการเซิร์ฟเวอร์หลายเครื่องและบังคับใช้การกำหนดค่าระบบซึ่งจะช่วยในกระบวนการจัดการโครงสร้างพื้นฐานโดยอัตโนมัติ
หุ่นกระบอกได้ภาษากำหนดค่าของตัวเอง หุ่น DSL
. เช่นเดียวกับโปรแกรม DevOps อื่น ๆ Puppet ทำการเปลี่ยนแปลงโดยอัตโนมัติกำจัดการเปลี่ยนแปลงที่ขับเคลื่อนด้วยสคริปต์ด้วยตนเอง. อย่างไรก็ตาม Puppet ไม่ได้เป็นเพียงภาษาเชลล์อื่นหรือเป็นภาษาการเขียนโปรแกรมที่บริสุทธิ์เช่น PHP แทนที่จะใช้ Puppetถึง วิธีการตามแบบจำลองที่เปิดเผย ไปจนถึงระบบไอทีอัตโนมัติ สิ่งนี้ทำให้ Puppet สามารถกำหนดโครงสร้างพื้นฐานเป็นรหัสและบังคับใช้การกำหนดค่าระบบด้วยโปรแกรม
ก่อนที่จะเริ่มต้นการสาธิตเรามาดูประเด็นหลักบางประการของการเขียนโปรแกรมหุ่นกระบอก
แฮชแมพและแฮชแมปต่างกันอย่างไร
คำสำคัญในการเขียนโปรแกรมหุ่นกระบอก
สำแดง
โปรแกรมหุ่นกระบอกเรียกว่า รายการ และมีชื่อไฟล์ด้วย .pp ส่วนขยาย. รายการหลักเริ่มต้นของ Puppet คือ /etc/puppet/manifests/site.pp
. (สิ่งนี้กำหนดการกำหนดค่าระบบส่วนกลางเช่นการกำหนดค่า LDAP เซิร์ฟเวอร์ DNS หรือการกำหนดค่าอื่น ๆ ที่ใช้กับทุกโหนด)
ชั้นเรียน
ภายในไฟล์ Manifest เหล่านี้จะมีการเรียกโค้ดบล็อค ชั้นเรียน โมดูลอื่น ๆ สามารถโทร. คลาสกำหนดค่าฟังก์ชันการทำงานขนาดใหญ่หรือขนาดกลางเช่นแพ็กเกจไฟล์คอนฟิกูเรชันและบริการทั้งหมดที่จำเป็นในการรันแอปพลิเคชัน ชั้นเรียนทำให้ง่ายต่อการนำรหัสหุ่นกระบอกมาใช้ซ้ำและปรับปรุงความสามารถในการอ่าน
ทรัพยากร
รหัสหุ่นประกอบด้วยการประกาศทรัพยากรเป็นส่วนใหญ่ ก ทรัพยากร อธิบายองค์ประกอบเฉพาะเกี่ยวกับสถานะที่ระบบต้องการ ตัวอย่างเช่นอาจรวมถึงไฟล์ที่เฉพาะเจาะจงควรมีอยู่หรือควรติดตั้งแพ็คเกจ
โมดูลหุ่น
ยกเว้นตัวหลักsite.pp
รายการ,มันแสดงให้เห็นใน โมดูล .
รหัสหุ่นทั้งหมดของเราจัดอยู่ในโมดูลซึ่งเป็นส่วนประกอบพื้นฐานของหุ่นเชิดที่เราสามารถใช้ซ้ำและแบ่งปันได้ แต่ละโมดูลจะจัดการงานเฉพาะในโครงสร้างพื้นฐานเช่นการติดตั้งและกำหนดค่าชิ้นส่วนของซอฟต์แวร์
โมดูลประกอบด้วยคลาส Puppet ประเภทที่กำหนดงานแผนงานความจุประเภททรัพยากรและปลั๊กอินตัวอย่างเช่นประเภทที่กำหนดเองหรือข้อเท็จจริง ติดตั้งโมดูลใน Puppetเส้นทางโมดูล. Puppet โหลดเนื้อหาทั้งหมดจากทุกโมดูลในโมดูลพา ธ ทำให้โค้ดนี้พร้อมใช้งาน
Puppetlabs มีโมดูลที่กำหนดไว้ล่วงหน้าซึ่งเราสามารถใช้งานได้ทันทีโดยดาวน์โหลดจาก หุ่นเชิด
. คุณยังสามารถสร้างโมดูลหุ่นที่กำหนดเองเพื่อให้เหมาะกับความต้องการของคุณ
ขั้นตอนการทำงานของโปรแกรมหุ่นกระบอก
เราจะใช้ภาษาประกาศของ 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 โดยอัตโนมัติ