11 คะแนน โดย xguru 2024-11-05 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • Gitpod ใช้งาน Kubernetes มา 6 ปีเพื่อสร้าง "แพลตฟอร์มสภาพแวดล้อมการพัฒนาระยะไกล" และปัจจุบันรองรับผู้ใช้ 1.5 ล้านคน พร้อมให้บริการสภาพแวดล้อมการพัฒนาหลายพันรายการต่อวัน
  • แต่ก็ได้ตระหนักว่า Kubernetes ไม่เหมาะกับการสร้างสภาพแวดล้อมการพัฒนา
  • นี่ไม่ใช่เรื่องว่าจะใช้ Kubernetes กับ production workload หรือไม่ และก็ไม่ใช่หัวข้อเกี่ยวกับวิธีสร้างประสบการณ์นักพัฒนาสำหรับการ deploy แอปพลิเคชันบน K8s
    แต่เป็นเรื่องของวิธีสร้างสภาพแวดล้อมการพัฒนาบนคลาวด์ (หรือวิธีที่ไม่ควรทำ)

[ทำไมสภาพแวดล้อมการพัฒนาจึงพิเศษ]

  • มี state จำนวนมากและมีการโต้ตอบสูง
    • ไม่สามารถย้ายข้าม node ได้
    • source code จำนวนมาก, build cache, Docker container, test data ฯลฯ เปลี่ยนแปลงบ่อยและมีต้นทุนในการย้ายสูง
    • ต่างจาก production service เพราะมีการโต้ตอบแบบ 1:1 ระหว่างนักพัฒนากับสภาพแวดล้อม
  • นักพัฒนาเกี่ยวข้องกับ source code และการเปลี่ยนแปลงอย่างลึกซึ้ง
    • ไม่ชอบการสูญเสียการเปลี่ยนแปลงของ source code หรือการถูกระบบขัดขวาง
    • สภาพแวดล้อมการพัฒนาไวต่อความล้มเหลวเป็นพิเศษ
  • มีรูปแบบการใช้ทรัพยากรที่คาดเดาไม่ได้
    • เวลาส่วนใหญ่ไม่ต้องการ CPU bandwidth มาก แต่ภายในไม่กี่ร้อย ms อาจต้องใช้หลายคอร์
    • ถ้าช้ากว่านั้นจะเกิดอาการหน่วงและไม่ตอบสนองที่ยอมรับไม่ได้
  • ต้องการสิทธิ์และความสามารถที่กว้างขวาง
    • ต่างจาก production workload เพราะต้องการ root access และความสามารถในการดาวน์โหลด/ติดตั้งแพ็กเกจ
    • สิ่งที่ถือเป็นปัญหาด้านความปลอดภัยใน production workload กลับเป็นพฤติกรรมที่คาดหวังในสภาพแวดล้อมการพัฒนา (root access, ความสามารถเครือข่ายแบบขยาย, การ mount filesystem เพิ่มเติม ฯลฯ)
  • คุณลักษณะเหล่านี้ทำให้มันแตกต่างจาก application workload ทั่วไป และส่งผลอย่างมากต่อการตัดสินใจด้านโครงสร้างพื้นฐาน

[ระบบปัจจุบัน: Kubernetes]

  • ในช่วงแรกของ Gitpod, Kubernetes ดูเหมือนจะเป็นตัวเลือกด้านโครงสร้างพื้นฐานที่เหมาะสม
    • scalability, container orchestration และ ecosystem ที่อุดมสมบูรณ์ สอดคล้องกับวิสัยทัศน์เรื่องสภาพแวดล้อมการพัฒนาบนคลาวด์
  • แต่เมื่อขยายขนาดและฐานผู้ใช้เพิ่มขึ้น ก็พบความยากลำบากด้านความปลอดภัยและการจัดการ state
    • Kubernetes ถูกออกแบบมาเพื่อรัน application workload ที่ควบคุมได้ดี ไม่ใช่สำหรับสภาพแวดล้อมการพัฒนาที่จัดการยาก
  • การดูแล Kubernetes ในระดับขนาดใหญ่มีความซับซ้อน
    • managed service อย่าง GKE, EKS ช่วยบรรเทาปัญหาบางส่วน แต่ก็มีข้อจำกัดและขีดจำกัดของมันเอง
  • หลายทีมที่ต้องการรัน CDE มักประเมินความซับซ้อนของ Kubernetes ต่ำเกินไป
    • สิ่งนี้นำไปสู่ภาระด้านการซัพพอร์ตอย่างมากในผลิตภัณฑ์ Gitpod แบบ self-managed ก่อนหน้านี้

