ประโยชน์ของการใช้งาน Chef-Server แทน Chef-Solo คืออะไร?


33

ฉันกำลังดูโซลูชันการปรับใช้อัตโนมัติสำหรับทีมของฉันและได้เล่นกับ Chef เมื่อไม่กี่วันที่ผ่านมา ฉันสามารถเรียกใช้แอพพลิเคชั่นบนเว็บได้ง่าย ๆ จาก Red Hat VM โดยใช้ Chef-solo

เป้าหมายสุดท้ายของเราคือการใช้ Chef (หรือระบบอื่น) เพื่อปรับใช้ทอพอโลยีแอปพลิเคชันกับระบบคลาวด์โดยอัตโนมัติเมื่อเรารันบิวด์ กระบวนการของเราโดยทั่วไปจะทำงานดังนี้:

  1. รหัสแอปพลิเคชันเว็บการอ้างอิงและตำราพ่อครัวของเราถูกเก็บไว้ใน SCM
  2. การสร้างจะดำเนินการและสร้างแพ็คเกจเดียวสำหรับภาพที่จะได้รับและทดสอบ
  3. สร้างเครื่องมือปรับใช้รูปเมฆใหม่ที่เรียกใช้ไคลเอนต์พ่อครัวเพื่อรับแพคเกจติดตั้ง
  4. อิมเมจได้รับตำราอาหารจาก SCM หรือเซิร์ฟเวอร์ Chef และติดตั้งทุกอย่างเพื่อเริ่มใช้งาน

ประโยชน์และ / หรือการใช้เคสสำหรับการเรียกใช้ Chef Server มีอะไรบ้าง

มีประโยชน์ใด ๆ ที่สำคัญในการมี Chef Server ไว้และรับตำราจาก SCM กับการใช้ Chef-solo และมีสคริปต์ที่จะดึงตำราจาก SCM หรือไม่?

คำตอบ:


67

ฉันจะปรับทิศทางคำตอบนี้ราวกับว่าคำถามคือ "อะไรคือข้อดีของพ่อครัว - เดี่ยว" เพราะนั่นเป็นวิธีที่ดีที่สุดที่ฉันรู้เพื่อครอบคลุมความแตกต่างระหว่างแนวทาง

คำแนะนำสรุปของฉันสอดคล้องกับคนอื่น ๆ : ใช้ chef-server หากคุณต้องการจัดการสภาพแวดล้อมเสมือนจริงแบบไดนามิกที่คุณจะต้องเพิ่มและลบโหนดบ่อยครั้ง เซิร์ฟเวอร์พ่อครัวก็เป็นCMDBที่ดีเช่นกันหากคุณต้องการ ใช้ Chef-solo ถ้าคุณมีสภาพแวดล้อมแบบไดนามิกน้อยกว่าที่โหนดจะไม่เปลี่ยนแปลงบ่อยเกินไป แต่บทบาทและสูตรอาหารจะ ขนาดและความซับซ้อนของสภาพแวดล้อมของคุณไม่เกี่ยวข้องมากหรือน้อย ทั้งสองวิธีมีขนาดที่ดีมาก

หากคุณปรับใช้ chef-solo ให้ใช้ cronjob กับ rsync, 'git pull' หรือกลไกการถ่ายโอนไฟล์ idempotent อื่น ๆ เพื่อรักษาสำเนาของ repository ของพ่อครัวในแต่ละโหนด cronjob ควรกำหนดค่าได้อย่างง่ายดายเพื่อ (a) ไม่ทำงานเลยและ (b) ทำงาน แต่ไม่มีการซิงค์ที่เก็บข้อมูลในเครื่อง เพิ่มโหนด / ไดเร็กทอรีในที่เก็บเชฟของคุณด้วยไฟล์ json สำหรับแต่ละโหนด cronjob ของคุณมีความซับซ้อนเท่าที่คุณต้องการในแง่ของการระบุ nodefile ที่ถูกต้อง (แม้ว่าฉันจะแนะนำเพียงแค่ $ (hostname -s)). json คุณอาจต้องการสร้างบัญชี opscode และกำหนดค่าไคลเอนต์ที่มีพ่อครัวโฮสต์ถ้าสำหรับ ไม่มีเหตุผลอื่นนอกจากการใช้มีดเพื่อดาวน์โหลดตำราอาหารชุมชนและสร้างโครงกระดูก

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

