เหตุใดจึงต้องใช้ Chef / Puppet เหนือเชลล์สคริปต์


81

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

ฉันจะยอมรับว่าพวกเขาอ่านง่ายขึ้น แต่มีข้อได้เปรียบอื่น ๆ ของเชลล์สคริปต์นอกเหนือจากการอ่านได้หรือไม่?

คำตอบ:


56

ภาษาเฉพาะโดเมนนั้นสร้างความแตกต่างอย่างมากกับจำนวนรหัสที่คุณเขียน ตัวอย่างเช่นคุณอาจโต้แย้งว่าไม่มีความแตกต่างระหว่าง:

chmod 640 /my/file

และ

file { "/my/file":
    mode => 640,
}

แต่มีความแตกต่างอย่างมากระหว่างสิ่งเหล่านี้:

FILE=/my/file
chmod 640 $FILE
chown foo $FILE
chgrp bar $FILE
wget -O $FILE "http://my.puppet.server/dist/$FILE"
     # where the URL contains "Hello world"

และ

file { "/my/file":
    mode => 640,
    owner => foo,
    group => bar,
    content => "Hello world",
}

จะเกิดอะไรขึ้นถ้า wget ล้มเหลว? สคริปต์ของคุณจะจัดการกับสิ่งนั้นอย่างไร และจะเกิดอะไรขึ้นถ้ามีบางอย่างในสคริปต์ของคุณที่ต้องการ $ FILE เพื่อให้มีเนื้อหาที่ถูกต้อง

คุณอาจโต้เถียงว่ามีใครสามารถใส่echo "Hello world" > $FILEสคริปต์ยกเว้นในตัวอย่างแรกสคริปต์จะต้องเรียกใช้บนไคลเอนต์ในขณะที่หุ่นกระบอกคอมไพล์ทั้งหมดนี้บนเซิร์ฟเวอร์ ดังนั้นถ้าคุณเปลี่ยนเนื้อหาคุณจะต้องเปลี่ยนมันบนเซิร์ฟเวอร์และมันจะเปลี่ยนสำหรับระบบได้มากเท่าที่คุณต้องการ และหุ่นจัดการการอ้างอิงและถ่ายโอนปัญหาให้คุณโดยอัตโนมัติ

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


9
@ พอลเกียร์มันเป็นเรื่องใหญ่ที่จะบอกว่าเครื่องมือการจัดการการกำหนดค่าเป็นวิธีที่จะไปในระยะยาว ตัวอย่างเช่นการใช้ AWS เชลล์สคริปต์สามารถสร้างเซิร์ฟเวอร์ตั้งแต่เริ่มต้นรันการทดสอบบางอย่างและเมื่อคุณมั่นใจว่า AWS instaces นั้นใช้ได้การสร้างภาพ จากนั้นคุณสามารถปรับใช้ภาพนี้เพื่อดูตัวอย่างหรือสภาพแวดล้อมการแสดงละครสำหรับการทดสอบเพิ่มเติมเมื่อคุณตรวจสอบภาพที่ดีสำหรับวัตถุประสงค์ของคุณจากนั้นคุณผลักดันการผลิต เครื่องมือการจัดการการกำหนดค่าไม่ได้ช่วยอะไรเลยในสถานการณ์นี้
Derek Litz

ตอนนี้ถ้าคุณต้องการจัดการเซิร์ฟเวอร์เฉพาะ 100 ตัวที่ผู้คนใช้ทุกวัน (และคุณสามารถควบคุมสิ่งที่พวกเขาทำผิดพลาดหรือไม่) นั่นคือสิ่งที่ควรใช้เครื่องมือการจัดการการกำหนดค่า
Derek Litz

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

33

นี่จะเป็นความคิดเห็นที่ไม่เป็นที่นิยม แต่ระบบการจัดการการกำหนดค่าไม่จำเป็นต้องดีกว่า บางครั้งเรียบง่ายดีที่สุดจริงๆ

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

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


10
เมื่อค่าใช้จ่ายในการจัดการสภาพแวดล้อมดีเยี่ยมจนการจัดการระบบอัตโนมัติมีราคาถูกลงอย่างแท้จริง หากการเปลี่ยนแปลงสคริปต์ง่ายขึ้นที่จัดการใน Git หรือตั้งค่าใน ssh multiplexer เราก็ทำเช่นนั้น สิ่งที่สำคัญที่สุดสำหรับฉันคือฉันตรวจสอบระบบและตรวจสอบว่าทุกอย่างทำงานได้ตามที่คาดหวัง ตราบใดที่ฉันได้รับแจ้งเมื่อมีการกำหนดค่าผิดพลาดมันก็ไม่สำคัญเท่าไรที่จะได้รับการกำหนดค่า
kenchilada

10
@ whitewhite "เมื่อใดที่คุณตัดสินใจที่จะเป็นแบบอัตโนมัติกับไม่ใช่" xkcd.com/1205
MikeyB

3
เครื่องมือที่ทันสมัยกว่าเช่น Ansible มีค่าใช้จ่ายในการจัดการ / การจัดการน้อยกว่า Chef หรือ Puppet ซึ่งต้องการการพึ่งพาเพียงเล็กน้อยถึงไม่มีเลย (Ansible โดยเฉพาะคือ agentless) สิ่งนี้จะช่วยลดการนำไปใช้จริง
GomoX

