การจัดการการกำหนดค่าสำหรับ 'เซิร์ฟเวอร์เดียวผู้ดูแลระบบหลายคน'


9

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

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

เราเริ่มต้นด้วยการติดตั้งใหม่ทั้งหมดเพิ่มบทบาทใน ansible เมื่อใดก็ตามที่เราต้องการตั้งค่าบางอย่าง (nginx, phpfpm, postfix, firewall, sftp, munin, .. ) บางทีอาจเป็นเพราะการขาดประสบการณ์ของเราแน่นอนว่าเราไม่สามารถพิมพ์ชุดของงานที่ต้องตรวจสอบได้อย่างแม่นยำในแบบที่เราต้องการในครั้งเดียวและเนื่องจากการกำหนดค่าเป็นกระบวนการทดลองและข้อผิดพลาดเล็กน้อย ซึ่งหมายความว่าในทางปฏิบัติโดยทั่วไปเราจะกำหนดค่าบริการใดก็ตามที่เราต้องการเรียกใช้บนเซิร์ฟเวอร์ก่อนแล้วจึงแปลเป็นงานที่ต้องทำ คุณสามารถดูว่าสิ่งนี้เกิดขึ้นที่ไหน ผู้คนลืมที่จะทดสอบงานหรือกลัวที่จะเสี่ยงต่อการทำลายสิ่งต่าง ๆ หรือแย่กว่านั้นคือเราลืมหรือละเลยที่จะเพิ่มสิ่งต่าง ๆ เข้าไปในสิ่งที่เข้าใจได้

วันนี้เรามีความมั่นใจน้อยมากว่าการกำหนดค่า ansible สะท้อนให้เห็นถึงสิ่งที่กำหนดค่าบนเซิร์ฟเวอร์

ขณะนี้ฉันเห็นปัญหาหลักสามประการ:

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

การพิจารณาที่สำคัญที่นี่คือสำหรับทุกสิ่งที่เราทำมันควรจะง่ายสำหรับผู้มาใหม่ที่จะเรียนรู้เชือกโดยไม่ต้องฝึกฝนมากมาย

มีทางเลือกที่ทำงานได้ที่ยังคงให้การรับประกันและการตรวจสอบบางอย่าง (เทียบได้กับการรวมไฟล์ Ansible กับบางไฟล์master) ที่ "กำหนดค่าสิ่งต่าง ๆ และจดบันทึกสิ่งที่คุณทำ" ล้มเหลว

แก้ไข: เราได้พิจารณาที่/etcจะคอมไพล์แล้ว มีวิธีที่เหมาะสมในการป้องกันความลับ (ไพรเวตคีย์ ฯลฯ ) ด้วยวิธีนี้ แต่ยังมีที่เก็บการตั้งค่าคอนฟิกที่มีอยู่ภายนอกเซิร์ฟเวอร์อย่างใด?

คำตอบ:


10

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

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

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

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


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

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

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

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

4
@ThomWiggers ฉันจะทึกทักเอาว่าคุณทั้งสองอยู่ในทีมเดียวกันตั้งแต่คุณใช้ "เรา" ตกลงคุณถามวิธีการทำอย่างถูกต้อง ฉันให้คำตอบ ไม่ว่าคุณต้องการทำอย่างถูกต้องหรือไม่ การทำ CM นั้นต้องใช้เวลาเงินและความตั้งใจ หากคุณมีข้อกำหนดเช่นการจัดหาและปรับใช้ certs ผ่าน LE ให้ตั้งค่าเครื่องเสมือน $ 5US / เดือนด้วย Digital Ocean และใช้สำหรับการทดสอบ Heck คุณสามารถปรับใช้ตามความต้องการเมื่อคุณต้องการทดสอบการเปลี่ยนแปลงแล้วฆ่ามัน
EEAA

6

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

ในขณะที่มีปัญหาอื่น ๆ (เช่นไม่ได้มีสภาพแวดล้อมการทดสอบ) คุณสามารถมีการปรับปรุงใหญ่โดยไม่ได้ทำนี้

หนึ่งในเป้าหมายการออกแบบหลักของ Ansible ก็คือidempotentซึ่งหมายความว่าการรัน playbook ของคุณหลาย ๆ ครั้งไม่ควรเปลี่ยนแปลงอะไรเลย (เว้นแต่คุณจะเปลี่ยนบทละคร) ดังนั้นเมื่อฉันกำหนดค่าซอฟต์แวร์ใหม่ขั้นตอนของฉันคือ:

  1. ทำการเปลี่ยนแปลงงาน Ansible
  2. เรียกใช้ playbook
  3. ตรวจสอบระบบและหากยังไม่ถูกต้องให้กลับไปที่ขั้นตอนที่ 1
  4. กระทำการเปลี่ยนแปลงของฉัน

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


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

