7 แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้คอนเทนเนอร์ตาม Google

บันทึก. แปล: ผู้เขียนบทความต้นฉบับคือ Théo Chamley สถาปนิก Google Cloud Solutions ในโพสต์สำหรับบล็อก Google Cloud นี้ เขาได้สรุปคำแนะนำโดยละเอียดเพิ่มเติมของบริษัทที่เรียกว่า "แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้งานคอนเทนเนอร์" ในรายงานดังกล่าว ผู้เชี่ยวชาญของ Google ได้รวบรวมแนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้งานคอนเทนเนอร์ในบริบทของการใช้ Google Kubernetes Engine และอื่นๆ โดยกล่าวถึงหัวข้อต่างๆ มากมาย ตั้งแต่การรักษาความปลอดภัยไปจนถึงการตรวจสอบและการบันทึก ดังนั้นแนวทางปฏิบัติด้านคอนเทนเนอร์ที่สำคัญที่สุดตาม Google คืออะไร

7 แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้คอนเทนเนอร์ตาม Google

เครื่องยนต์ Kubernetes (บริการที่ใช้ Kubernetes สำหรับการรันแอปพลิเคชันคอนเทนเนอร์บน Google Cloud - ประมาณ การแปล) เป็นหนึ่งในวิธีที่ดีที่สุดในการรันปริมาณงานที่ต้องปรับขนาด Kubernetes จะรับประกันการทำงานที่ราบรื่นของแอปพลิเคชันส่วนใหญ่หากบรรจุในคอนเทนเนอร์ แต่ถ้าคุณต้องการให้แอปพลิเคชันของคุณจัดการได้ง่ายและต้องการใช้ประโยชน์จาก Kubernetes อย่างเต็มที่ คุณต้องปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุด พวกเขาจะลดความซับซ้อนของการทำงานของแอปพลิเคชัน การตรวจสอบและการแก้ไขจุดบกพร่อง และยังเพิ่มความปลอดภัยอีกด้วย

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

1. ใช้กลไกการบันทึกคอนเทนเนอร์ดั้งเดิม

หากแอปพลิเคชันทำงานบนคลัสเตอร์ Kubernetes ก็ไม่จำเป็นต้องใช้บันทึกมากนัก มีแนวโน้มว่าระบบการบันทึกแบบรวมศูนย์จะถูกสร้างขึ้นในคลัสเตอร์ที่คุณใช้อยู่แล้ว กรณีใช้ Kubernetes Engine ต้องรับผิดชอบ การบันทึก Stackdriver. (บันทึก. แปล: และหากคุณใช้การติดตั้ง Kubernetes ของคุณเอง เราขอแนะนำให้พิจารณาโซลูชัน Open Source ของเราให้ละเอียดยิ่งขึ้น - บ้านไม้ซุง.) ทำให้ชีวิตของคุณเรียบง่ายและใช้กลไกการบันทึกคอนเทนเนอร์แบบเนทีฟ เขียนบันทึกไปยัง stdout และ stderr - บันทึกเหล่านั้นจะได้รับ บันทึก และจัดทำดัชนีโดยอัตโนมัติ

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

2. ตรวจสอบให้แน่ใจว่าคอนเทนเนอร์ไม่มีสถานะและไม่เปลี่ยนรูป

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