ความยากของการจัดการทรัพยากร

  • การจัดสรร CPU และ memory คือความท้าทายที่ใหญ่ที่สุด
  • การแชร์สภาพแวดล้อมบน node เดียวกันดูน่าสนใจ แต่ในความเป็นจริงผลกระทบจาก noisy neighbor รุนแรงมาก
  • ปัญหา CPU
    • สภาพแวดล้อมการพัฒนาอาจไม่ต้องใช้ CPU มากตลอดเวลา แต่บางช่วงก็ต้องการสูงแบบฉับพลัน
    • เคยทดลองทั้งโซลูชันที่อิง CFS และ custom controller แต่คาดการณ์ได้ยาก
    • แม้ใช้ static CPU limit ก็ยังเกิดปัญหาหลาย process แข่งขันกัน
  • การจัดการ memory
    • การจัดสรร memory แบบคงที่ทำได้ง่ายแต่มีข้อจำกัด
    • การ overbook อาจนำไปสู่การ kill process
    • การเพิ่ม swap space ช่วยลดความจำเป็นในการ overbook ลงได้บางส่วน

การปรับแต่งประสิทธิภาพ storage

  • IOPS และ latency ส่งผลต่อประสบการณ์ใช้งานสภาพแวดล้อมการพัฒนา
  • ได้ทดลองหลายรูปแบบเพื่อหาสมดุลระหว่างความเร็ว, ความเสถียร, ต้นทุน และประสิทธิภาพ
    • SSD RAID 0
    • block storage เช่น EBS, persistent disk
    • PVC
  • การ backup/restore เป็นงานที่มีต้นทุนสูง

การปรับแต่ง autoscaling และเวลาเริ่มต้น

  • การลดเวลาเริ่มต้นให้ต่ำที่สุดคือเป้าหมายสูงสุด
  • เคยคิดว่าการรัน workspace หลายตัวบน node เดียวจะช่วยให้เวลาเริ่มต้นดีขึ้นเพราะมี shared cache แต่ผลไม่เป็นเช่นนั้น
  • Kubernetes กำหนดเพดานล่างของเวลาเริ่มต้นไว้
  • วิวัฒนาการของวิธี scale-out
    • ทดลอง scale-out โดยใช้ ghost workspace, ballast pod ฯลฯ
    • การนำ autoscaler plugin มาใช้ช่วยปรับปรุงกลยุทธ์การขยายได้มาก
  • proportional autoscaling สำหรับรองรับ peak load
    • เริ่ม pod ว่างไว้ล่วงหน้าเพื่อตอบสนองต่อความต้องการที่พุ่งขึ้นอย่างรวดเร็ว
  • ความพยายามหลายแบบเพื่อปรับแต่ง image pull
    • DaemonSet pre-pull, การใช้ layer ซ้ำให้มากที่สุด, pre-baked image, Stargazer กับ lazy pulling, Registry-facade + IPFS

ความซับซ้อนด้านเครือข่าย

  • การควบคุมการเข้าถึงสภาพแวดล้อมการพัฒนา
    • ต้องแยกจากกันอย่างสมบูรณ์ระหว่างแต่ละสภาพแวดล้อม
    • network policy ช่วยได้ แต่เมื่อจำนวน service มากขึ้นก็เกิดปัญหาด้านความน่าเชื่อถือ
  • การแชร์ network bandwidth
    • บาง CNI รองรับ network shaping แต่ก็กลายเป็นอีกสิ่งที่ต้องควบคุม

