วิธีปฏิบัติที่ดีที่สุดสำหรับเชฟ / คำถาม


48

ฉันใช้และรักหุ่นกระบอก ฉันย้ายไปที่ บริษัท ใหม่และพวกเขากำลังรับเอาเชฟ ดังนั้นฉันจึงพยายามที่จะเรียนรู้ Chef แต่ฉันมีเวลาที่ยากลำบากในการประกอบมันเข้าด้วยกันเพราะฉันยังคงคิดใน Puppet =)

นี่คือคำถามของฉัน:

  • การติดตั้งบทบาทใน Ruby DSL, JSON หรือจากคอนโซลการจัดการดีกว่าหรือไม่ ทำไมมีหลายวิธีในการทำสิ่งเดียวกัน
  • คุณสามารถจัดระเบียบตำราให้เป็นไดเรกทอรีย่อยได้หรือไม่? เช่น: เรามีซอฟต์แวร์ที่กำหนดเองที่ฉันต้องการเขียนตำราอาหารและติดไว้ใน: chef-repo / cookbooks / ourcompanystuff / customsoftwarecookbook สิ่งนี้จะเป็นวิธีที่ดีหรือไม่?
  • ฉันจะสร้างตำราอาหารสำหรับบทบาทแต่ละประเภทที่ระบุว่าทำอะไรได้บ้าง ฉันมีตำราเหล่านี้หรือไม่รวมถึงตำราอาหารอื่น ๆ (เช่นตำราอาหารสำหรับบทบาทเว็บเซิร์ฟเวอร์ของฉันรวมถึงตำราอาหารอาปาเช่) ฉันไม่แน่ใจว่าวิธีจัดการกับการสืบทอดระหว่างตำราและการสืบทอด
  • มีอะไรที่เหมือนกับลักษณนามภายนอกของ Puppet หรือไม่ดังนั้นโหนดจะกำหนดบทบาทของตนเองโดยอัตโนมัติ
  • ดูเหมือนว่าคุณสามารถกำหนดค่าสิ่งต่าง ๆ ด้วยมีดหรือภายในคอนโซลการจัดการหรือแก้ไขไฟล์ JSON? นี่ทำให้ฉันงงมากว่าทำไมมีหลายวิธีในการทำสิ่งต่าง ๆ มันเป็นอัมพาต! มีเหตุผลที่จะใช้อย่างใดอย่างหนึ่งหรือไม่? มาจากหุ่นดูเหมือนว่าจะง่ายต่อการตั้งใจกำหนดสิ่งผิดพลาดด้วยเครื่องมือเหล่านี้ (เช่น - ทิ้งบางสิ่งบางอย่างออก)
  • ฉันจะจัดเตรียมโหนดกับ Chef ในคลัสเตอร์ dev ของฉันโดยอัตโนมัติได้อย่างไร ด้วย Puppet I จะทำการ VM ซึ่งเชื่อมต่อกับ puppermaster และเริ่มการทำงานของหุ่นกระบอกและตั้งค่าตัวเอง (บทบาทจะถูกกำหนดโดยตัวแยกโหนดภายนอก) ฉันจะทำสิ่งนี้กับพ่อครัวได้อย่างไร ติดตั้ง Chef ด้วยไฟล์ pem / rb ที่ผูกไว้กับเซิร์ฟเวอร์เซิร์ฟเวอร์บอกโหนดด้วยตนเองด้วยมีดหรือแก้ไขสิ่งนี้ในอินเทอร์เฟซการจัดการจากนั้นเริ่มการทำงานของพ่อครัว - ลูกค้าเพื่อตั้งค่าตัวเองหรือไม่

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

เอกสารใน Opscode นั้นใช้ได้ แต่ก็ไม่ค่อยดีเท่าของ Puppet มีแหล่งข้อมูลอื่น ๆ ของเชฟที่ดีที่ฉันอาจพลาดในการค้นหาของฉันหรือไม่?


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

คำตอบ:


84

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

แหล่งข้อมูลเพิ่มเติมมีอยู่ในเชฟซอฟท์แวเว็บไซต์อิงค์

ฉันหวังว่านี่จะช่วยได้.


2
นี่เป็นทรัพยากรที่มีค่าโปรดลิงค์บ่อยขึ้น
Pooyan Khosravi

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