2
@ whitewhite คุณอัตโนมัติเมื่อคุณต้องการผลผลิตส่วนบุคคล คุณเรียนรู้โดยอัตโนมัติคุณไม่ได้เรียนรู้ด้วยการทำงานทางโลก การเรียนรู้ = การเพิ่มผลิตภาพและการปรับปรุงซ้ำ ๆ ระบบอัตโนมัติรวมกับสิ่งนี้เพื่อสร้างผลบวกมากขึ้น มันเป็นสโนว์บอลเชิงบวกแทนที่จะเป็นลูกบอลลบ ความก้าวหน้าทางเทคนิคกับหนี้ทางเทคนิค
Derek Litz

2
@ABB ไม่นั่นไม่ได้บอกเป็นนัย ฉันไม่ได้พูดถึงเชลล์สคริปท์ฉันพูดถึงระบบอัตโนมัติเป็นหลักปฏิบัติทั่วไป คุณสามารถทำสิ่งต่าง ๆ โดยอัตโนมัติด้วยเชลล์สคริปต์และเรียนรู้สิ่งที่เป็นนามธรรมของสคริปต์แทนที่จะทำสิ่งต่าง ๆ ด้วยตนเองซึ่งไม่เพียง แต่ช่วยคุณประหยัดเวลาในการทำภารกิจนั้นอีกครั้ง แต่จะป้องกันข้อผิดพลาด นอกจากนี้คุณควรจะสามารถเขียนสคริปต์ต่อไปของคุณได้ดีขึ้นเล็กน้อยและเป็นสคริปต์สุดท้าย ลูกบอลหิมะที่เป็นบวก ... อย่างไรก็ตามถ้าคุณเป็นผู้เชี่ยวชาญในการเขียนสคริปต์และคุณไม่ได้เขียนสคริปต์บางสิ่งที่คุณจะต้องรันอีกครั้งมันไม่ได้ช่วยให้คุณเรียนรู้หรือประหยัดเวลาในทางใดทางหนึ่ง
Derek Litz

23

คุณได้ตอบคำถามของคุณเอง ...

จะกลายเป็นระบบอัตโนมัติที่ปรับขนาดได้มากขึ้นและกรงเล็บ ทุกวันนี้ Puppet และ Chef ถือเป็นมาตรฐาน (ตรวจสอบโฆษณาตำแหน่งงาน )

สคริปต์เชลล์แบบ Cobbled-together มีที่ของมัน แต่มันไม่สามารถปรับขนาดได้ในบริบทของการเคลื่อนไหว DevOps การอ่านเป็นส่วนหนึ่งของสิ่งนั้น


7
สคริปต์ของเชลล์มีความเป็นทางการน้อยลงหรือไม่? การอ้างถึงโฆษณาตำแหน่งงานทำให้เกิดข้อโต้แย้งที่น่าเชื่อถือหรือไม่ และ devops นั้นค่อนข้างน่าละอายสำหรับเขา / เขาไม่ได้รับแสงในฐานะนักพัฒนา ลิงค์ไม่ได้พูดอะไรเกี่ยวกับความสามารถในการปรับขนาดได้ การอ้างสิทธิ์ว่าเชลล์สคริปต์ไม่สามารถปรับขนาดได้หรือไม่? ฉันคิดว่าหุ่นกระบอกนั้นน่าสนใจ แต่ไม่จำเป็นต้องมีเหตุผลในการตอบ
คิวเมนตัส

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

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

13

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

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

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

ชิ้นสำคัญ:

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

3
Idempotence แทบจะเป็นไปไม่ได้กับเอสเอส มีการจัดการการพึ่งพาที่ดีโดย yum / apt เป็นต้นการยอมรับไม่เกี่ยวข้อง มีความรู้ชุมชนสำหรับเอสเอส อย่างไรก็ตามฉันยอมรับว่าการไม่คัดลอกสคริปต์จำนวนมากและการกำหนดค่าระบบจากส่วนกลางนั้นมีประโยชน์ทั้งคู่ ฉันได้ยินว่าหุ่นกระบอกต้องการตัวแทนฝั่งไคลเอ็นต์
คิวเมนตัส

10

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

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

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


1
อันที่จริงฉันchmodไม่คิดว่าไฟล์นั้นมีอยู่เพราะไฟล์นั้นถูกสร้างขึ้นโดยสคริปต์หรือผ่านการทดสอบเพื่อการมีอยู่จริง
คิวเมนตัส

9

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

หากความต้องการงานสร้างของคุณนั้นเรียบง่าย (หรือชอบที่จะสร้างเซิร์ฟเวอร์งานแลกเปลี่ยนสินค้าปลอดสารพิษที่ผลิตด้วยมือโดยช่างฝีมือเอง) ให้มันง่าย

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

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

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


1

ฉันสร้างเฟรมเวิร์กเซิร์ฟเวอร์อัตโนมัติบนเชลล์สคริปต์: https://github.com/myplaceonline/posixcube

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

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