ความปลอดภัยและการแยกขอบเขต: สมดุลระหว่างความยืดหยุ่นกับการปกป้อง

  • ความท้าทายที่ใหญ่ที่สุดคือการมอบความยืดหยุ่นให้ผู้ใช้พร้อมกับรักษาสภาพแวดล้อมให้ปลอดภัย
  • การให้สิทธิ์ root กับผู้ใช้มีข้อบกพร่องมาก
  • user namespace เป็นทางออกที่ละเอียดกว่า
    • การแปลง filesystem UID, masked proc mount, รองรับ FUSE, ให้ความสามารถเครือข่าย, เปิดใช้งาน Docker
  • ความยากของการนำ user namespace ไปใช้
    • ผลกระทบด้านประสิทธิภาพ, ปัญหาความเข้ากันได้, ความซับซ้อน, การรองรับเวอร์ชัน Kubernetes

[การทดลอง Micro VM]

  • เมื่อรับรู้ถึงข้อจำกัดของ Kubernetes จึงเริ่มสำรวจเทคโนโลยี micro VM (uVM) เช่น Firecracker, Cloud Hypervisor, QEMU ในฐานะจุดกึ่งกลาง
  • คาดหวังว่าจะยังคงข้อดีของ containerization เอาไว้ได้ พร้อมทั้งปรับปรุงการแยกทรัพยากร, ความเข้ากันได้กับ workload อื่น ๆ (เช่น Kubernetes) และเสริมความปลอดภัย
  • ข้อดีของ micro VM
    • มอบจุดเด่นที่น่าสนใจซึ่งสอดคล้องอย่างมากกับเป้าหมายของ cloud development environment
    • การแยกทรัพยากรที่ดีขึ้น: แม้ความสามารถในการ overbook จะลดลง แต่การแยกทรัพยากรดีกว่า container ทำให้ไม่มีการแย่ง shared kernel resource และคาดการณ์ประสิทธิภาพของแต่ละสภาพแวดล้อมได้มากขึ้น
    • memory snapshot และการ resume อย่างรวดเร็ว: ฟีเจอร์ userfaultfd ของ Firecracker รองรับ memory snapshot ทำให้สามารถ resume ทั้งเครื่องได้แทบจะทันทีรวมถึง process ที่กำลังรันอยู่ จากมุมมองของนักพัฒนา การเริ่มสภาพแวดล้อมจะเร็วขึ้นมากและกลับมาทำงานต่อจากจุดที่ค้างไว้ได้ทันที
    • ขอบเขตความปลอดภัยที่ดีขึ้น: uVM สามารถเป็น security boundary ที่แข็งแรง ทำให้ไม่จำเป็นต้องใช้กลไก user namespace ที่ซับซ้อนซึ่งเคยสร้างบน Kubernetes อีกต่อไป และอาจเข้ากันได้อย่างสมบูรณ์กับ workload ที่กว้างขึ้น รวมถึง nested containerization (การรัน Docker หรือ Kubernetes ภายในสภาพแวดล้อมการพัฒนา)
  • ความยากของ micro VM
    • แต่ผลการทดลอง micro VM ก็เผยให้เห็นความท้าทายสำคัญหลายอย่าง
    • overhead: แม้จะเป็น VM น้ำหนักเบา แต่ uVM ก็ยังมี overhead มากกว่า container ส่งผลทั้งต่อประสิทธิภาพและการใช้ทรัพยากร ซึ่งเป็นประเด็นสำคัญสำหรับแพลตฟอร์ม cloud development environment
    • การแปลง image: การแปลง OCI image ให้เป็น filesystem ที่ใช้ได้บน uVM ต้องพึ่งโซลูชันแบบ custom ทำให้ pipeline การจัดการ image ซับซ้อนขึ้นและอาจกระทบเวลาเริ่มต้น
    • ข้อจำกัดเฉพาะเทคโนโลยี
      • Firecracker: ไม่มี GPU support (ซึ่งสำคัญขึ้นเรื่อย ๆ สำหรับบาง workflow การพัฒนา), ไม่มี virtiofs support (จำกัดตัวเลือกการแชร์ filesystem อย่างมีประสิทธิภาพ)
      • Cloud Hypervisor: ไม่มี userfaultfd support ทำให้กระบวนการ snapshot และ restore ช้าลง (หักล้างข้อดีหลักของ uVM)
    • ปัญหาการเคลื่อนย้ายข้อมูล: uVM ทำให้ต้องจัดการ memory snapshot ขนาดใหญ่ จึงยิ่งทำให้การย้ายข้อมูลยากขึ้น ส่งผลทั้งต่อ scheduling และเวลาเริ่มต้น ซึ่งเป็นองค์ประกอบหลักของประสบการณ์ผู้ใช้ cloud development environment
    • ประเด็นด้าน storage: การทดลองเชื่อม EBS volume เข้ากับ micro VM เปิดความเป็นไปได้ใหม่ แต่ก็สร้างคำถามใหม่ตามมา
      • persistent storage: หากเก็บเนื้อหาของ workspace ไว้ใน volume ที่เชื่อมต่อ ก็ไม่จำเป็นต้องดึงข้อมูลซ้ำจาก S3 จึงคาดว่าจะช่วยลดเวลาเริ่มต้นและลดการใช้เครือข่าย
      • ข้อพิจารณาด้านประสิทธิภาพ: การแชร์ volume throughput สูงระหว่าง workspace อาจช่วยปรับปรุงประสิทธิภาพ I/O แต่ก็มีความกังวลเรื่องการทำ quota อย่างมีประสิทธิภาพ, การจัดการ latency และการรับประกัน scalability
  • บทเรียนจากการทดลอง micro VM
    • แม้ท้ายที่สุด micro VM จะไม่ได้กลายเป็นโซลูชันโครงสร้างพื้นฐานหลัก แต่การทดลองนี้ให้ข้อมูลเชิงลึกที่มีคุณค่า
    • พวกเขาชอบประสบการณ์ของการ backup ทั้ง workspace และการ suspend/resume state ขณะรันสำหรับสภาพแวดล้อมการพัฒนา
    • นี่เป็นครั้งแรกที่เริ่มพิจารณาการออกจาก Kubernetes หลังจากพยายามผสาน KVM และ uVM เข้ากับ pod ก็เริ่มสำรวจทางเลือกนอก Kubernetes
    • มองเห็นอีกครั้งว่า storage คือองค์ประกอบหลักในการมอบทั้งประสิทธิภาพการเริ่มต้นที่คงที่, workspace ที่เสถียร (ป้องกันข้อมูลสูญหาย) และการใช้เครื่องอย่างเหมาะสมที่สุด