ไร้สัญชาติ หมายความว่าสถานะใด ๆ (ข้อมูลถาวรทุกประเภท) จะถูกเก็บไว้นอกคอนเทนเนอร์ คุณสามารถใช้ที่จัดเก็บข้อมูลภายนอกประเภทต่างๆ ได้ขึ้นอยู่กับความต้องการ: การจัดเก็บเมฆ, ดิสก์ถาวร, Redis, คลาวด์ SQL หรือฐานข้อมูลที่ได้รับการจัดการอื่นๆ (บันทึก. แปล: อ่านเพิ่มเติมเกี่ยวกับสิ่งนี้ในบทความของเรา”ตัวดำเนินการสำหรับ Kubernetes: วิธีเรียกใช้แอปพลิเคชันแบบเก็บสถานะ".)

แก้ไขเปลี่ยนแปลงและหยุดระบบไม่ได้ หมายความว่าคอนเทนเนอร์จะไม่ได้รับการแก้ไขตลอดอายุการใช้งาน: ไม่มีการอัพเดต โปรแกรมแก้ไข การเปลี่ยนแปลงการกำหนดค่า หากคุณต้องการอัปเดตโค้ดแอปพลิเคชันของคุณหรือใช้แพตช์ ให้สร้างอิมเมจใหม่แล้วปรับใช้ ขอแนะนำให้ย้ายการกำหนดค่าคอนเทนเนอร์ (พอร์ตการฟัง ตัวเลือกสภาพแวดล้อมรันไทม์ ฯลฯ) จากภายนอก - ไปที่ ความลับ и ConfigMap. สามารถอัปเดตได้โดยไม่ต้องสร้างอิมเมจคอนเทนเนอร์ใหม่ คุณสามารถใช้เพื่อสร้างไปป์ไลน์ด้วยชุดประกอบรูปภาพได้อย่างง่ายดาย การสร้างคลาวด์. (บันทึก. แปล: เราใช้เครื่องมือ Open Source เพื่อวัตถุประสงค์เหล่านี้ Dapp.)

7 แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้คอนเทนเนอร์ตาม Google
ตัวอย่างการอัปเดตการกำหนดค่าการปรับใช้ใน Kubernetes โดยใช้ ConfigMap ที่ติดตั้งในพ็อดเป็นการกำหนดค่า

3. หลีกเลี่ยงคอนเทนเนอร์พิเศษ

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

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

4. หลีกเลี่ยงการรันในฐานะรูท

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

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

5. ทำให้แอปพลิเคชันง่ายต่อการตรวจสอบ

เช่นเดียวกับการบันทึก การตรวจสอบเป็นส่วนสำคัญของการจัดการแอปพลิเคชัน โซลูชันการตรวจสอบยอดนิยมในชุมชน Kubernetes คือ โพร - ระบบที่ตรวจจับพ็อดและบริการที่ต้องมีการตรวจสอบโดยอัตโนมัติ (บันทึก. แปล: ดูของเราด้วย รายงานโดยละเอียด ในหัวข้อการตรวจสอบโดยใช้ Prometheus และ Kubernetes) คนซ้อน สามารถตรวจสอบคลัสเตอร์ Kubernetes และมี Prometheus เวอร์ชันของตัวเองสำหรับการตรวจสอบแอปพลิเคชัน

7 แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้คอนเทนเนอร์ตาม Google
แดชบอร์ด Kubernetes บน Stackdriver

Prometheus คาดว่าแอปพลิเคชันจะส่งต่อตัววัดไปยังตำแหน่งข้อมูล HTTP มีไว้เพื่อสิ่งนี้ ไลบรารีไคลเอนต์ Prometheus. เครื่องมืออื่น ๆ เช่นใช้รูปแบบเดียวกัน เปิดการสำรวจสำมะโนประชากร и อิสติโอ.

6. ทำให้สถานะสุขภาพของแอปพร้อมใช้งาน

การจัดการแอปพลิเคชันในการผลิตได้รับความช่วยเหลือจากความสามารถในการสื่อสารสถานะไปยังทั้งระบบ แอปพลิเคชันทำงานอยู่หรือไม่ ไม่เป็นไรใช่ไหม? คุณพร้อมที่จะรับการเข้าชมแล้วหรือยัง? เขาประพฤติตัวอย่างไร? วิธีที่พบบ่อยที่สุดในการแก้ปัญหานี้คือการใช้การตรวจสุขภาพ (ตรวจสุขภาพ). Kubernetes มีสองประเภท: การสอบสวนความมีชีวิตชีวาและความพร้อม.

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

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในบทความที่เกี่ยวข้องจาก Sandeep Dinesh ผู้สนับสนุนนักพัฒนาจาก Google: “แนวทางปฏิบัติที่ดีที่สุดของ Kubernetes: การตั้งค่าการตรวจสุขภาพด้วยการตรวจสอบความพร้อมและความพร้อม'

7. เลือกเวอร์ชันรูปภาพของคุณอย่างระมัดระวัง

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

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

ปล.จากผู้แปล

อ่านเพิ่มเติมในบล็อกของเรา:

ที่มา: will.com

เพิ่มความคิดเห็น