Chef-server แนะนำหลุมที่คุณใช้ "มีดอัปโหลด" เพื่ออัปเดตตำราอาหารและคุณต้องแก้ไขหลุมนี้ด้วยตัวคุณเอง (เช่นด้วยตะขอหลังโพสต์) หรือการเปลี่ยนแปลงไซต์เสี่ยงถูกเขียนทับโดยคนที่ "มีดอัปโหลด" เป็นสูตรที่ล้าสมัยจากคลังข้อมูลในพื้นที่ที่ล้าสมัยบนแล็ปท็อปของเขา สิ่งนี้มีโอกาสน้อยที่จะเกิดขึ้นกับ chef-solo เนื่องจากการเปลี่ยนแปลงทั้งหมดจะถูกซิงค์กับเซิร์ฟเวอร์โดยตรงจากที่เก็บข้อมูลหลัก ปัญหาที่นี่คือวินัยและจำนวนผู้ทำงานร่วมกัน หากคุณเป็นนักพัฒนาเดี่ยวหรือทีมเล็กการอัปโหลดตำราอาหารผ่าน API จะไม่เสี่ยงมาก ในทีมขนาดใหญ่อาจเป็นไปได้ถ้าคุณไม่ควบคุมที่ดี

นอกจากนี้ด้วย Chef-solo คุณสามารถจัดเก็บบทบาทโหนดทั้งหมดของคุณแอตทริบิวต์ที่กำหนดเองและ runlists เป็นไฟล์ node.json ในที่เก็บหลักของคุณ ด้วย chef-server บทบาทและ runlists ได้รับการแก้ไขอย่างรวดเร็วโดยใช้ API ด้วยพ่อครัวเดี่ยวคุณสามารถติดตามข้อมูลนี้ในการควบคุมการแก้ไข นี่คือที่ที่ความขัดแย้งระหว่างสภาพแวดล้อมแบบคงที่และแบบไดนามิกสามารถมองเห็นได้อย่างชัดเจน หากรายการโหนดของคุณ (ไม่ว่าจะนานแค่ไหน) ก็ไม่เปลี่ยนแปลงบ่อยนักการมีข้อมูลนี้ในการควบคุมการแก้ไขมีประโยชน์มาก ในทางกลับกันหากคุณวางไข่โหนดใหม่บ่อยครั้งและทำลายโหนดเก่า (ไม่ต้องดูชื่อโฮสต์หรือ fqdn อีกครั้ง) การควบคุมการแก้ไขทั้งหมดเป็นเพียงเรื่องยุ่งยากที่ไม่จำเป็นและการมี API เพื่อทำการเปลี่ยนแปลงนั้นสะดวกมาก Chef-server มีคุณสมบัติทั้งหมดที่มุ่งเน้นการจัดการสภาพแวดล้อมคลาวด์แบบไดนามิกเช่นกันเช่นตัวเลือกชื่อบน "bootstrap มีด" ซึ่งช่วยให้คุณแทนที่ fqdn เป็นวิธีเริ่มต้นในการระบุโหนด แต่ในสภาพแวดล้อมแบบคงที่คุณสมบัติเหล่านั้นมีค่า จำกัด โดยเฉพาะอย่างยิ่งเมื่อเปรียบเทียบกับการมีบทบาทและ runlists ในการควบคุมการแก้ไขกับทุกสิ่ง