ใช่ฉันเห็นด้วยว่านี่เป็นจุดศูนย์กลางที่มั่นคงระหว่างที่เราอยู่ตอนนี้และที่ที่เราควรจะเป็น แน่นอนนี่คือวิธีที่เราเริ่มต้น ฉันคิดว่าเหตุผลหลักที่เราล่องลอยไปตอนนี้คือขั้นตอนที่ 2 ทำให้วงจรทั้งหมดใช้เวลานานเกินไป อาจเป็นไปได้ว่าเรากำลังทำเพลย์บุ๊คผิด ตอนนี้เราได้เพิ่มพูนประสบการณ์ในการเขียนงาน Ansible อีกเล็กน้อยมันอาจคุ้มค่าที่จะลองอีกครั้ง จากประสบการณ์ของคุณวงจรเต็มจะใช้เวลานานเท่าไหร่และจะวนซ้ำบ่อยแค่ไหน? ผมทราบดีว่าตัวเลขใด ๆ จะต้องอยู่บนพื้นฐานของทุกประเภทของสมมติฐาน ..
Joost

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

นอกจากนี้การถนอมเซิร์ฟเวอร์มักไม่สำคัญหากคุณมีเพียงตัวเดียว
Thom Wiggers

"จากประสบการณ์ของคุณวงจรเต็มจะใช้เวลานานแค่ไหนและหนึ่งรอบจะซ้ำบ่อยแค่ไหน?" - ฉันเริ่มใช้ Ansible ในเดือนมกราคม ประมาณเดือนมิถุนายนฉันถึงจุดที่ฉันทำกระบวนการทั้งหมดใน Ansible เร็วกว่าทำด้วยมือสำหรับงานส่วนใหญ่ เวลาที่แน่นอนของหลักสูตรขึ้นอยู่กับโครงการจากไม่กี่นาทีถึงไม่กี่สัปดาห์ (สำหรับซอฟต์แวร์บางอย่างโดยเฉพาะอย่างยิ่ง) หากคุณพบว่าการเล่นของ playbook นั้นทำให้คุณช้าลงคุณอาจต้องการใช้แท็กเพื่อเรียกใช้เซ็ตย่อยในระหว่างการวนซ้ำเท่านั้น
Boycott SE สำหรับ Monica Cellio

0

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

สำหรับผู้เริ่มต้นคุณอาจมีพ่อครัวมากเกินไปโดยไม่มีเจ้าของชัดเจนหากคาดว่าโศกนาฏกรรมทั่วไป ความสำคัญทางธุรกิจแต่ละครั้งจะเกี่ยวข้องกับวิศวกรรมระบบที่เกี่ยวข้องทุกครั้งเว้นเสีย แต่จะคลี่คลายออกไปอย่างกว้างขวางและสิ่งที่เหลืออยู่จะสะท้อนถึงวิศวกรที่รับผิดชอบโดยตรง

ชุดเครื่องมือ CM ไม่สามารถถูกออกแบบโดยผู้ดูแลระบบนี่คือสิ่งที่ฉันเพิ่งรู้ พวกเขาสามารถนำงานที่มีอยู่กลับมาใช้ใหม่หรือ POSSIBLY ขยายไปถึงฐานเสียง แต่ถึงอย่างนั้นมันก็จำเป็นต้องมีการบังคับใช้วิธีปฏิบัติที่เป็นภาระจำนวนมาก สิ่งที่วิศวกรสามารถทำได้ไม่ใช่สิ่งที่ผู้ดูแลระบบสามารถทำได้ แนวคิดมากมายใน Ansible เกือบจะเหมือนกับใน codebase คุณสามารถสอนงูใหญ่ Admin และคาดหวังผลลัพธ์ที่มีประสิทธิภาพได้หรือไม่? ไม่แน่นอนฉันไม่คาดหวังว่าจะมีงานแฮ็คดังนั้นคุณต้องจัดโครงสร้างให้เพียงพอเพื่อให้งานแฮ็คนั้นรับได้

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

คำสั่งซื้อนั้นขึ้นอยู่กับ modifactaion อย่างชัดเจนเพราะการนำไปใช้นั้นขึ้นอยู่กับเส้นทางที่รบกวนอย่างน้อยที่สุดสำหรับสถานะปัจจุบันของคุณ

  1. ย้ายงานที่เกี่ยวข้องกับเวิร์กโฟลว์ที่เกี่ยวข้องกับระบบงานไปยัง rundeck เฉพาะ

  2. แยกงานออกจากกล่องคุณอาจมีสองกล่องขึ้นไปในหนึ่งเดียวตอนนี้

  3. ปรับใช้ CM ของคุณอีกครั้งในรูปแบบที่มีโครงสร้างมากขึ้นและปฏิบัติตามแนวทางที่เข้าใจได้ดีขึ้น playbooks ที่แสดงถึงวัตถุที่ไม่ได้ทำงานหรือบทบาท ควรอธิบายแต่ละระบบในการเล่นครั้งเดียว

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