เพื่อนรัก นายได้สร้าง Kubernetes ขึ้นมาแล้ว
(macchaffee.com)-
จดหมายถึงเพื่อน
- อธิบายว่าแม้จะพยายามหลีกเลี่ยง Kubernetes แต่สุดท้ายก็ลงเอยด้วยการสร้างระบบที่คล้ายกันขึ้นมา
- เพื่อนเลือกใช้ "เทคโนโลยีที่น่าเบื่อ" และต้องการเพียงการรันคอนเทนเนอร์แบบง่าย ๆ แต่สุดท้ายกลับเกิดปัญหาจากสคริปต์และการตั้งค่าที่ซับซ้อน
- แม้จะเปลี่ยนไปใช้ Docker Compose ก็ไม่สามารถแก้ทุกปัญหาได้ และตระหนักว่าจำเป็นต้องมีโซลูชันแยกต่างหากสำหรับการดีพลอย, rolling update, rollback และการสเกล
-
การขยายเซิร์ฟเวอร์และความซับซ้อนของเครือข่าย
- เริ่มรู้สึกถึงความจำเป็นที่จะต้องขยายไปยังเซิร์ฟเวอร์เครื่องที่สอง
- พยายามใช้โอเวอร์เลย์เน็ตเวิร์กอย่าง Tailscale เพื่อทำ service discovery
- แม้จะพยายามแก้ปัญหาความซับซ้อนของเครือข่าย แต่สุดท้ายก็ต้องเผชิญกับปัญหาเพิ่มขึ้นอีก
-
การบำรุงรักษาและระบบอัตโนมัติ
- เกิดคำถามขึ้นมาว่า หากคนที่เขียนสคริปต์ลาพักร้อนหรือออกจากบริษัท ใครจะเป็นผู้ดูแลการตั้งค่าที่ซับซ้อนและการเปลี่ยนแปลงคอนฟิกที่ไม่มีการบันทึกเอกสารไว้
- เพื่อแก้ปัญหาการบำรุงรักษาของสคริปต์แบบคัสตอม จึงใช้ Ansible เพื่อทำให้ VM มีลักษณะ immutable และสามารถจัดการเวอร์ชันได้
- คิดว่าการไม่ใช้ Kubernetes น่าจะทำให้ดูแลรักษาได้ง่ายกว่า
-
การสร้างคอนเทนเนอร์และปัญหาด้านความปลอดภัย
- มีความต้องการใหม่ที่ต้องสร้างคอนเทนเนอร์อื่นขึ้นมาแบบเป็นโปรแกรม
- การเมานต์ Docker socket เข้ากับเว็บแอปมีความเสี่ยงด้านความปลอดภัย จึงเขียนบริการแยกต่างหากเพื่อแก้ปัญหานี้
- แก้ปัญหาโดยเขียนบริการแยกต่างหากที่เปิดเผยเฉพาะส่วนที่ปลอดภัยของ Docker API
-
บทสรุป
- ท้ายที่สุดก็ตระหนักว่าตัวเองได้สร้างระบบที่คล้าย Kubernetes ขึ้นมาแล้ว
- ได้ระบบที่ซับซ้อนครบชุดซึ่งรวมถึงฟอร์แมตคอนฟิกมาตรฐาน, วิธีดีพลอย, โอเวอร์เลย์เน็ตเวิร์ก, service discovery, immutable node และ API server
- ท้ายที่สุดก็ตระหนักว่าตัวเองได้สร้างระบบที่คล้าย Kubernetes ขึ้นมาแล้ว
-
PS
- ไม่ได้ปฏิเสธความเป็นไปได้ว่าอาจมีโซลูชันที่ดีกว่าสำหรับแทน Kubernetes
- เพียงแต่อยากแนะนำว่า ก่อนจะตัดสินว่า Kubernetes ซับซ้อนเกินไป ควรทำความเข้าใจปัญหาที่มันถูกสร้างมาเพื่อแก้ให้เพียงพอก่อน
8 ความคิดเห็น
ผมไม่ค่อยเข้าใจเท่าไหร่ว่าทำไมถึงบอกว่านำ Kubernetes มาใช้เพื่อแก้ปัญหาการส่งมอบงานด้านการดีพลอย
การบำรุงรักษาและระบบอัตโนมัติทำได้ง่ายในระดับโค้ด
และยังทำ Infra as code ได้ด้วย
ในสภาพแวดล้อมของบริการ k8s แบบ managed อย่าง EKS มีทั้ง load balancer และยังเชื่อมต่อกับ Route 53 ได้ แต่พอเป็น k8s ที่ self-host กลับไม่มีทั้ง implementation ของ load balancer และการเชื่อมต่อ DNS ก็มีข้อจำกัดครับ ในบริษัทที่มีทีมดูแล k8s แยกต่างหาก ข้อดีที่คุณพูดถึงอาจจะเป็นจริงก็ได้
ฟังเผินๆ เหมือนจะเป็นโซลูชันที่โอเค แต่พอใช้จริงแล้วไม่ได้ทำงานได้ในทุกสถานการณ์
ใช้งานได้ง่ายแม้ไม่มีทีมดูแล k8s ใช้ EKS ก็พอแล้ว
มันก็ไม่ต่างจากการอ้างว่าแค่ให้ซอร์สโค้ดมาก็ถือว่าส่งต่องานเสร็จแล้วไม่ใช่หรือครับ? ผมว่ายังไงก็ยังจำเป็นต้องมีคู่มือการทำงานกับประวัติการดำเนินงานอยู่ดีนะครับ
Infra as Code เองก็มีไว้เพื่อให้จบได้แค่ส่งซอร์สโค้ดมาเท่านั้นอยู่แล้วนี่ครับ
อ้อ แน่นอนว่าไม่ว่าโค้ดไหน ๆ ก็ควรต้องมีการจัดทำเอกสารพื้นฐานไว้เหมือนกันครับ
ถ้าซอร์สโค้ดเขียนมาอย่างดีและเอกสารทำไว้ดี ก็เป็นไปได้ครับ
ถ้ามีคู่มือการทำงานกับประวัติการดำเนินงานแยกไว้ต่างหากก็คงช่วยได้ แต่ดูเหมือนว่านั่นจะเป็นอีกเรื่องหนึ่งจากบทความนี้นะครับ
ความคิดเห็นจาก Hacker News
เคยมีประสบการณ์ทำดีพลอยให้สำเร็จด้วย shell script ในหลายบริษัท
Kubernetes ต้องมีคนเฉพาะทาง 2-3 คนคอยดูแลไฟล์ YAML
แนวคิดที่ว่าสิ่งที่เรียบง่ายย่อมเปราะบางนั้นเป็นความเข้าใจที่ผิด
มีหลายกรณีที่ไม่จำเป็นต้องใช้ Kubernetes
shell script ช่วยจัดการกฎ iptables และการแก้ไข sysctl ได้ง่าย
การวิจารณ์ Kubernetes ไม่ใช่เรื่องไม่มีความเป็นมืออาชีพ
สมมติฐานที่ว่าข้อจำกัดของระบบที่ทำขึ้นใช้เองล้วนแปลเป็นต้นทุน และความยืดหยุ่นของโซลูชันแบบอเนกประสงค์ล้วนเป็นข้อดีนั้นไม่ถูกต้อง
ปัญหาของ Kubernetes คือมีไลบรารีโอเพนซอร์สจำนวนมากจนทำให้ระบบเข้าใจได้ยากและก่อให้เกิดบั๊ก
คนที่ผ่านช่วงการเรียนรู้ของ Kubernetes มาแล้วมักบอกว่าความซับซ้อนไม่ได้แย่อย่างที่คิด