ฉันจะปรับทิศทางคำตอบนี้ราวกับว่าคำถามคือ "อะไรคือข้อดีของพ่อครัว - เดี่ยว" เพราะนั่นเป็นวิธีที่ดีที่สุดที่ฉันรู้เพื่อครอบคลุมความแตกต่างระหว่างแนวทาง
คำแนะนำสรุปของฉันสอดคล้องกับคนอื่น ๆ : ใช้ 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 อาจคุ้มค่าสำหรับคุณสมบัตินั้นเพียงอย่างเดียว