แก้ไขคำถามและคำตอบนี้มีอายุปีแล้ว วิธีปฏิบัติที่ดีที่สุดที่ชัดเจนได้รับการสอนผ่านโมดูลการเรียนรู้ด้วยตนเองของChef Rally ที่ผลิตโดย Chef Software, Inc. จำนวนคำตอบดั้งเดิมอยู่ด้านล่าง
ในคำตอบนี้ "Chef" หรือ "chef-client" มักจะหมายถึง Chef Infra ผลิตภัณฑ์ Opscode เปลี่ยนชื่อเป็นเชฟ Software, Inc ในปี 2013 ในเดือนเมษายน 2019 เชฟเปิดซอร์สโค้ดสำหรับผลิตภัณฑ์ทั้งหมดพร้อมกับสร้างชื่อแบรนด์ที่สอดคล้องกัน
ไม่ชัดเจนว่าควรติดตั้งบทบาทใน ruby DSL, JSON หรือจากคอนโซลการจัดการหรือไม่ ทำไมมีหลายวิธีในการทำสิ่งเดียวกัน
การอัพเดต 2019 : Policyfiles เป็นเวิร์กโฟลว์ที่ดีที่สุดในการใช้ บทบาทถือว่าเป็นวิธีการที่ด้อยกว่าและ Chef Software, Inc. แนะนำให้โยกย้ายไปยัง Policyfiles
มีหลายวิธีที่จะทำสิ่งเดียวกันเพราะผู้คนมีเวิร์กโฟลว์ที่แตกต่างกัน คุณเลือกเวิร์กโฟลว์ที่ดีที่สุดสำหรับสภาพแวดล้อมของคุณ ฉันจะอธิบายว่าอะไรคือความแตกต่างเพื่อให้คุณสามารถตัดสินใจอย่างชาญฉลาด
Ruby DSL สำหรับบทบาทมีอยู่เพื่อให้ง่ายต่อการเขียนบทบาทโดยไม่ต้องรู้ไวยากรณ์ของ JSON มันเป็นวิธีที่ง่ายในการเริ่มต้นกับบทบาท เมื่อคุณทำการเปลี่ยนแปลงคุณอัปโหลดไปยัง Chef Server ด้วยมีด
knife role from file myrole.rb
สิ่งนี้จะแปลงบทบาทเป็น JSON และเก็บไว้บนเซิร์ฟเวอร์ หากคุณมีสภาพแวดล้อมที่บังคับใช้พื้นที่เก็บข้อมูล Chef ที่บทบาทของคุณอาศัยอยู่เป็นแหล่งของความจริงการทำงานนี้ค่อนข้างดี
JSON เป็นสิ่งที่ Chef Server เก็บไว้ดังนั้นคุณจึงสามารถแก้ไข JSON ได้โดยตรงในคอนโซลการจัดการ มันต้องใช้ฟิลด์มากกว่า Ruby Ruby เพื่อให้ Knife จดจำได้อย่างถูกต้องในการอัพโหลด รายละเอียดเหล่านั้นถูกซ่อนไว้ในระดับหนึ่งผ่านทางเว็บ UI
ข้อเสียของการใช้คอนโซล webui / management สำหรับการแก้ไขบทบาทคือไม่ได้อยู่ในระบบควบคุมเวอร์ชันในเครื่องของคุณเว้นแต่คุณจะดาวน์โหลดจากเซิร์ฟเวอร์ คุณสามารถทำได้ด้วยมีด:
knife role show myrole -Fj
The -Fj
knife knife เพื่อ "แสดงในรูปแบบ JSON" คุณสามารถเปลี่ยนเส้นทางผลลัพธ์ไปยังไฟล์. json ได้หากต้องการ
ปรับปรุงปีที่ผ่านมา : มีคำสั่งมีดเพิ่มเติมสำหรับการทำงานกับไฟล์ในที่เก็บเชฟท้องถิ่น ปัจจุบันคำสั่งเหล่านี้รองรับเฉพาะไฟล์ฟอร์แมต JSON RFC ชุมชนเปิดซึ่งจะอยู่ที่การเพิ่มการสนับสนุนสำหรับทับทิม DSL สำหรับปลั๊กอินเหล่านี้ นี่เป็นบทสรุปสั้น ๆ ของเวิร์กโฟลว์
ตรวจสอบความแตกต่างของเนื้อหาระหว่างเซิร์ฟเวอร์และไฟล์โลคัล
knife diff roles/myrole.json
อัพโหลดไฟล์บทบาทที่จัดรูปแบบ JSON roles/
เส้นทางเป็นสิ่งจำเป็น สิ่งนี้ได้รับการแมปไปยังปลายทาง API เดียวกันบนเซิร์ฟเวอร์
knife upload roles/myrole.json
ดาวน์โหลดเนื้อหาจากเซิร์ฟเวอร์เขียนทับเนื้อหาของไฟล์ในที่เก็บ
knife download roles/myrole.json
คำสั่งเหล่านี้มาจากknife-essentials
ซึ่งสร้างไว้ในแพ็คเกจไคลเอ็นต์ของเชฟ
คุณสามารถจัดระเบียบตำราให้เป็นไดเรกทอรีย่อยได้หรือไม่? เช่น - เรามีซอฟต์แวร์ที่กำหนดเองที่ฉันต้องการเขียนตำราอาหารและติดไว้ใน: chef-repo / cookbooks / ourcompanystuff / customsoftwarecookbook นี่เป็นวิธีปฏิบัติที่ดีหรือไม่?
ไม่มีดมีความคาดหวังว่าที่ตำราอาหารควรมีชีวิตเพราะใช้ API เพื่ออัปโหลดตำราอาหารไปยังเซิร์ฟเวอร์ แห่งนี้ตั้งอยู่ในที่มีknife.rb
cookbook_path
ใน Chef Infra เวอร์ชันเก่าคุณสามารถระบุอาเรย์ของเส้นทางสำหรับตำราอาหารได้ แต่สิ่งนี้กำลังถูกคัดค้านเนื่องจากต้องการการบำรุงรักษาที่มากกว่าและสับสนกับผู้ใช้
โดยการประชุมเราตั้งชื่อตำราเฉพาะของลูกค้าหรือเฉพาะไซต์โดยใช้ชื่อนำหน้าในตำราเรียน สำหรับตัวอย่างของคุณมันจะเป็น:
chef-repo/cookbooks/ourcompany_customsoftware
อาจมีตำราหลายเล่มสำหรับ "บริษัท ของเรา" ขึ้นอยู่กับสิ่งที่คุณทำ
อ้างอิงเพิ่มเติม:
ฉันจะสร้างตำราอาหารสำหรับบทบาทแต่ละประเภทที่ระบุว่าทำอะไรได้บ้าง ฉันมีตำราเหล่านี้หรือไม่รวมถึงตำราอาหารอื่น ๆ (เช่น - ตำราอาหารสำหรับบทบาทเว็บเซิร์ฟเวอร์ของฉันรวมถึงตำราอาหารอาปาเช่) ฉันไม่แน่ใจว่าวิธีจัดการกับการสืบทอดระหว่างตำราและการสืบทอด
ไม่มีความสัมพันธ์โดยตรงหรือการพึ่งพาระหว่างบทบาทกับตำราอาหาร
บทบาทมีรายการเรียกใช้ซึ่งระบุสูตรและบทบาทอื่น ๆ ที่ควรใช้กับโหนดใด ๆ ที่มีบทบาทนั้น โหนดมีรายการเรียกใช้ที่สามารถมีบทบาทหรือสูตรอาหารได้ เมื่อ Chef ทำงานบนโหนดมันจะขยายรายการเรียกใช้สำหรับบทบาทและสูตรอาหารทั้งหมดที่มีรวมถึงจากนั้นดาวน์โหลดตำราที่ต้องการ ในรายการเรียกใช้โหนด:
recipe[apache2]
เชฟจะดาวน์โหลดapache2
ตำราอาหารสำหรับโหนดเพื่อให้สามารถใช้สูตรนี้ได้
คุณอาจมีตำราอาหารเฉพาะสำหรับบทบาทในโครงสร้างพื้นฐานของคุณ โดยทั่วไปคุณจะมีตำราอาหารสำหรับการตั้งค่าบริการบางประเภทเช่น apache2, mysql, redis, haproxy และอื่น ๆ จากนั้นคุณจะนำหนังสือเหล่านั้นเข้ามามีบทบาทที่เหมาะสม หากคุณมีสิ่งเฉพาะแอปพลิเคชันที่กำหนดเองซึ่งจำเป็นต้องเกิดขึ้นเพื่อเติมเต็มบทบาทคุณสามารถเขียนลงในตำราอาหารที่กำหนดเองได้ (เช่นที่ฉันอ้างถึงข้างต้น)
อ้างอิงเพิ่มเติม:
มีอะไรเช่นหุ่นลักษณนามภายนอกโหนดเพื่อให้โหนดกำหนดบทบาทของพวกเขาโดยอัตโนมัติหรือไม่?
"ใช่." Chef Infra Server ทำการเก็บข้อมูลโหนด (ใน JSON) โดยอัตโนมัติและเซิร์ฟเวอร์จะทำดัชนีข้อมูลโหนดทั้งหมดโดยอัตโนมัติเพื่อค้นหา
อ้างอิงเพิ่มเติม:
ดูเหมือนว่าคุณสามารถกำหนดค่าสิ่งต่าง ๆ ด้วยมีดหรือภายในคอนโซลการจัดการหรือแก้ไขไฟล์ JSON? นี่ทำให้ฉันงงมากว่าทำไมมีหลายวิธีในการทำสิ่งต่าง ๆ มันเป็นอัมพาต! มีเหตุผลที่จะใช้อย่างใดอย่างหนึ่งหรือไม่?
Chef Infra Server มี RESTful API ที่ส่งและรับการตอบกลับ JSON Knife และคอนโซลการจัดการคือส่วนต่อประสานผู้ใช้สำหรับการโต้ตอบกับ API จากมุมมองการดูแลระบบ
คุณสามารถใช้เครื่องมือที่คุณชอบได้ดีกว่าแม้ว่าคอนโซลการจัดการจะไม่มีคุณสมบัติมากมายเท่ากับมีด คนส่วนใหญ่ที่ใช้ Chef Infra ชอบอินเตอร์เฟสบรรทัดคำสั่งสำหรับประสิทธิภาพและความยืดหยุ่นที่มีให้แม้กระทั่งผู้ที่ใช้ Chef Infra บน Windows เพิ่มเติมknife
เป็นเครื่องมือที่ใช้ปลั๊กอินที่คุณสามารถสร้างปลั๊กอินใหม่เพื่อโต้ตอบกับ Chef Infra Server หรือกับส่วนอื่น ๆ ของโครงสร้างพื้นฐานของคุณ
Chef Infra เป็นชุดของไลบรารีดั้งเดิมและ API มันช่วยให้คุณมีความยืดหยุ่นในการสร้างระบบการจัดการการกำหนดค่าที่ทำงานได้ดีที่สุดสำหรับโครงสร้างพื้นฐานของคุณ
อ่านเพิ่มเติม:
ฉันจะจัดเตรียมโหนดกับพ่อครัวโดยอัตโนมัติในคลัสเตอร์ dev ของฉันได้อย่างไร ด้วย puppet ฉันใช้ VM ที่เชื่อมต่อกับ puppermatser และ kicks off puppet run และตั้งค่าตัวเอง (บทบาทจะถูกกำหนดโดยตัวแยกโหนดภายนอก) ฉันจะทำสิ่งนี้กับพ่อครัวได้อย่างไร - ติดตั้ง Chef ด้วยไฟล์ pem / rb ที่ผูกมันไว้กับเซิร์ฟเวอร์เชฟบอกโหนดด้วยตัวเองด้วยมีดหรือแก้ไขสิ่งนี้ในส่วนต่อประสานการจัดการจากนั้นเริ่มการทำงานของพ่อครัว - ลูกค้าเพื่อตั้งค่าตัวเองหรือไม่
คุณจะต้องใช้ปลั๊กอิน bootstrap ของมีด นี่คือปลั๊กอินในตัวที่มาพร้อมกับมีด คุณเรียกมันเช่นนี้
knife bootstrap 10.1.1.112 -x root -i ~/.ssh/root_id_rsa -r 'role[webserver]'
นี่จะ:
- SSH ไปยังระบบเป้าหมาย (10.1.1.112) ในฐานะ
root
ผู้ใช้ที่ใช้คีย์ SSH (คุณสามารถ ssh เป็นผู้ใช้อื่นแล้วใช้--sudo
)
- ติดตั้ง Ruby
- ติดตั้ง Chef
- สร้างไฟล์การกำหนดค่า Chef สำหรับ Chef Server ของคุณอ่านการกำหนดค่าของมีด (.chef / knife.rb)
- คัดลอกคีย์ส่วนตัว "การตรวจสอบ" RSA ซึ่งโหนดจะใช้ในการลงทะเบียนกับ Chef Server โดยอัตโนมัติ
- วิ่ง
chef-client
โดยใช้เครื่องหมายจุลภาคคั่นรายการที่ระบุ ในตัวอย่างนี้มีการใช้webserver
บทบาทเท่านั้น
สิ่งนี้ถือว่าระบบเป้าหมายได้รับการจัดเตรียมมีที่อยู่ IP และคุณสามารถ SSH เป็นรูทได้ คุณอาจจำเป็นต้องปรับวิธีการทำงานของคุณทั้งนี้ขึ้นอยู่กับนโยบายท้องถิ่นและกระบวนการจัดสรรของคุณ หน้า bootstrap แบบมีดบนวิกิอธิบายเพิ่มเติมเกี่ยวกับวิธีการทำงาน
มีดยังมีปลั๊กอินสำหรับผู้ให้บริการคลาวด์สาธารณะจำนวนหนึ่งเช่น Amazon EC2 และ Rackspace Cloud มีปลั๊กอินสำหรับสภาพแวดล้อมคลาวด์ส่วนตัวเช่นยูคาลิปตัสและ OpenStack นอกจากนี้ยังมีปลั๊กอินสำหรับ VMware, Vsphere และอื่น ๆ คุณสามารถดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบ
อ่านเพิ่มเติม:
มีแหล่งข้อมูลพ่อครัวที่ดีอื่น ๆ ที่ฉันอาจพลาดในการค้นหาของฉันหรือไม่?
เชฟเอกสารแหล่งที่มาหลักของเอกสาร
เรียนรู้เชฟชุมนุมเป็นชุดของโมดูลแนะนำตัวเองที่คุณสามารถเรียนรู้เกี่ยวกับแง่มุมต่างๆของเชฟ Infra และผลิตภัณฑ์เชฟอื่น ๆ
ผมใช้ในการรักษาบล็อกที่ผมโพสต์เคล็ดลับเทคนิคและคำแนะนำเกี่ยวกับเชฟ Infra: http://jtimberman.housepub.org/ ฉันมีซีรีส์ที่เรียกว่า " เคล็ดลับด่วน " เนื่องจากสถานการณ์ในชีวิตจริงและภาระผูกพันอื่น ๆ ฉันไม่มีเวลาในการดูแลไซต์ แต่ฉันอาจกลับมาใช้อีกในอนาคต
ลูกค้าเชฟสามารถรับความช่วยเหลือและสนับสนุนได้จากเว็บไซต์สนับสนุน:
ชุมชนผู้ใช้ Chef เป็นแหล่งความช่วยเหลือเพิ่มเติมที่ยอดเยี่ยม:
แหล่งข้อมูลเพิ่มเติมมีอยู่ในเชฟซอฟท์แวเว็บไซต์อิงค์
ฉันหวังว่านี่จะช่วยได้.