Kubernetes ทำอะไรได้จริง? [ปิด]


134

Kubernetesถูกเรียกเก็บเงินเป็นคลัสเตอร์คอนเทนเนอร์ "ตัวกำหนดตารางเวลา / orchestrator" แต่ฉันไม่รู้ว่านี่หมายถึงอะไร หลังจากอ่านไซต์ Kubernetes และ (คลุมเครือ) GitHub wiki สิ่งที่ดีที่สุดที่ฉันสามารถบอกได้ก็คือว่า VMs ใดบ้างที่พร้อมใช้งาน / สามารถใช้งานคอนเทนเนอร์ Docker ของคุณได้จากนั้นนำไปใช้ที่นั่น แต่นั่นเป็นเพียงการคาดเดาของฉันและฉันยังไม่เห็นการใช้คำฟุ่มเฟือยที่เป็นรูปธรรมในเอกสารของพวกเขาเพื่อสนับสนุนสิ่งนั้น

Kubernetes คืออะไรกันแน่และปัญหาเฉพาะที่แก้ได้คืออะไร


เนื่องจากโครงการ Docker-world ทั้งหมด (kubernetes / เรือเดินสมุทร / ฝูง / ฯลฯ ) มีปัญหาในการอธิบายสิ่งที่พวกเขาทำและสิ่งที่ทำให้พวกเขาแตกต่างฉันคิดว่าคำถามที่ค่อนข้างน่าปรารถนาคือทั้งหมดที่ผู้ใช้สามารถให้ได้ ... ถามว่า "อะไรคือความแตกต่างระหว่างยานพาหนะและคูเบอร์เนติส" และคำตอบคือ "คุณสามารถใช้ยานพาหนะเพื่อเปิดตัวคิวเบอร์เนสได้" คนเกียจคร้าน ;-)
Torsten Bronger

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

คำตอบ:


113

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

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

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


3
ขอบคุณ @brendan (+1) - คำตอบของคุณช่วยได้แน่นอน คำถามติดตามผลหนึ่งคำถาม: นี่ไม่ใช่สิ่งที่ Apache Mesos ทำหรือไม่? Kubernetes และ Mesos เป็นคู่แข่งกันหรือไม่? ถ้าไม่สามารถใช้ร่วมกันได้ (และถ้าเป็นเช่นนั้น)? ขอบคุณอีกครั้ง!
smeeb

2
@smeeb Mesos และ Kubernetes เสริมซึ่งกันและกัน (ส่วนหลังได้รับการสนับสนุนเป็นกรอบ Mesos) Mesos ให้การจัดการทรัพยากรที่ซับซ้อนมากขึ้น กล่าวอีกนัยหนึ่ง Kubernetes ช่วยให้ Mesos ตัดสินใจว่าจะใช้โฮสต์ใดโดยพิจารณาจากความจุที่มี Mesos สนับสนุนกรอบงานอื่น ๆ หากคุณอ่านเอกสารคุณจะเห็นว่า Marathon เป็นอีกวิธีหนึ่งในการเปิดใช้งานคอนเทนเนอร์บนคลัสเตอร์เซิร์ฟเวอร์ที่มีการจัดการของ Mesos
Mark O'Connor

18

ตามที่คุณอ่านจากหน้า Github :

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

Kubernetes คือ:

lean: lightweight, simple, accessible
portable: public, private, hybrid, multi cloud
extensible: modular, pluggable, hookable, composable
self-healing: auto-placement, auto-restart, auto-replication

Kubernetes สร้างขึ้นจากประสบการณ์กว่าทศวรรษครึ่งที่ Google ซึ่งใช้ปริมาณงานการผลิตตามขนาดรวมกับแนวคิดและแนวทางปฏิบัติที่ดีที่สุดจากชุมชน

สำหรับฉัน Kubernetes คือเครื่องมือจัดระเบียบคอนเทนเนอร์จาก Google เนื่องจากการออกแบบคุณสามารถใช้ความเข้ากันได้กับเอนจินคอนเทนเนอร์ใด ๆ แต่ฉันคิดว่าตอนนี้มัน จำกัด เฉพาะ Docker มีแนวคิดที่สำคัญบางประการในสถาปัตยกรรม:

