เครื่องมือการจัดการการกำหนดค่ามีความเหมาะสมที่จะใช้เป็นเครื่องมือการปรับใช้หรือไม่


10

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

อะไรที่ทำให้ Capistrano จำเป็นต้องใช้หุ่นเชิดหรือพ่อครัว?

คำตอบของฉันคือโพสต์ลิงก์ไปยังบทความของโนอาห์กิ๊บส์ "เราต้องการทั้ง Capistrano และ Chef หรือไม่?" . โดยส่วนตัวแล้วฉันยังสมัครรับข้อมูลมุมมองของโนอาห์ว่าเหมาะสมที่สุดที่จะ:

  • ใช้เครื่องมือการปรับใช้ผู้เชี่ยวชาญเช่น Capistrano สำหรับการปรับใช้
  • ใช้เครื่องมือการจัดการการกำหนดค่าผู้เชี่ยวชาญเช่น Chef สำหรับการจัดการการกำหนดค่า

วิธีการพื้นฐานที่เครื่องมือแต่ละประเภทใช้ในการทำงานให้เสร็จสมบูรณ์นั้นแตกต่างกันมาก:

  • เครื่องมือการจัดการการกำหนดค่า - เป็นเรื่องเกี่ยวกับการสร้างและรักษาสถานะที่ต้องการของระบบ ตัวอย่างของเครื่องมือในการจัดการการกำหนดค่าเป็นเชฟ , หุ่นกระบอก , เบิ้ล , PowerShell DSC , เกลือสแต็ค

  • เครื่องมือการปรับใช้ - เป็นเรื่องเกี่ยวกับการส่งมอบเวอร์ชั่นของซอฟต์แวร์ในสภาพแวดล้อมการโฮสต์ซึ่งมีฟังก์ชันการทำงานเพื่อรักษาซอฟต์แวร์หลายเวอร์ชันบนเครื่องหลายเครื่องและจัดการเวอร์ชันที่เป็น "ปัจจุบัน" ซึ่งมีความจำเป็นโดยธรรมชาติ ตัวอย่างของเครื่องมือการปรับใช้เป็นCapistrano , ปลาหมึก Deploy , DeployerและCommand.io

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

คำถาม:มีเครื่องมือการจัดการการกำหนดค่าเช่น Chef, Ansible และ Puppet ครบกำหนดจนถึงจุดที่พวกเขาสามารถตอบสนองทั้ง idempotent และแบบจำลองที่จำเป็นได้หรือไม่?


Ansible ทำได้เสมอหุ่นเชิดตั้งแต่ 4.0
Jiri Klouda

1
Richard ขอบคุณสำหรับคำถามคุณภาพสูงทั้งหมดที่คุณส่งมาเมื่อเร็ว ๆ นี้ ฉันขอขอบคุณสำหรับการทำงานหนักที่คุณวางไว้ในไซต์ที่เติมไว้ล่วงหน้าระหว่างเบต้า การถามคำถามนำที่ดีนั้นยากและคุณเก่งในสิ่งที่คุณทำ
Jiri Klouda

@JiriKlouda คุณเป็นมากกว่าการต้อนรับมีอักษร "DevOps SE" ในคอมพิวเตอร์ของฉันเพื่อเตือนให้ฉันโพสต์คำถามเมื่อพวกเขานึกถึง
Richard Slater

คำตอบ:


10

ในบริบทดังกล่าวควรใช้คำแนะนำทั่วไปทันที: ใช้เครื่องมือที่เหมาะสมสำหรับงาน

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

ตัวอย่างเช่นเครื่องมือการจัดการไฟล์จำนวนมากรวมถึงคุณสมบัติการดูภาพและเครื่องมือการประมวลผลภาพจำนวนมากรวมถึงคุณสมบัติการจัดการไฟล์ คุณสามารถย้ายไฟล์ไปรอบ ๆ และคุณสามารถดูภาพด้วยเครื่องมืออย่างใดอย่างหนึ่งซึ่งมักจะดีพอ ๆ กัน

ด้วยเหตุนี้จึงเป็นไปได้ที่จะมีส่วนทั้งหมดของกระบวนการพัฒนาซอฟต์แวร์ที่ครอบคลุม / ทับซ้อนกันด้วยเครื่องมือหลายชุด (ชุด) แม้ว่าคุณสมบัติ / ความสามารถหลักของพวกเขาจะแตกต่างกัน

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

