ผมไม่ได้ต้องการ Kubernetes และคุณก็คงไม่ต้องการมันเช่นกัน
(benhouston3d.com)เหตุผลที่ผมเลิกใช้ Kubernetes แล้วเลือก Google Cloud Run
ที่มาของการนำ Kubernetes มาใช้
- บนแพลตฟอร์มแก้ไข 3D ออนไลน์ Clara.io ที่เปิดตัวในปี 2013 ได้ใช้ เซิร์ฟเวอร์แบบ bare metal เพื่อปรับแต่งโครงสร้างพื้นฐานให้เหมาะสมที่สุด แต่ต้องใช้แรงงานมากเกินไปกับการดูแลฮาร์ดแวร์และมอนิเตอร์ริง
- ในโปรเจกต์ Threekit.com ปี 2018 ได้เลือกใช้ Kubernetes ในช่วงที่ Azure, AWS, Docker รับ Kubernetes เป็นมาตรฐานและเริ่มกลายเป็นกระแสหลัก
ข้อจำกัดของ Kubernetes
-
ปัญหาเรื่องต้นทุน:
- ค่าใช้จ่ายพื้นฐานในการสร้างคลัสเตอร์สูง ทั้งโหนดสำหรับการจัดการและการทำคลัสเตอร์แบบซ้ำซ้อน
- ออโตสเกลที่ช้าทำให้ต้องจัดสรรทรัพยากรเกินความจำเป็น และเกิดค่าใช้จ่ายจากทรัพยากรที่ไม่ได้ใช้งาน
-
ความยากในการจัดการเวิร์กโหลด:
- การจัดตารางงานมีความซับซ้อน และทั้งตัว scheduler ในตัวกับ Argo ก็ไม่มีประสิทธิภาพเมื่อต้องจัดการงานจำนวนมาก
-
ภาระจากความซับซ้อนที่มากเกินไป:
- ฟีเจอร์ที่มีมากมายทำให้งานง่าย ๆ กลายเป็นเรื่องซับซ้อน
- ต้องมีบุคลากร DevOps เฉพาะสำหรับดูแล Kubernetes ซึ่งนำไปสู่ต้นทุนที่สูงขึ้น
เปลี่ยนไปใช้ Google Cloud Run
Cloud Run เข้ามาแทนความซับซ้อนของ Kubernetes ด้วยสภาพแวดล้อมที่เรียบง่ายและคุ้มค่ากว่า
การตั้งค่าใหม่
- โครงสร้างพื้นฐานแบบ Docker container:
- มีทั้งคอนเทนเนอร์สำหรับ บริการที่สเกลอัตโนมัติ และ งานที่รันระยะยาว
- Cloud Run ทำงานคอนเทนเนอร์ การดีพลอย การสเกล การจัดการ downtime และการรันงานให้โดยอัตโนมัติ
ข้อดีของ Cloud Run
-
ความคุ้มค่าด้านต้นทุน:
- คิดค่าบริการตามเวลาการใช้งาน CPU และหน่วยความจำ
- ไม่มีค่าใช้จ่ายสำหรับบริการที่ไม่ได้ใช้งาน
- ตัวอย่าง: เว็บไซต์ Web3D Survey รองรับทราฟฟิก 500,000 ครั้งต่อเดือน ได้ด้วยค่าใช้จ่ายเพียง $4/เดือน
-
ออโตสเกลที่เร็วและเสถียร:
- สเกลได้ภายในไม่กี่วินาที เร็วกว่า Kubernetes
- รับมือกับความต้องการที่พุ่งสูงขึ้นได้อย่างรวดเร็ว
-
ไม่มีภาระในการดูแล Kubernetes:
- Cloud Run ทำงานบนพื้นฐาน Borg ของ Google จึงไม่ต้องจัดการ Kubernetes cluster
-
งานอะซิงก์ที่เรียบง่าย:
- ใช้ Cloud Run Tasks เพื่อรีทรายอัตโนมัติและรันงานจำนวนมากได้อย่างสะดวก
ปัญหาที่อาจเกิดจาก Kubernetes: การติดล็อกกับคลัสเตอร์
- หากพึ่งพาฟังก์ชันของ Kubernetes มากเกินไป จะทำให้การผสานหรือขยายทรัพยากรที่อยู่นอกคลัสเตอร์ทำได้ยาก
- กลายเป็นการผูกติดกับโครงสร้างพื้นฐานเฉพาะ ส่งผลให้การขยายระบบและการย้ายระบบซับซ้อนขึ้นและมีค่าใช้จ่ายเพิ่มขึ้น
คำถามทั่วไปเกี่ยวกับการใช้ Cloud Run
“ไม่กังวลเรื่องการผูกติดกับ GCP เหรอ?”
- ด้วยการตั้งค่าที่อิง Docker จึงสามารถย้ายไปคลาวด์อื่นอย่าง AWS ได้ภายในราว 1 สัปดาห์
- ในความเป็นจริง นอกจากเหตุผลทางการเมืองแล้ว กรณีที่ต้องเปลี่ยนผู้ให้บริการคลาวด์เกิดขึ้นไม่บ่อยนัก
“สุดท้ายแล้ว Cloud Run ก็คือ Managed Kubernetes ไม่ใช่เหรอ?”
- แม้ Cloud Run จะใช้อินเทอร์เฟซ Knative แต่ทำงานอยู่บน Borg ของ Google ไม่ใช่บน Kubernetes
- จึงตัดความซับซ้อนของ Kubernetes ออกไปและมอบอินเทอร์เฟซที่เรียบง่ายกว่า
ข้อเสียของเวิร์กโฟลว์ปัจจุบัน
-
การจัดการชื่อบริการไม่สะดวก:
- ต้องมี abstraction layer เพื่อให้การจัดการคอนฟิกบนเครื่องโลคัลและบนเซิร์ฟเวอร์มีความสอดคล้องกัน
- ไม่มีความสามารถด้านการจัดการชื่อแบบที่ Kubernetes มี
-
ขาดการจำลอง Cloud Run Task:
- ยังไม่มีสภาพแวดล้อมจำลองง่าย ๆ สำหรับพัฒนางานบนเครื่องโลคัล รวมถึงการจับและติดตาม log output
สรุป
- Cloud Run เป็นโซลูชันที่เหมาะที่สุดในแง่ของต้นทุน ความเร็ว ความสามารถในการขยาย และความเรียบง่าย
- สำหรับ องค์กรขนาดใหญ่ หรือกรณีที่มีความต้องการซับซ้อน Kubernetes อาจยังมีประโยชน์
- แต่สำหรับโปรเจกต์ที่ ความเรียบง่ายและประสิทธิภาพ สำคัญกว่า Cloud Run ใช้งานได้จริงมากกว่ามาก
- PS: ปัญหาเหล่านี้อาจแก้ได้ด้วยการเพิ่มส่วนขยายเฉพาะให้ Kubernetes แต่ก็มีแต่จะเพิ่มความซับซ้อน และผมไม่อยากต้องพึ่งพาสภาพแวดล้อม Kubernetes ที่เกินความจำเป็นสำหรับความต้องการที่เรียบง่าย
12 ความคิดเห็น
คงไม่มี
silver bulletอะไรแบบนั้นหรอกครับ ถ้าใช้ให้เหมาะกับสถานการณ์ก็น่าจะพอแล้วถ้าหยิบ
kubernetesมาใช้แบบไม่วิจารณญาณเพียงเพราะมันเป็นของที่กำลังฮิต ก็อาจจะทำให้ลำบากขึ้นได้ แต่ผมก็ยังคิดว่าสำหรับสภาพแวดล้อมที่มีขนาดค่อนข้างใหญ่ มันเป็นเครื่องมือที่ใช้ได้ดีต่อให้ตัดสินใจนำมาใช้ ถ้าแค่นำมาใช้แล้วจบ ก็อาจจะใช้งานมันได้ไม่เต็มที่
แล้วก็เหมือนกับเครื่องมืออื่น ๆ ไม่มีอะไรที่ตอบโจทย์ความต้องการของนักพัฒนาหรือผู้ใช้ได้ 100% ดังนั้นการทำระบบอัตโนมัติในระดับที่เหมาะสมจึงน่าจะเป็นสิ่งจำเป็นครับ
แค่ตั้งค่า Kubernetes เสร็จก็เหลือแต่งานสบาย ๆ ... ฮือ ๆ
Kubernetes คืออาชีพการงานของผม และก็เคยมีช่วงหนึ่งที่ผมเชื่อว่านี่คือคำตอบ แต่เมื่อเวลาผ่านไป ผมก็พบว่าตัวเองต้องเจอกับปัญหามากมายและเสียเวลาไปโดยเปล่าประโยชน์
ผมยังแนะนำ k8s ให้คนอื่นอยู่ แต่คงจะไม่ใช้กับบริการของตัวเองแล้วครับ จะว่าไปไม่ใช่แค่ k8s อย่างเดียว ผมเริ่มเหนื่อยกับคอนเทนเนอร์ไปทั้งหมดแล้ว
ถ้าใช้งาน AWS อยู่ ก็ควรมองว่าใกล้เคียงกับ ECS ได้ไหม?
ใช่ครับ/ค่ะ ถ้าจะให้พูดก็คือประมาณนั้น :)
การใช้ Kubernetes ไม่เป็นต่างหากที่เป็นปัญหา จะให้บอกว่า Kubernetes ไม่ค่อยดีนักก็คงไม่ถูกเท่าไร
ผมก็คิดคล้ายกับผู้เขียนครับ
ตอนนี้บริษัทก็ยังไม่ได้มีขนาดถึงขั้นต้องใช้ kube ด้วย
ผมเคยคิดไปเองว่านักพัฒนาทุกคนคงจะจัดการด้วย Kube ได้
แต่เอาเข้าจริง การมีแนวทางที่ช่วยให้สามารถวางโครงสร้างพื้นฐานและแก้ปัญหาได้ แม้จะทำได้ไม่ถึงระดับเฉลี่ยของนักพัฒนาในบริษัท กลับดีกว่า...
???: ผมไม่ได้ต้องการ AI และพวกคุณก็คงไม่ได้ต้องการมันเช่นกัน
ไม่ว่าผลิตภัณฑ์ไหนก็มักจะมีส่วนที่ต้องแลกเปลี่ยนกันอยู่
พอใช้บริการแบบ managed ก็ไม่ได้รู้สึกว่าจัดการยากเป็นพิเศษ,,
ไม่ว่าเครื่องมือไหน ถ้าใช้ให้พอเหมาะก็มีประโยชน์ทั้งนั้น แต่รู้สึกว่า Kubernetes กลับถูกวิจารณ์อยู่บ่อย ๆ โดยเฉพาะเรื่องที่ว่า 'ตั้งค่าที่ซับซ้อนได้'
เพราะเป็นเทคโนโลยีที่ทำเกือบทุกอย่างได้ตามที่ฉันต้องการ... :) เลยคิดว่าน่าจะเป็นเพราะหลายคนมักใช้งานมันแบบซับซ้อนเกินไป 5555...
ความเห็นจาก Hacker News
แสดงความคิดเห็นไม่พอใจต่อ "เทคโนโลยีคลาวด์" โดยระบุว่าเมื่อใช้ Kubernetes จะต้องเสียเวลาไปมากกับการแก้ไขไฟล์ YAML และแก้ปัญหาข้อผิดพลาด อีกทั้งยังอยากหลีกเลี่ยงการผสานรวมกับคลาวด์และตั้งค่าเซิร์ฟเวอร์เอง
Kubernetes มีต้นทุนโครงสร้างพื้นฐานค่อนข้างสูง นอกเหนือจากงานด้าน DevOps และเวลาที่ใช้ดูแลจัดการ พร้อมเสนอว่าการใช้ Kubernetes แบบ managed ของผู้ให้บริการคลาวด์จะมีประสิทธิภาพมากกว่า
Kubernetes ไม่ใช่เครื่องมือ orchestration สำหรับคอนเทนเนอร์ แต่เป็นเครื่องมือสำหรับสร้างคลัสเตอร์คอมพิวเตอร์ ดังนั้นหากไม่ต้องการคลัสเตอร์ก็ไม่จำเป็นต้องใช้ Kubernetes
การลงทุนกับ DevOps มากเกินไปกำลังลดลง และมีการแชร์มุมมองเชิงวิพากษ์ต่อ Kubernetes พร้อมย้ำว่าสำหรับสตาร์ทอัพขนาดเล็ก เซิร์ฟเวอร์เพียงเครื่องเดียวก็อาจเพียงพอ
กล่าวถึงข้อควรระวังในการใช้ Cloud Run เช่น ข้อจำกัดของการเชื่อมต่อ TCP การเลือกสภาพแวดล้อมรันไทม์ และการตั้งค่า autoscaling
Cloud Run เหมาะกับสตาร์ทอัพขนาดเล็ก แต่ชี้ให้เห็นว่ายังขาดการควบคุมไฟร์วอลล์ซึ่งเป็นองค์ประกอบพื้นฐานของสถาปัตยกรรมความปลอดภัย และสุดท้ายก็จะจำเป็นต้องใช้ VPC
ระบุว่าการเปรียบเทียบ Google Cloud Run กับ Kubernetes นั้นไม่ยุติธรรม พร้อมอธิบายข้อดีข้อเสียของแต่ละแบบ และเน้นว่า Kubernetes เหมาะกับงานที่ซับซ้อน
อธิบายว่า Kubernetes มีเส้นโค้งการเรียนรู้ที่ชัน แต่ถ้าใช้อย่างเหมาะสมก็เป็นเครื่องมือที่ทรงพลัง
ไม่เห็นด้วยกับคำวิจารณ์ต่อ Kubernetes และเน้นว่าเมื่อต้อง deploy แอปที่ซับซ้อน อาจจำเป็นต้องใช้ Kubernetes API
อธิบายว่าความซับซ้อนของ Kubernetes ส่วนใหญ่มาจากงานด้านการดูแลระบบ ขณะที่ตัว Kubernetes เองมีความเสถียร
ชี้ว่า IaC และ CM ควรช่วยลดจำนวนการตั้งค่าและทำให้ดูแลง่ายขึ้น แต่ในความเป็นจริงกลับต้องใช้ความพยายามมากขึ้น หลายกรณีไม่จำเป็นต้องใช้ Kubernetes และผู้ดูแลระบบที่เก่งมีความสำคัญมากกว่า