KuView: แดชบอร์ด Kubernetes แบบเรียลไทม์บนเว็บ
(github.com/iwanhae)โดยส่วนตัวแล้วผมค่อนข้างชอบ Kubernetes มาก แต่ก็ยังมีบางจุดที่น่าเสียดายอยู่บ้าง คือมันมีการทำ abstraction ไว้ดีมากจนองค์ประกอบทางกายภาพจริง ๆ ถูกซ่อนไว้ ทำให้ตรวจสอบได้ยาก
ตัวอย่างเช่น
- ในสถานการณ์ที่ Pod หนึ่งกำลังมีปัญหา Pod อื่น ๆ ที่ถูก deploy อยู่บนโหนดเดียวกันมีสถานะเป็นอย่างไร
- Pod ที่เชื่อมต่ออยู่กับ Service ในตอนนี้ทำงานได้ปกติทั้งหมดหรือไม่?
- ตอนนี้โหนดมีการใช้ CPU และ Memory เท่าไร? และในนั้นแต่ละ Pod ใช้สัดส่วนเท่าไร?
- รายการ PV ที่เชื่อมต่ออยู่กับโหนดปัจจุบันมีอะไรบ้าง?
แน่นอนว่าไม่ใช่ว่าจะไม่มีข้อมูลเลย จึงมีวิธีค่อย ๆ ประกอบคำสั่ง kubectl และใช้เครื่องมือ monitoring อย่าง Prometheus เพื่อทำเป็นภาพให้ดูได้ แต่ก็เป็นเรื่องจริงที่ค่อนข้างยุ่งยาก
เพื่อช่วยในสถานการณ์แบบนั้น ผมเลยลองทำแดชบอร์ด Kubernetes แบบเรียลไทม์บนเว็บขึ้นมาตัวหนึ่ง มันทำงานในรูปแบบที่คอย WATCH resource ทั้งหมดของ Kubernetes ภายในเว็บเบราว์เซอร์ในรูปแบบ WASM โดยไม่จำเป็นต้องติดตั้งอะไรเพิ่มเติม ขอเพียงใช้คำสั่ง kubectl proxy ได้ก็พอ
7 ความคิดเห็น
ดูเหมือนว่าตัวเลข Running / Terminating จะเปลี่ยนกันในระดับ 0.00x วินาที ไม่ใช่แค่ทุก 1 วินาที แบบนี้มันทำงานด้วยหลักการอะไรถึงเปลี่ยนตลอดเลยครับ? คือคอยยิง k8s API อยู่เรื่อย ๆ ใช่ไหมครับ?
ผมอยากใช้นะครับ แต่ก็แอบกังวลนิดหน่อยว่ามันจะไปสร้างภาระมหาศาลให้กับ k8s API Read Request หรือเปล่า เลยอยากถามดูครับ!
ใช้ WATCH API ของ K8s
https://kubernetes.io/docs/reference/…
เนื่องจากรับมาเฉพาะการเปลี่ยนแปลงผ่าน protobuf และ SSE จึงมีประสิทธิภาพค่อนข้างดีและมีภาระโหลดเพียงเล็กน้อย (อยู่ในระดับภาระโหลดที่ kubelet สร้างให้กับ kube apiserver)
อย่างไรก็ตาม หากมีหลายคนใช้งานพร้อมกัน แนะนำโหมดเซิร์ฟเวอร์มากกว่า wasm เพราะเซิร์ฟเวอร์จะรับคำขอแทนแล้วส่งข้อมูลที่เก็บไว้ในหน่วยความจำกลับให้ จึงช่วยลดภาระของ kube apiserver ได้
ไฟล์ WASM มีขนาดค่อนข้างใหญ่ทีเดียว อยู่ที่ประมาณ 90MB
ขนาดมันค่อนข้างใหญ่ก็จริง แต่ดูเหมือนว่าเอนโทรปีจะไม่ได้สูงนัก ตอนนี้เวลาดาวน์โหลดด้วย
curlไฟล์ที่บีบอัดแบบ gzip มีขนาดแค่ประมาณ 14MB เท่านั้น แม้ตอนเสิร์ฟ WASM จริง ๆ ทุกวันนี้ก็มักจะมีการใช้ขั้นตอนการเข้ารหัสอย่าง gzip, zstd, brotoli อยู่แล้ว จึงคาดว่าทราฟฟิกที่ส่งจริงจะไม่ได้สูงมากนักอยากรู้เหมือนกันว่าเมื่อบีบอัดไบนารีด้วย
zstdแล้วจะเป็นอย่างไรขอเปลี่ยนเรื่องนิดหน่อยครับ/ค่ะ อยากทราบว่าการแปลงไปเป็น WASM และการใช้งานนั้นราบรื่นไหม (มีความไม่สะดวกอะไรหรือเปล่าครับ/คะ)!
ตอนแรกทำแบบคร่าว ๆ ด้วย WASM ก่อน แล้วค่อยรวบรวมเฉพาะลอจิกร่วมกัน จากนั้นค่อยแยกโค้ดฝั่ง Server ออกมาต่างหากทีหลัง เลยไม่ได้รู้สึกว่ามีอะไรไม่สะดวกเป็นพิเศษ ตรงกันข้าม ตอนนี้ต่อให้แก้โค้ดแบบคร่าว ๆ ก็มีผลกับทั้งฝั่ง Server และ WASM ทั้งคู่ เลยถือว่าใช้งานด้วยความพอใจอยู่พอสมควรครับ haha