Kubernetes คืออะไร? แพลตฟอร์มแอปพลิเคชันถัดไปของคุณ

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

การจัดระเบียบตู้คอนเทนเนอร์คืออะไร?

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

Kubernetes คืออะไร?

Kubernetes เป็นโครงการโอเพ่นซอร์สที่กลายเป็นหนึ่งในเครื่องมือการจัดเตรียมคอนเทนเนอร์ที่ได้รับความนิยมมากที่สุด ช่วยให้คุณปรับใช้และจัดการแอปพลิเคชันหลายคอนเทนเนอร์ได้ตามขนาด แม้ว่าในทางปฏิบัติ Kubernetes มักใช้กับ Docker ซึ่งเป็นแพลตฟอร์มคอนเทนเนอร์ที่ได้รับความนิยมมากที่สุด แต่ก็สามารถทำงานร่วมกับระบบคอนเทนเนอร์ใด ๆ ที่เป็นไปตามมาตรฐาน Open Container Initiative (OCI) สำหรับรูปแบบอิมเมจคอนเทนเนอร์และเวลาทำงาน และเนื่องจาก Kubernetes เป็นโอเพนซอร์สโดยมีข้อ จำกัด ในการใช้งานค่อนข้างน้อยจึงสามารถใช้งานได้อย่างอิสระโดยทุกคนที่ต้องการเรียกใช้คอนเทนเนอร์ส่วนใหญ่ทุกที่ที่ต้องการเรียกใช้ไม่ว่าจะในสถานที่ในระบบคลาวด์สาธารณะหรือทั้งสองอย่าง .

Google และ Kubernetes

Kubernetes เริ่มต้นชีวิตด้วยโครงการภายใน Google เป็นสิ่งที่สืบทอดมาจากแม้ว่าจะไม่ได้สืบเชื้อสายมาจาก Google Borg ซึ่งเป็นเครื่องมือจัดการคอนเทนเนอร์รุ่นก่อนหน้านี้ที่ Google ใช้ภายใน Kubernetes แบบโอเพนซอร์สของ Google ในปี 2014 ส่วนหนึ่งเป็นเพราะสถาปัตยกรรมไมโครเซอร์วิสแบบกระจายที่ Kubernetes อำนวยความสะดวกทำให้เรียกใช้แอปพลิเคชันในระบบคลาวด์ได้ง่าย Google มองว่าการนำคอนเทนเนอร์ไมโครเซอร์วิสและ Kubernetes มาใช้ในการดึงดูดลูกค้าไปสู่บริการคลาวด์ (แม้ว่า Kubernetes จะทำงานร่วมกับ Azure และ AWS ได้เช่นกัน) ปัจจุบัน Kubernetes ได้รับการดูแลโดย Cloud Native Computing Foundation ซึ่งอยู่ภายใต้ร่มของ Linux Foundation

Kubernetes เทียบกับ Docker และ Kubernetes เทียบกับ Docker Swarm

Kubernetes ไม่ได้แทนที่ Docker แต่จะเพิ่มขึ้น อย่างไรก็ตาม Kubernetes จะเข้ามาแทนที่เทคโนโลยีระดับสูงบางส่วนที่เกิดขึ้นใน Docker

หนึ่งในเทคโนโลยีดังกล่าวคือ Docker Swarm ซึ่งเป็น orchestrator ที่มาพร้อมกับ Docker ยังคงเป็นไปได้ที่จะใช้ Docker Swarm แทน Kubernetes แต่ Docker Inc. ได้เลือกที่จะทำให้ Kubernetes เป็นส่วนหนึ่งของ Docker Community และ Docker Enterprise ในอนาคต

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

Kubernetes เทียบกับ Mesos

โครงการอื่นที่คุณอาจเคยได้ยินเกี่ยวกับคู่แข่งของ Kubernetes คือMesos Mesos เป็นโครงการ Apache ที่เกิดจากนักพัฒนาใน Twitter มันถูกมองว่าเป็นคำตอบของโครงการ Google Borg

ในความเป็นจริง Mesos เสนอบริการจัดเรียงคอนเทนเนอร์ แต่ความทะเยอทะยานของมันไปไกลกว่านั้น: มีเป้าหมายที่จะเป็นระบบปฏิบัติการคลาวด์ประเภทหนึ่งที่สามารถประสานส่วนประกอบทั้งที่มีคอนเทนเนอร์และไม่เป็นคอนเทนเนอร์ ด้วยเหตุนี้แพลตฟอร์มต่างๆจำนวนมากจึงสามารถทำงานภายใน Mesos ได้รวมทั้ง Kubernetes เองด้วย