Kubernetes มีความท้าทายอย่างมากในฐานะแพลตฟอร์มสำหรับสภาพแวดล้อมการพัฒนา

  • อย่างที่กล่าวไป earlier การรองรับสภาพแวดล้อมการพัฒนาต้องอาศัยระบบที่เคารพความเป็น stateful อันเป็นเอกลักษณ์ของมัน
  • ต้องมอบสิทธิ์ที่นักพัฒนาจำเป็นต้องมีเพื่อทำงานได้อย่างมีประสิทธิภาพ พร้อมกับรับประกัน security boundary ที่ปลอดภัย
  • ทั้งหมดนี้ต้องทำโดยรักษา operational overhead ให้ต่ำและไม่ประนีประนอมด้านความปลอดภัย
  • ปัจจุบัน การทำทั้งหมดนี้ด้วย Kubernetes เป็นไปได้ แต่มีต้นทุนสูงมาก
  • พวกเขาได้เรียนรู้ความแตกต่างระหว่าง application workload กับ system workload ผ่านประสบการณ์ตรงอันหนักหน่วง
  • Kubernetes ยอดเยี่ยมอย่างน่าเหลือเชื่อ
  • ได้สร้าง ecosystem ที่อุดมสมบูรณ์อย่างแท้จริงด้วยการสนับสนุนจากชุมชนที่เปี่ยมด้วยพลัง
  • หากเป็นการรัน application workload, Kubernetes ก็ยังเป็นตัวเลือกที่ดี
  • แต่สำหรับ system workload อย่างสภาพแวดล้อมการพัฒนา Kubernetes นำมาซึ่งความท้าทายมหาศาลทั้งด้านความปลอดภัยและ operational overhead
  • micro VM และ budget ทรัพยากรที่ชัดเจนช่วยได้ แต่ต้นทุนกลับกลายเป็นปัจจัยที่เด่นกว่า
  • ดังนั้น หลังจากใช้เวลาหลายปีในการย้อนออกแบบและฝืนทำให้สภาพแวดล้อมการพัฒนาทำงานบนแพลตฟอร์ม Kubernetes ได้อย่างมีประสิทธิภาพ พวกเขาจึงถอยกลับมาหนึ่งก้าวเพื่อคิดว่า developer architecture แห่งอนาคตควรมีหน้าตาอย่างไร
  • ในเดือนมกราคม 2024 พวกเขาเริ่มสร้างสิ่งนี้ และในเดือนตุลาคมก็เปิดตัว Gitpod Flex
  • ข้อมูลเชิงลึกที่ได้มาอย่างยากลำบากตลอดกว่า 6 ปีในการรันสภาพแวดล้อมการพัฒนาอย่างปลอดภัยในระดับอินเทอร์เน็ต ได้ถูกหลอมรวมไว้ในรากฐานของสถาปัตยกรรมนี้