ทำให้คำถามนี้เป็นหลักตามความคิดเห็น;)


ฉันเห็นด้วยอย่างสมบูรณ์! องค์กรจำนวนมากขึ้นกำลังพัฒนา "DevOps toolchain" โดยเฉพาะด้วยเครื่องมือที่เหมาะสมสำหรับแนวคิดในการทำงาน สำหรับข้อมูลเพิ่มเติมหน้าวิกินี้ทำงานได้ดีพูดคุยเกี่ยวกับเครื่องมือ / งานที่แตกต่างกัน: en.wikipedia.org/wiki/DevOps_toolchain
Karl Harnagy

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

6

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

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

เครื่องมือจัดการการกำหนดค่ามีภาษาที่ประกาศซึ่งระบุสถานะของระบบ เครื่องมือการปรับใช้มีภาษาที่จำเป็นซึ่งบอกให้ระบบทำสิ่งต่าง ๆ คน DevOps จำเป็นต้องทำทั้งสองอย่าง

การใช้เครื่องมือการปรับใช้ Capistrano เป็นเรื่องงุ่มง่ามในการใช้ภาษาเพื่อบอกระบบเพื่อให้แน่ใจว่าเว็บเซิร์ฟเวอร์ทำงานอยู่ คุณต้องออกคำสั่งเพื่อรีสตาร์ทเว็บเซิร์ฟเวอร์และอีกอันเพื่อตรวจสอบว่าเว็บเซิร์ฟเวอร์นั้นทำงานหรือไม่ มันเป็น kludge เพื่อให้เว็บเซิร์ฟเวอร์เข้าสู่สถานะที่รู้จัก

การใช้เครื่องมือจัดการการกำหนดค่า Ansible เป็นสิ่งที่งุ่มง่ามในการรีสตาร์ทเว็บเซิร์ฟเวอร์ ภาษาช่วยให้คุณบอกเว็บเซิร์ฟเวอร์ว่าเป็น "up" แต่หากคุณต้องการเริ่มต้นใหม่โดยเฉพาะคุณต้องตั้งค่าสถานะเป็น "เริ่มใหม่" แต่ไม่มีวิธีง่ายๆในการตรวจสอบว่าเว็บเซิร์ฟเวอร์ได้รับการรีสตาร์ทหรือไม่ นี่คือ kludge ใน Ansible เพื่อเปิดใช้งานการดำเนินการแบบครั้งเดียว

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


ฉันเห็นด้วยกับ Capistrano ที่น่าอึดอัดใจเล็กน้อยสำหรับกรณีนี้ โดยปกติจะใช้เป็นเนมสเปซสำหรับสคริปต์ ruby ​​/ snippets / lambda ที่ดำเนินการจากระยะไกลผ่าน ssh ส่วนของคุณใน Ansible ไม่ถูกต้อง คุณอาจต้องการค้นคว้าเล็กน้อยและแก้ไข โพสต์แรกที่ดี แต่โปรดทำงานกับมันอีกเล็กน้อย
Jiri Klouda

@JiriKlouda มีอะไรผิดปกติกับส่วน Ansible? คุณหมายถึงส่วนno easy way to check if the web server has been restartedที่สามารถตรวจสอบได้โดยการลงทะเบียนตัวแปรหรือไม่?
David Vasandani

มีหลายวิธีที่จะทำผู้เขียนคำตอบก็ไม่ทราบ อย่าลังเลที่จะเปลี่ยนเป็นคำถามแยกกันเนื่องจากความคิดเห็นไม่เหมาะสำหรับคำตอบทางเทคนิค
Jiri Klouda

4

TL; DR : เพียงใช้ Ansbile เป็นทั้งเครื่องมือกำหนดค่าและการปรับใช้ :)

การปรับใช้มีหลายประเภท:

  • แอพลิเคชันที่ใช้ (ไฟล์แพคเกจเก็บถาวร)

  • อิงคอนเทนเนอร์ (รวมถึง VM, Habitat, LXC, Docker)

  • ตามฟังก์ชั่น (บริการไมโคร / Lambdas / ฟังก์ชั่น)

ฉันคิดว่าในกรณีนี้เราจะพูดเฉพาะเกี่ยวกับการอัปเดตแอปพลิเคชันบนเซิร์ฟเวอร์