ในที่สุดสภาพแวดล้อมการทดสอบสูตรสามารถตั้งค่าได้ทันทีเกือบจะไม่มีงานพิเศษ คุณสามารถปิดการใช้งาน cronjobs ที่ทำงานบนเซิร์ฟเวอร์และทำการเปลี่ยนแปลงโดยตรงไปยังพื้นที่เก็บข้อมูลในท้องถิ่น คุณสามารถทดสอบการเปลี่ยนแปลงโดยการเรียกใช้ chef-solo และคุณจะเห็นว่าเซิร์ฟเวอร์จะกำหนดค่าตัวเองอย่างไรในการผลิต เมื่อทุกอย่างได้รับการทดสอบคุณสามารถเช็คอินการเปลี่ยนแปลงและเปิดใช้งาน cronjobs ท้องถิ่นอีกครั้ง แม้ว่าการเขียนสูตรอาหารคุณจะไม่สามารถใช้ API "ค้นหา" ซึ่งหมายความว่าหากคุณต้องการเขียนสูตรอาหารแบบไดนามิก (เช่น loadbalancer) คุณจะต้องแฮ็คข้อ จำกัด นี้รวบรวมข้อมูลจากไฟล์ json ใน โหนด / ไดเร็กทอรีของคุณซึ่งมีแนวโน้มว่าจะสะดวกน้อยลงและจะไม่มีข้อมูลบางส่วนใน CMDB แบบเต็ม อีกครั้งสภาพแวดล้อมแบบไดนามิกมากขึ้นจะสนับสนุนวิธีการที่ขับเคลื่อนด้วยฐานข้อมูล สภาพแวดล้อมแบบไดนามิกที่น้อยจะใช้ได้กับไฟล์ json บนโลคัลดิสก์ ในสภาพแวดล้อมเซิร์ฟเวอร์ที่เชฟที่ทำงานต้องทำการเรียก API ไปยังฐานข้อมูลกลางคุณจะต้องพึ่งพาการจัดการสภาพแวดล้อมการทดสอบทั้งหมดภายในฐานข้อมูลนั้น

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

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

ในการสรุป: หากคุณเป็นแบบไดนามิกและเวอร์ช่วลไลซ์สูง Chef-Server นำเสนอคุณสมบัติที่ยอดเยี่ยมมากมาย อย่างไรก็ตามมีข้อดีบางประการที่แน่นอนและไม่ได้กล่าวถึงโดยเฉพาะในพ่อครัวโดยเฉพาะในสภาพแวดล้อมแบบดั้งเดิม โปรดทราบว่าการใช้งานบนคลาวด์ไม่ได้แปลว่าคุณมีสภาพแวดล้อมแบบไดนามิก ตัวอย่างเช่นหากคุณไม่สามารถเพิ่มโหนดเข้าสู่ระบบของคุณได้โดยไม่ต้องเปิดตัวซอฟต์แวร์เวอร์ชันใหม่คุณอาจไม่ได้ไดนามิก ในที่สุดจากมุมมองระดับสูง CMDB จะมีประโยชน์สำหรับสิ่งต่าง ๆ ที่เกี่ยวข้องกับการดูแลระบบและการกำหนดค่าสัมผัสเช่นการบัญชีและการแบ่งปันข้อมูลระหว่างทีม การใช้ chef-server อาจคุ้มค่าสำหรับคุณสมบัตินั้นเพียงอย่างเดียว


คุณจะจัดเก็บ / แจกจ่ายข้อมูลที่ละเอียดอ่อน (เช่น: กุญแจส่วนตัว / รหัสผ่าน) ด้วย Chef-solo ได้อย่างไร ฉันจะติดตามด้วยการควบคุมการแก้ไขโดยไม่เก็บไว้ในรูปแบบธรรมดาได้อย่างไร
Limbo Peng

@LimboPeng คุณสามารถเก็บถุงข้อมูลที่เข้ารหัสไว้ใน repo Chef คุณต้องเก็บกุญแจเข้ารหัสไว้ภายนอก
Willie Wheeler

27

การเปิดเผย: ฉันทำงานให้กับ Opscode