สถาปัตยกรรม Kubernetes: Kubernetes ทำงานอย่างไร

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

คลัสเตอร์ Kubernetes

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

โหนดและพ็อด Kubernetes

แต่ละคลัสเตอร์มี Kubernetes โหนดโหนดอาจเป็นเครื่องจริงหรือ VM อีกครั้งแนวคิดนี้เป็นนามธรรม: ไม่ว่าแอปจะทำงานบนอะไร Kubernetes จะจัดการการปรับใช้บนวัสดุพิมพ์นั้น Kubernetes ยังช่วยให้มั่นใจได้ว่าบางคอนเทนเนอร์จะทำงานบน VMs หรือเฉพาะบน Bare Metal เท่านั้น

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

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

บริการ Kubernetes

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

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

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

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

Kubernetes Ingress

บริการ Kubernetes จะทำงานภายในคลัสเตอร์ แต่คุณจะต้องการเข้าถึงบริการเหล่านี้จากโลกภายนอก Kubernetes มีองค์ประกอบหลายอย่างที่อำนวยความสะดวกนี้โดยมีระดับความเรียบง่ายและความทนทานที่แตกต่างกันรวมถึง NodePort และ LoadBalancer แต่องค์ประกอบที่มีความยืดหยุ่นมากที่สุดคือ Ingress Ingress คือ API ที่จัดการการเข้าถึงภายนอกไปยังบริการของคลัสเตอร์โดยทั่วไปผ่าน HTTP

Ingress ต้องการการกำหนดค่าเล็กน้อยในการตั้งค่าอย่างถูกต้อง Matthew Palmer ผู้เขียนหนังสือเกี่ยวกับการพัฒนา Kubernetes จะแนะนำคุณตลอดกระบวนการบนเว็บไซต์ของเขา

แดชบอร์ด Kubernetes

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

วิดีโอที่เกี่ยวข้อง: Kubernetes คืออะไร

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

ข้อดีของ Kubernetes

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

Kubernetes จัดการความสมบูรณ์ของแอปการจำลองแบบการจัดสรรภาระงานและการจัดสรรทรัพยากรฮาร์ดแวร์ให้คุณ

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

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

Kubernetes ช่วยลดการใช้งานแอปพลิเคชันที่กำหนดค่าไว้ล่วงหน้าด้วยแผนภูมิ Helm

ตัวจัดการแพ็คเกจเช่น APT ของ Debian Linux และ Pip ของ Python ช่วยให้ผู้ใช้ไม่ต้องกังวลกับปัญหาในการติดตั้งและกำหนดค่าแอปพลิเคชันด้วยตนเอง สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อแอปพลิเคชันมีการอ้างอิงภายนอกหลายรายการ

Helm เป็นผู้จัดการแพ็คเกจของ Kubernetes เป็นหลัก แอปพลิเคชันซอฟต์แวร์ยอดนิยมจำนวนมากต้องทำงานใน Kubernetes เป็นกลุ่มของคอนเทนเนอร์ที่พึ่งพาซึ่งกันและกัน Helm มีกลไกการกำหนด "แผนภูมิ" ที่อธิบายวิธีเรียกใช้แอปพลิเคชันหรือบริการเป็นกลุ่มคอนเทนเนอร์ภายใน Kubernetes

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

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

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

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

คอนเทนเนอร์มักจะต้องทำงานกับ "ความลับ" ซึ่งเป็นข้อมูลประจำตัวเช่นคีย์ API หรือรหัสผ่านบริการที่คุณไม่ต้องการให้ฮาร์ดโค้ดลงในคอนเทนเนอร์หรือซ่อนไว้ในดิสก์โวลุ่มอย่างเปิดเผย แม้ว่าโซลูชันของ บริษัท อื่นจะมีให้สำหรับสิ่งนี้เช่นความลับของนักเทียบท่าและ HashiCorp Vault Kubernetes ก็มีกลไกของตัวเองในการจัดการความลับโดยกำเนิดแม้ว่าจะต้องกำหนดค่าด้วยความระมัดระวังก็ตาม ตัวอย่างเช่นต้องกำหนดค่า Etcd ให้ใช้ SSL / TLS เมื่อส่งข้อมูลลับระหว่างโหนดแทนที่จะเป็นข้อความธรรมดา 

แอปพลิเคชัน Kubernetes สามารถทำงานในสภาพแวดล้อมแบบไฮบริดและมัลติคลาวด์

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

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

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

สถานที่รับ Kubernetes