สำหรับการปรับใช้คุณต้องมีสองสิ่งเกิดขึ้น:

  1. ไฟล์หรือแพ็คเกจที่ถูกต้องจะต้องย้ายไปที่เซิร์ฟเวอร์
  2. สถานะการกำหนดค่าและบริการจำเป็นต้องเปลี่ยน

ตอนนี้สำหรับ (1) คุณสามารถใช้หลายกลยุทธ์:

  • ที่เก็บ / การประดิษฐ์สิ่งประดิษฐ์
  • ที่เก็บแพ็กเกจ / ผู้จัดการแพ็คเกจ
  • ระบบควบคุมเวอร์ชัน / การอัพเดท + การคอมไพล์ (เลือกได้)
  • โปรโตคอลการถ่ายโอนไฟล์ (scp, rsync, ftp)
  • เครื่องมือการปรับใช้

สำหรับ (2) คุณสามารถใช้:

  • เครื่องมือจัดการการกำหนดค่า
  • เครื่องมือการปรับใช้

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

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


2
ประสบการณ์ของฉันกับ Ansible และ Capistrano จะนำฉันไปสู่ข้อสรุปเดียวกัน ฉันแค่ไปกับ Ansible และสิ่งที่ดีเกี่ยวกับ Ansible คือการประกาศ "สถานะที่ต้องการ" ของแผนที่อย่างดีกับคำสั่งพื้นฐานที่จำเป็น
Jay Godse

1
บางครั้งผู้คนมักเพิกเฉยต่อการมีส่วนร่วมของชุมชนรอบ ๆ เครื่องมือการจัดการการกำหนดค่า องค์ประกอบชุมชนของ Ansible นั้นมีข้อยกเว้นที่น่าสังเกต (เช่น DebOps) ที่ยังไม่ได้ขัดและมีคุณสมบัติครบถ้วนเช่น Chef's และ Puppet ในฐานะที่วัดนี้ในขณะที่ผมพบว่าหุ่นกระบอกและเชฟสามารถที่จะทั้ง "ใช้" และunapplyแนวทางการกำหนดค่า (ทำหรือยกเลิกชุดของการเปลี่ยนแปลง) เบิ้ลเป็นที่ดีที่ "ใช้" เป็นส่วนหนึ่ง แต่ไม่ดีดังนั้นที่ " ส่วน unapply
Jesse Adelman

3

การปรับใช้แอปพลิเคชันเป็นสิ่งที่ยากในการตรึงเนื่องจากมีปัญหาย่อยมากมาย ระบบการจัดการการกำหนดค่านั้นยอดเยี่ยมในการสร้างแบบจำลองซึ่งเป็นแบบรวมกันและทำงานกับ "อะไรคือสถานะที่ต้องการของระบบ" ในบริบทของการปรับใช้แอปสิ่งนี้ยอดเยี่ยมสำหรับสิ่งต่าง ๆ เช่นการปรับใช้บิตกับเครื่องการจัดการไฟล์กำหนดค่าและการตั้งค่าบริการระบบ สิ่งที่ไม่ดีอย่างยิ่งสำหรับสิ่งที่เป็นขั้นตอนโดยเนื้อแท้การโยกย้ายฐานข้อมูลและบริการรีสตาร์ท ฉันมักจะพยายามใส่ตรรกะการบรรจบกันใน Chef และให้เครื่องมือขั้นตอนภายนอก (โดยทั่วไปเป็น Fabric ในเคสของฉัน) จัดการบิตที่เหลือไม่กี่ตัว

ดังนั้นโดยพื้นฐานแล้วคุณควรใช้ทั้งสองอย่างกับชิ้นส่วนที่ดีที่สุด


3

สำหรับซอฟต์แวร์และการปรับใช้รหัสไปยังเซิร์ฟเวอร์ที่มีอยู่หรือภายใน Docker container คำตอบนั้นค่อนข้างง่าย - ไม่คุณไม่จำเป็นต้องใช้ทั้งคู่ แต่คุณอาจต้องการทั้งสองอย่างหากเครื่องมือหรือยูทิลิตี้อื่นเพิ่มมูลค่าและเป็นเครื่องมือที่เหมาะสมสำหรับงานอย่างไรก็ตามสิ่งต่าง ๆ มีความซับซ้อนมากขึ้นเมื่อคุณปรับใช้เซิร์ฟเวอร์และระบบปฏิบัติการ