อนาคตของสภาพแวดล้อมการพัฒนา

  • ใน Gitpod Flex พวกเขารับเอาแก่นบางอย่างของ Kubernetes ได้แก่การประยุกต์ใช้ control theory อย่างยืดหยุ่นและ declarative API พร้อมกับทำให้สถาปัตยกรรมเรียบง่ายขึ้นและปรับปรุงรากฐานด้านความปลอดภัย
  • ใช้ control plane ที่ได้รับแรงบันดาลใจอย่างมากจาก Kubernetes เพื่อทำ orchestration ของสภาพแวดล้อมการพัฒนา
  • เพิ่ม abstraction layer ที่จำเป็นสำหรับสภาพแวดล้อมการพัฒนาโดยเฉพาะ และตัดความซับซ้อนของโครงสร้างพื้นฐานที่ไม่จำเป็นออกไปเกือบทั้งหมด
  • ทั้งหมดนี้ทำโดยให้ zero-trust security เป็นลำดับความสำคัญสูงสุด
  • สถาปัตยกรรมใหม่นี้ทำให้สามารถผสาน dev container ได้อย่างราบรื่น
  • อีกทั้งยังเปิดความสามารถในการรันสภาพแวดล้อมการพัฒนาบนเดสก์ท็อปได้ด้วย
  • ตอนนี้ไม่ต้องแบกรับภาระอันหนักของแพลตฟอร์ม Kubernetes อีกต่อไป Gitpod Flex จึงสามารถ deploy แบบ self-hosted ได้ภายใน 3 นาที และ deploy ได้ในจำนวน region ตามต้องการ
  • สิ่งนี้ช่วยให้ควบคุมด้าน compliance ได้ละเอียดขึ้น และมีความยืดหยุ่นมากขึ้นในการจำลองขอบเขตและโดเมนขององค์กร

(เดิมทีเป็นคนละบทความ แต่คิดว่านำมารวมกันน่าจะดีกว่าเลยแปลมาด้วยกัน)