ประโยชน์หลักของ Chef Server over Solo คือความสามารถในการใช้การค้นหาด้วยโครงสร้างพื้นฐานของคุณ ตัวอย่างคลาสสิกคือตัวโหลดบาลานซ์พร้อมเว็บเซิร์ฟเวอร์ ตัวโหลดบาลานซ์สามารถอัพเดตคอนฟิกูเรชันโดยอัตโนมัติเมื่อเว็บเซิร์ฟเวอร์ถูกเพิ่มและลบออกกับโครงสร้างพื้นฐานเพียงแค่ค้นหามัน Solo เป็นเพียงเครื่องเดียวในขณะที่ Chef Server นำความสามารถในการค้นหาสิ่งต่าง ๆ เช่น "ทุกเครื่องที่มี RAM มากกว่า 4 กิกะไบต์" หรือ "ต้นแบบฐานข้อมูล"

Chef Server ยังให้ความสามารถในการจัดการโครงสร้างพื้นฐานของคุณโดยไม่ต้องคัดลอก tarball ไปรอบ ๆ เพื่อแสดงโครงสร้างพื้นฐานของคุณด้วยคอนโซลการจัดการ มีประโยชน์อื่น ๆ แต่สิ่งเหล่านั้นอยู่ด้านบนของหัวของฉัน หากคุณต้องการทดลองใช้ Chef Server โดยไม่ต้องติดตั้งเพียงลงทะเบียนบัญชี Opscode Hosted Chef 5 โหนดแรกฟรี


1
ขอบคุณ mray ข้อมูลนั้นช่วย TON คุณรู้หรือไม่ว่าจะใช้ปรัชญา DevOps ในการใช้เซิร์ฟเวอร์ Chef ได้อย่างไร สิ่งที่ฉันหมายถึงคือการมีตำราอาหารทั้งหมดของเราอาศัยอยู่ใน SCM มีวิธีง่ายๆในการให้เซิร์ฟเวอร์ Chef ได้รับการอัปเดตตำราอาหารเมื่อเราส่งรหัสใหม่หรือไม่
linusthe3rd

2
@ strife25 คุณควรแน่นอนมีตำราของคุณในระบบควบคุมเวอร์ชัน หากคุณไม่เห็นด้วยกับ Opscode แนะนำ Git เพราะมันง่ายต่อการทำงานกับกิ่งไม้และก้อนหินสำหรับทีมที่แจกจ่าย คุณสามารถเขียนเบ็ด post-commit ที่อัพโหลดตำราอาหารไปยังเซิร์ฟเวอร์ Chef คุณไม่เพียง แต่ทำสำเนาตำราอาหารบนเซิร์ฟเวอร์ Chef เพราะคุณอัปโหลดผ่าน API และนี่คือจุดประสงค์ในการออกแบบ
jtimberman

1

chef-server จัดการ cookbooks และข้อมูลการกำหนดค่าสำหรับโหนดของคุณ

คุณเพิ่ม cookbooks ให้กับ Chef-server โดยใช้เครื่องมือมีดแล้วให้แต่ละโหนดมีรายการเรียกใช้สูตรเพื่อให้พวกเขาหยิบตำราที่ต้องการเมื่อโหนดตั้งค่าเองโดยใช้ Chef-client เนื่องจากพ่อครัว - ไคลเอนต์ทำงานในพื้นหลังโหนดของคุณจะตรวจสอบเป็นระยะ ๆ ว่ามีตำราที่อัปเดตใน Chef-Server ของคุณหรือไม่

chef-server ยังเก็บข้อมูลการกำหนดค่าและตัวแปรของคุณเพื่อให้คุณสามารถเปลี่ยนการตั้งค่าสำหรับโหนดของคุณเพื่อรับโดยอัตโนมัติ สิ่งนี้เป็นสิ่งที่ดีสำหรับการตั้งค่าแบบไดนามิกที่ไม่ควรหรือไม่สามารถ hardcoded ในสูตรอาหารของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.