มูลค่าเพิ่มอย่างหนึ่งของความคิด DevOps คือการจัดการโครงสร้างพื้นฐานเป็นรหัสและปรับใช้หรือทำลายเครื่องเสมือนหรือแม้กระทั่งโลหะเปลือยในสภาพแวดล้อมที่ยืดหยุ่นสูง ระบบการจัดการการกำหนดค่าของคุณไม่สามารถ netboot และเริ่มต้นเซิร์ฟเวอร์ของคุณได้อย่างง่ายดายสำหรับคุณและไม่สามารถจัดการที่เก็บแพ็กเกจและการอัปเดต / การปะแก้สำหรับคุณระหว่างและหลังการใช้งานหรือในบางกรณีการออกใบอนุญาตและการให้สิทธิ์

สำหรับ Amazon Web Services นี่เป็นสิ่งที่จัดการได้ค่อนข้างสะดวกโดย API ส่วนใหญ่ แต่สำหรับพวกเราที่ต้องจัดการศูนย์ข้อมูลของเราเองนี่ไม่ใช่ตัวเลือก ด้วยเหตุนี้หัวหน้าโครงการ (และหมวกสีแดงอีกครั้งซึ่งแบรนด์นี้ ) ได้พบว่ามันจำเป็นที่จะกำKatello , Candlepinและผู้จัดการการกำหนดค่าเช่นเบิ้ล, Foreman หรือหุ่นกระบอกด้วยกันเมื่อปรับใช้Katello สถานการณ์

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


หรือไม่พ่อครัวจัดการกับ Capistrano อย่างสง่างามเช่น deploys แพ็คเกจช็อกโกแลตวางอยู่ใต้หน้าต่างและทุกอย่างเป็นที่รู้จักกันดีในการติดตั้งแพ็คเกจ (deb, rpm, msi, nullsoft ฯลฯ ) มันนำภาระทางด้านบรรจุภัณฑ์มาใช้ซึ่งที่อยู่อาศัยมีจุดมุ่งหมายเพื่อแก้ไข แต่นั่นเป็นระบบการจัดการการกำหนดค่าที่ค่อนข้างสามารถจัดการกับ Deploys ได้ฉันสามารถบอกได้โดยเห็นว่าทำ 40 deploys ต่อสัปดาห์ในสภาพแวดล้อมหลายรายการรวมถึงการผลิต เป็นภาระสูงก่อนรหัส แต่นั่นไม่มากไปกว่าสิ่งเดียวกันกับเครื่องมืออื่น ๆ ateotd
Tensibai

1
อันที่จริงหัวหน้าคนงานไม่ใช่ระบบการจัดเตรียมการปรับใช้หรือการจัดการการกำหนดค่า มันเป็นเพียงสกินที่ให้บริการ UI บนเว็บและเฟรมเวิร์กที่รวมระบบการจัดการการกำหนดค่า (หุ่นเชิด), ระบบการจัดการสิทธิ์ใช้งาน (candlepin), ระบบจัดเก็บข้อมูลและการจัดการแพทช์ (Katello) และระบบจัดเตรียม / ติดตั้ง (kickstart) มันเป็นส่วนหน้าของโครงการที่แตกต่างกันทั้งหมดเหล่านี้และติดกาวเข้าด้วยกัน ในขณะที่สวยมากระบบการจัดการการกำหนดค่าใด ๆ ที่สามารถติดตั้งแพคเกจเป็นสิ่งที่พวกเขาไม่สามารถทำคือการให้การจัดการแก้ไขในลักษณะที่คล้ายคลึงกับเซิร์ฟเวอร์ WSUS
เจมส์ Shewey

หรือปักหมุดหรือปรับใช้แพคเกจเวอร์ชันเฉพาะรวมถึงแพ็คเกจที่ไม่อยู่ใน repos upstream หรือ repos mashup จุดของฉันคือว่าถ้า Red Hat / หัวหน้า / Katello รู้สึกว่ามันไม่สามารถทำได้ด้วยเพียงแค่ระบบการจัดการการกำหนดค่าที่สะดุดตาที่สุด - เพราะขาดการจัดเตรียมชิ้น / การใช้งานที่เป็นมูลค่า noting
James Shewey

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