Gitpod Flex

  • แพลตฟอร์ม automation ตัวแรกสำหรับสภาพแวดล้อมการพัฒนาแบบ zero trust
  • ออกแบบมาให้รันได้บนแล็ปท็อป, คลาวด์ และ on-premise พร้อมเก็บ source code, data และทรัพย์สินทางปัญญาไว้ภายใน private network
  • มอบ building block สำหรับการทำ automation ของวงจรชีวิตการพัฒนาซอฟต์แวร์ โดยเริ่มต้นจากสภาพแวดล้อมการพัฒนา
  • Automations
    • งานและ service ที่เขียนโปรแกรมได้ ซึ่งกำหนดผ่าน repository หรือ API
    • สนับสนุนให้แก้ปัญหาได้ด้วยตัวนักพัฒนาเอง และช่วยให้ทีม developer productivity รวมศูนย์การปรับปรุงสภาพแวดล้อมการพัฒนาได้
    • ให้ความสามารถที่มากกว่าการรันสคริปต์แบบง่าย ๆ
    • สามารถทำได้ทั้ง provisioning และ seeding ฐานข้อมูล, ปรับแต่ง workflow ของนักพัฒนา, รัน cluster ชั่วคราว, ตั้งค่า workflow ของ agent ที่อิง LLM, บังคับใช้นโยบายความปลอดภัยและ compliance ระดับ global/region แบบรวมศูนย์ ฯลฯ
  • Zero-trust environments
    • ตรวจสอบทุก actor และ service ภายใต้แนวคิด 'ไม่เคยเชื่อใจ แต่ตรวจสอบเสมอ'
    • ปิดกั้นผู้ไม่หวังดีได้อย่างสมบูรณ์ ลดพื้นที่เปิดรับการโจมตีลงอย่างมาก และลดความเสี่ยงจาก malware หรือการรั่วไหลของโค้ด
    • รวมถึงการประเมินอย่างต่อเนื่องและการตรวจสอบแบบชัดแจ้ง, การเข้ารหัสระดับองค์กรที่ผ่านการตรวจสอบแล้ว, การควบคุมการเข้าถึงแบบละเอียด, การควบคุมเครือข่ายอย่างสมบูรณ์ และ audit log แบบครบถ้วน
    • สิ่งที่สำคัญที่สุดคือการเก็บ source code, data และทรัพย์สินทางปัญญาไว้ภายใน private network
  • Gitpod Desktop
    • ช่วยมาตรฐานและทำ automation ให้กับสภาพแวดล้อมการพัฒนาแบบ local ได้
    • เริ่มรองรับจาก Apple Silicon
    • มอบ zero latency, เป็นทางเลือกแทน Docker Desktop สำหรับงานพัฒนาที่เร็วกว่า เบากว่า และง่ายกว่า, ปรับต้นทุนให้เหมาะสมด้วยการใช้ local computing, และรองรับ disaster recovery เมื่อคลาวด์หรือ endpoint หยุดชะงัก
  • รองรับ Development Container
    • ผสานข้อกำหนด Dev Container ได้อย่างสมบูรณ์
    • ใช้การตั้งค่า Dev Container เดิมได้โดยไม่ต้องแก้ไข
    • รองรับความเข้ากันได้กับ VS Code และเครื่องมืออื่น ๆ ที่รองรับ
    • ทำงานได้อย่างสม่ำเสมอทั้งบน local และ cloud
    • การยอมรับมาตรฐาน Dev Container ช่วยให้การกำหนด, แบ่งปัน และจัดการสภาพแวดล้อมการพัฒนาง่ายขึ้น

