[บันทึกกันลืม] K8S เอา node เดิม join กลับเข้ามาไม่ได้ เป็นปัญหาเพราะ CNI

ปัญหา: ในบางกรณี เราต้อง delete node ออกไป แต่บางที join กลับได้ แต่ ไม่สามารถ allocate pod ไปได้ แล้วพบว่า ให้ทำดังต่อไปนี้ กับ nodeX ที่มีปัญหา (ดูจาก subnet ที่ปรากฏ) ด้วยคำสั่งต่อไปนี้ เริ่มจากไปที่ control plane แล้ว delete nodeX ออกไป แล้ว copy คำสั่งที่ได้มา หน้าตาประมาณนี้ จากนั้นไปที่ nodeX ก็จะใช้งานได้แล้ว Note: ถ้าพบปัญหา CNI อีก ให้ลองที่ node นั้น ด้วยคำสั่ง คาดหวังว่าจะได้ cni interface เกิดขึ้น จากการดูคำสั่ง

Read More »

[บันทึกกันลืม] ปัญหา Kubernetes มี Disk Pressure แล้วทำให้ pods อยู่ในสถานะ Evicted ค้างจำนวนมาก

ปัญหา: เมื่อใช้คำสั่ง kubectl get pod -A แล้ว พบว่า มี pod แสดงสถานะ Evicted เป็นจำนวนมาก (จริง ๆ แล้วมีสถานะอื่นที่ไม่ใช่ Running จำนวนมาก) ตรวจสอบ: สันนิษฐานว่า Disk เต็ม ใช้คำสั่ง kubectl describe node | grep -i DiskPressure พบว่า KubeletHasDiskPressure แสดงว่า มีปัญหาอะไรสักอย่างกับ Storage และเมื่อดูด้วย kubectl logs -f pod/thepodname -n thenamespace พบว่า “attempting to reclaim ephemeral-storage” แนวทางการแก้ปัญหา: แต่ละ node ติดตั้งแบบแบ่ง Partition ให้ OS เป็น / (พื้นที่ 100 GB) และ พื้นที่ใช้งานจริง เป็น /data (2.5 TB) ตรวจสอบด้วยคำสั่ง df -h / พบว่า มีการใช้พื้นที่ เกิน 80% ปัญหานี้เคยเกิดขึ้นกับตอนใช้ Docker แก้ไขโดยการย้าย /var/lib/docker ไปไว้ที่ /data/docker ซึ่งมีพื้นที่มากกว่า แต่ในระบบ Kubernetes ใช้ containerd และ kubelet วิธีย้าย containerd ไปไว้ใน /data ตามลำดับ ที่ nodeX (ควรทำทีละ node) กลับมาที่ control plane, ให้ทำการ drain ด้วยคำสั่ง ต่อไปนี้ แล้วรอจนเสร็จ กลับมาที่ nodeX ทำการย้ายข้อมูลของ containerd และ kubelet มาไว้ที่ใหม่ แก้ไข /etc/systemd/system/kubelet.service.d/10-kubeadm.conf เพิ่ม –root-dir=/data/kubelet สร้าง containerd configuration แก้ไข containerd configuration ดังนี้ จากนั้น start containerd และ kubelet กลับมา กลับไปที่ control plane แล้วเอา nodeX กลับมาทำงานเหมือนเดิม ตรวจสอบ nodeX ว่า DiskPressure มีสถานะเป็น KubeletHasNoDiskPressure หรือไม่ด้วยคำสั่ง ถ้าเรียบร้อยแล้ว กลับไปที่ nodeX เพื่อลบข้อมูลเก่า (เฉพาะ /var/lib/containerd/) จากนั้นวนทำทีละ node จนครบ

Read More »

[บันทึกกันลืม] วิธีหาไฟล์ที่มีคำที่ต้องการ โดยแสดงเฉพาะ ชื่อไฟล์เท่านั้น

โจทย์ ต้องการหาไฟล์ที่มีคำว่า text_pattern จากทุกไฟล์ในไดเรคทอรี่ /path/to/ ที่มีนามสกุล .ipynb แต่ต้องไม่มีคำว่า checkpoint ใน path หรือชื่อไฟล์

Read More »

[บันทึกกันลืม] แก้ปัญหา rejoin node rke2 ไม่ได้

ปัญหา node หนึ่งใน Rancher ใช้งานได้ตามปรกติ แต่ไป sudo apt update; sudo apt upgrade แล้วเกิดเหตุให้ ต้อง restart node ปัญหาที่เกิดขึ้นคือ pod ที่มาสร้างบน node นี้ไม่สามารถติดต่อกับระบบได้เลย อาการ pod จะ CrashLoopBackOff ตลอด หรือถ้าดู event จะเห็น timeout ตลอดครับ วิธีแก้ไข ได้ลอง format เครื่องก็แล้ว ทำหลายอย่างแล้วก็ไม่หาย ขอบคุณ คุณธนกร กิจศรีนภดล (เทียน) ได้ไปค้นหาวิธีการแก้ไขมาให้ โดยเหตุมาจาก Kernel ของ Ubuntu 20.04 กับ kernel ของ rke2 รุ่นที่ใช้งานอยู่ มี Bug เรื่อง UDP ตาม Link นี้ Root cause คือ: kernel bug  affects udp + vxlan when using the offloading feature of the kernel สรุปคือ ใช้คำสั่งนี้ ผลการแก้ไข หายสนิท ใช้งานได้ต่อไป

Read More »

[บันทึกกันลืม] วิธีป้องกันไม่ให้ผู้ใช้ดาวน์โหลดสิ่งใด ๆ ออกไปจาก Jupyter Notebook/Lab ได้

ปัญหา การใช้ Jupyter Notebook/Lab (aka. Jupyter) นั้นมีข้อดีคือ เราสามารถจำกัดการเข้าถึงข้อมูลที่ละเอียดอ่อนได้ อย่างเช่นเราสามารถตั้งค่าการ access ของ database user ได้จาก private ip ของ Jupyter ได้ แต่ก็ยังมีช่องโหว่คือ ผู้ใช้สามารถ Export file แล้ว download ออกไปได้ ** Caution: บันทึกนี้ไม่สามารถป้องการการ scp และ API call เพื่อ upload ไปยัง Google Drive, Owncloud ได้ ** ในที่นี้ ใช้ Jupyter ผ่าน Docker/Kubernetes แนวทางการแก้ไข Credit: เปิด Terminal แล้วพิมพ์คำสั่งต่อไปนี้ เพื่อปิด เมนู แต่ก็ยังมีทางให้เรียกผ่าน URL ได้อยู่ดี จึงต้อง disable การเรียกผ่าน HTTP protocol ได้ จึงต้องปิดด้วยการปิดการเรียก File handler อีกชั้น โดยประกอบด้วย 2 ขั้นตอน 1. การแก้ไขไฟล์ $HOME/.jupyter/jupyter_notebook_config.py 2. สร้างไฟล์ $HOME/.jupyter/handlers.py จากนั้น restart jupyter container ผลคือ หวังว่าจะเป็นประโยชน์ครับ

Read More »