Kubernetes ทำงานร่วมกับแนวคิดต่อไปนี้:

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

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

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

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

ป้ายกำกับใช้เพื่อจัดระเบียบและเลือกกลุ่มของวัตถุตามคู่คีย์: ค่า เพิ่มเติมเกี่ยวกับป้ายกำกับ

ดังนั้นคุณจึงมีกลุ่มเครื่องจักรที่สร้างคลัสเตอร์ที่ใช้งานคอนเทนเนอร์ของคุณ Yo ยังสามารถกำหนดกลุ่มของคอนเทนเนอร์ที่ให้บริการในลักษณะเดียวกับที่คุณทำกับเครื่องมืออื่น ๆ เช่น fig (เช่น webapp pod สามารถเป็นเซิร์ฟเวอร์รางและฐานข้อมูล postgres) นอกจากนี้คุณยังมีเครื่องมืออื่น ๆ เพื่อให้แน่ใจว่าคอนเทนเนอร์ / พ็อดจำนวนหนึ่งของบริการทำงานในเวลาเดียวกันที่เก็บคีย์ - ค่าประเภทของโหลดบาลานเซอร์ในตัว ...

หากคุณรู้บางอย่างเกี่ยวกับ coreos มันเป็นโซลูชันที่คล้ายกันมาก แต่มาจาก Google Algo Kubernetes ทำงานร่วมกับ Google Cloud Engine ได้เป็นอย่างดี


2
ขอบคุณ @jcortejoso (+1) - อย่างไรก็ตามฉันมีคำถามติดตามผลสองสามข้อหากคุณไม่ทราบ: (1)คุณบอกว่า Kubernetes คล้ายกับ CoreOS แต่มาจาก Google นี่หมายความว่า Kubernetes และ CoreOS แก้ปัญหาเดียวกันได้ แต่จากเว็บไซต์ของ [Kubernetes] () ระบุว่าคุณสามารถติดตั้ง Kubernetes บน CoreOS ได้ แล้วมันคือตัวไหน!? Kubernetes เหมือนกับ CoreOS หรือ Kubernetes ทำงานบน CoreOS และแก้ปัญหาเฉพาะหรือไม่
smeeb

1
นอกจากนี้(2)ฉันยังไม่เห็นคุณค่าใน "orchestration" ของ Kubernetes ที่นี่ คุณระบุว่าคุณสามารถใช้ Kubernetes เพื่อกำหนดกลุ่มของคอนเทนเนอร์ที่ให้บริการซึ่งทำให้ฉันสงสัยว่ามีสองสิ่งที่แยกจากกัน: (2a) ฉันทำคลัสเตอร์ประเภทนี้ที่เลเยอร์แอปไม่ได้และวางแอปไว้ข้างหลัง nginx โหลดบาลานเซอร์? และ (2b) ทั้งหมดนี้มีไว้เพื่อ "การจัดเตรียม" หรือไม่? สำหรับฉันอีกครั้งดูเหมือนว่าการทำโหลดบาลานซ์ที่สามารถทำได้อย่างง่ายดายที่เลเยอร์แอป คิด? ขอขอบคุณอีกครั้งสำหรับคำตอบที่ยอดเยี่ยม!
smeeb

1
ถ้า kubernetes "น้ำหนักเบา" ฉันสงสัยว่าสารละลายไขมันจะเป็นอย่างไร
Torsten Bronger

@smeeb ฉันไม่ค่อยคุ้นเคยกับ nginx (ดังนั้นให้อภัยความไร้เดียงสาของฉัน) แต่ฉันไม่คิดว่า nginx จะรีสตาร์ทเซิร์ฟเวอร์ที่ขัดข้อง และหากเครื่อง (หรือศูนย์ข้อมูลทั้งหมด) ล่ม nginx จะไม่รีสตาร์ทแอปของคุณในเครื่องอื่น kubernetes จะทำให้แน่ใจว่าคุณเก็บ "พ็อด" จำนวน n ไว้เสมอและไม่สำคัญว่าที่ไหนหรืออย่างไร
kgreenek

10

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

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

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

https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/#why-do-i-need-kubernetes-and-what-can-it-do

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