จะเป็นรากฐานของ automation ในการพัฒนาซอฟต์แวร์ตลอด 10 ปีข้างหน้า

  • ที่ผ่านมาเรามองสภาพแวดล้อมการพัฒนาแคบเกินไป
  • สภาพแวดล้อมการพัฒนาไม่ใช่แค่ IDE, dependency และเครื่องมือ แต่คือพื้นที่พื้นฐานที่ซอฟต์แวร์ถูกสร้างขึ้น
  • เป็นที่สำหรับการทำ code prototype, การก่อรูปโดยมนุษย์และเครื่องจักร, การทดสอบ, refactoring, compilation, packaging, signing และ deployment
  • มันมอบการเข้าถึงบริบทการพัฒนา, workflow และข้อมูลเชิงลึกอย่างหาที่เปรียบไม่ได้ จึงสร้างความสามารถที่แตกต่างจากแพลตฟอร์มพัฒนาอื่น
  • วิสัยทัศน์ของผลิตภัณฑ์
    • continuous integration (CI) จะหลอมรวมเข้ากับสภาพแวดล้อมการพัฒนา
    • ทำหน้าที่เป็น system of record ของการพัฒนาซอฟต์แวร์
    • เป็นแพลตฟอร์มสำหรับเครื่องมือของนักพัฒนายุคถัดไป
  • ไม่ได้หยุดแค่การปรับปรุงแนวปฏิบัติในการเขียนโค้ด แต่เป็นการสร้างวิธีที่เร็วและปลอดภัยที่สุดให้ธุรกิจตั้งแต่สตาร์ตอัปไปจนถึงบริษัท Fortune 50 สามารถขยายตัวและประสบความสำเร็จได้ในอีก 10 ปีข้างหน้า

3 ความคิดเห็น

 
ahwjdekf 2024-11-06

บริษัทในประเทศที่อ้างเรื่องความปลอดภัยเป็นข้ออ้าง แล้วบังคับให้ใช้สเปกหน่วยความจำ 8GB สำหรับเดสก์ท็อปเสมือนกันถ้วนหน้า น่าขมขื่นนะ

 
bus710 2024-11-05

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

 
xguru 2024-11-05

ความคิดเห็นจาก Hacker News

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

  • การใช้ Kubernetes กับเวิร์กโหลดโปรดักชันเป็นอีกประเด็นหนึ่ง และนี่คือเรื่องของวิธีสร้างสภาพแวดล้อมการพัฒนาในคลาวด์ บทความที่น่าสนใจเกี่ยวกับ trade-off ทางวิศวกรรมที่ซับซ้อนของ Kubernetes

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

  • Kubernetes เหมาะกับเวิร์กโหลดแบบ stateless แต่ถ้ามี state แล้ว LXC จะเหมาะกว่า LXC สามารถทำคลัสเตอร์ได้คล้าย K8S และเปิดเผยเครื่องมือไปยัง data plane มอบ system instance ที่คล้าย VM และมีประสิทธิภาพใกล้เคียง Docker container ใช้ไวยากรณ์แบบ declarative และสามารถใช้เป็นชั้นพื้นฐานของคลัสเตอร์ Kubernetes ได้

  • การเลือก Kubernetes ระหว่างสร้างโซลูชัน CI แสดงว่ายังเข้าใจปัญหาไม่ดีพอ ควรใช้เครื่องมืออย่าง Firecracker เพื่อจุดประสงค์ด้านความปลอดภัย

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

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

  • เคยทำโปรเจกต์คล้าย Gitpod และไม่เข้าใจการใช้ micro VM มาแทน Kubernetes Kubernetes สามารถ orchestration คอนเทนเนอร์ภายนอกได้ และอาจใช้สำหรับรัน micro VM ได้ ปัญหาใหญ่ที่สุดคือปัญหาที่เกี่ยวกับสตอเรจ

  • การสร้างสภาพแวดล้อมการพัฒนาบน Kubernetes เป็นการสิ้นเปลือง หากผลิตภัณฑ์เป็นแบบ self-hosted บนอินฟราของลูกค้า การดีบักและการซัพพอร์ตจะยาก การเปิดให้วิศวกรเห็นปัญหาเครือข่าย หน่วยความจำ คอมพิวต์ และสตอเรจโดยตรงมีประสิทธิภาพกว่า Kubernetes เป็นการอัปเกรดสำหรับทีมขนาดใหญ่