Daily Dev Brief

← ฉบับล่าสุด

Kubernetes

16 ฉบับ · 31 รายการ

2026-10-04

Practical Insights for Running Kubernetes in Production: Avoiding Common Pitfalls and Mistakes

cncfkubernetes

Practical Insights for Running Kubernetes in Production: Avoiding Common Pitfalls and Mistakes
Introduction: Mastering Kubernetes in Production Deploying Kubernetes in production transcends container orchestration—it demands the management of a highly dynamic, distributed system that requires precision, foresight, and resilience. The chasm between theoretical understanding and practical implementation is where most organizations falter. The core truth is unequivocal: Kubernetes failures stem not from the platform itself, but from flawed assumptions about its behavior and requirements. Systemic Risks: Root Causes of Cluster Failures Analogize a Kubernetes cluster to a high-performance engine: minor oversights in configuration or operation can trigger systemic failures. Below are the…

บทความนี้ให้ข้อมูลเชิงลึกที่เป็นประโยชน์สำหรับการรัน Kubernetes ใน Production โดยเน้นว่าความล้มเหลวส่วนใหญ่มักเกิดจากข้อสันนิษฐานที่ผิดพลาดมากกว่าตัวแพลตฟอร์มเอง บทความนี้เน้นย้ำถึงความซับซ้อนของการจัดการระบบแบบไดนามิกและแบบกระจาย และสรุปความเสี่ยงเชิงระบบที่อาจนำไปสู่ความล้มเหลวของคลัสเตอร์ โดยเปรียบเทียบคลัสเตอร์ Kubernetes กับเครื่องยนต์ประสิทธิภาพสูงที่การละเลยเล็กน้อยอาจส่งผลกระทบอย่างมาก นักพัฒนาและทีมปฏิบัติการที่ deploy Kubernetes ในสภาพแวดล้อม Production ควรสานใจข้อมูลเชิงลึกเหล่านี้เพื่อหลีกเลี่ยงข้อผิดพลาดทั่วไปที่เกี่ยวข้องกับการกำหนดค่าและการปฏิบัติงาน การทำความเข้าใจสาเหตุหลักเหล่านี้เป็นสิ่งสำคัญสำหรับการสร้างการ deploy Kubernetes ที่ยืดหยุ่นและมีเสถียรภาพ.

Your evidence folder is complete. Meanwhile, someone just opened a shell in your container.

cncfkubernetes

Your evidence folder is complete. Meanwhile, someone just opened a shell in your container.
Since 11 September 2026, the EU Cyber Resilience Act asks you to report an actively exploited vulnerability within 24 hours. Twenty-four hours is enough to take away the comfort of "we'll collect the evidence before the audit." I have watched a lot of teams in the same spot. Evidence collection runs like a project: the audit gets close, and out come the screenshots, the exports, the folder. A security incident does not wait for any of that. While the folder is being filled, something happens in the cluster, and the two never hear about each other. This post is about why I see collecting evidence and catching a breach as two sides of the same job, and how that shaped the Falco integration in…

บทความนี้กล่าวถึงความสำคัญอย่างยิ่งของการรวมการรวบรวมหลักฐานเข้ากับการตอบสนองต่อเหตุการณ์ความปลอดภัยแบบเรียลไทม์ โดยเฉพาะอย่างยิ่งในบริบทของ EU Cyber Resilience Act ที่กำหนดให้ต้องรายงานช่องโหว่ที่ถูกโจมตีอย่างแข็งขันภายใน 24 ชั่วโมง ผู้เขียนให้เหตุผลว่าการพึ่งพาแนวทางการรวบรวมหลักฐานแบบแยกส่วนและอิงโครงการสำหรับการตรวจสอบเพียงอย่างเดียวนั้นไม่เพียงพอและอาจนำไปสู่การพลาดการละเมิด นักพัฒนาและทีมรักษาความปลอดภัยที่จัดการคลัสเตอร์ Kubernetes ควรสานใจว่ากระบวนการรวบรวมหลักฐานของพวกเขาสอดคล้องกับความสามารถในการตอบสนองต่อเหตุการณ์อย่างไร บทความแนะนำว่าเครื่องมืออย่าง Falco ซึ่งสามารถรวมการตรวจสอบความปลอดภัยเข้ากับการรวบรวมหลักฐาน เป็นสิ่งจำเป็นสำหรับท่าทีความปลอดภัยเชิงรุกและสอดคล้อง.

2026-10-03

SRE: un presupuesto de latencia para emails

cncfkubernetes

SRE: un presupuesto de latencia para emails
Una verificación de correo puede fallar aunque todos los servicios estén “arriba”. El usuario recibe el mensaje, pero llega después del timeout; el test reintenta, consume el segundo mensaje y termina pasando por casualidad. En los dashboards, la primera pista suelen ser varias alertas pequeñas que nunca forman una historia completa. Para SRE, este problema se entiende mejor como un presupuesto de latencia. No basta con decir que el email debe llegar “rápido”. Hay que repartir el tiempo entre la aplicación, la cola, el adaptador, el proveedor y el lector que confirma el mensaje. Así una prueba en Kubernetes puede explicar dónde se gastó cada segundo y cuándo conviene abrir un incidente. El…

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

Kubernetes SR-IOV Multi-Rail GPU Networking: Missing Route Configuration for Cross-Rail Communication

cncfkubernetes

Kubernetes SR-IOV Multi-Rail GPU Networking: Missing Route Configuration for Cross-Rail Communication
Introduction: Mastering Cross-Rail Communication in Kubernetes SR-IOV GPU Networking In high-performance computing environments, GPU-accelerated workloads drive advancements in AI, machine learning, and scientific simulations, demanding robust and efficient networking architectures. Kubernetes, coupled with Single-Root I/O Virtualization (SR-IOV), has become a cornerstone for managing GPU resources at scale, offering low-latency and high-throughput connectivity. However, as demonstrated in our case study , configuring cross-rail communication in multi-rail GPU setups presents significant challenges even for experienced engineers. The scenario involves a 16-node cluster, each node equipped…

บทความนี้กล่าวถึงความท้าทายทั่วไปใน Kubernetes SR-IOV Multi-Rail GPU Networking: การกำหนดค่าเส้นทางที่ขาดหายไปสำหรับการสื่อสารข้าม Rail มันเน้นว่าในขณะที่ SR-IOV ให้การเชื่อมต่อที่มีความหน่วงต่ำและมีปริมาณงานสูงสำหรับเวิร์กโหลด GPU การกำหนดค่าการสื่อสารระหว่าง Rail เครือข่ายที่แตกต่างกันอาจซับซ้อนและนำไปสู่ปัญหาประสิทธิภาพที่สำคัญ หากคุณกำลังปรับใช้แอปพลิเคชันที่เร่งด้วย GPU ในคลัสเตอร์ Kubernetes โดยใช้ SR-IOV พร้อมการตั้งค่าเครือข่ายแบบ Multi-Rail คุณต้องให้ความสนใจอย่างใกล้ชิดกับการกำหนดค่าเส้นทางของคุณ เส้นทางที่ไม่ถูกต้องหรือขาดหายไปสำหรับการสื่อสารข้าม Rail อาจส่งผลกระทบอย่างรุนแรงต่อประสิทธิภาพและประสิทธิผลของเวิร์กโหลดของคุณ ตรวจสอบให้แน่ใจว่าการกำหนดค่าเครือข่ายของคุณอนุญาตให้มีการไหลของข้อมูลที่ราบรื่นระหว่างอินเทอร์เฟซเครือข่ายและ GPU ทั้งหมดเพื่อเพิ่มประโยชน์สูงสุดของ SR-IOV

2026-10-02

Migrar para o Envoy Gateway não é trocar YAML

cncfkubernetes

Migrar para o Envoy Gateway não é trocar YAML
O ingress-nginx não recebe patch de segurança desde março de 2026. Ele continua funcionando, e é por isso que o risco passa despercebido. A saída recomendada pelo próprio Kubernetes é a Gateway API, e o Envoy Gateway é uma das implementações dela. A tentação é tratar a migração como tradução: pegar cada anotação e reescrever no formato novo. Só que a migração não se resume a trocar YAML. No nginx, cada app levava a própria regra de IP numa anotação. No Envoy, a regra sobe para uma SecurityPolicy no Gateway compartilhado. Ela muda de dono: sai do time da app e vai para a plataforma. Um erro, que antes afetava uma app, agora afeta todas as rotas. Ela também muda de camada. A allowlist por IP…

บทความนี้ชี้ให้เห็นว่าการย้ายจาก ingress-nginx (ซึ่งไม่ได้รับการแพตช์ความปลอดภัยตั้งแต่เดือนมีนาคม 2026) ไปยัง Envoy Gateway ตามที่ Gateway API ของ Kubernetes แนะนำ ไม่ใช่แค่การแปล YAML เท่านั้น นี่หมายความว่าองค์กรที่ใช้ ingress-nginx ควรตระหนักถึงความเสี่ยงด้านความปลอดภัยเนื่องจากไม่มีแพตช์ และวางแผนการย้าย การย้ายนี้เกี่ยวข้องกับการเปลี่ยนแปลงสถาปัตยกรรมที่สำคัญ โดยย้ายนโยบายความปลอดภัยจากทีมแอปพลิเคชันแต่ละทีมไปยังทีมแพลตฟอร์มที่ใช้ร่วมกัน ซึ่งส่งผลกระทบต่อความเป็นเจ้าของและขอบเขตความเสียหายของการกำหนดค่าที่ไม่ถูกต้อง นักพัฒนาและทีมแพลตฟอร์มจำเป็นต้องเข้าใจการเปลี่ยนแปลงนี้เพื่อหลีกเลี่ยงการสร้างความเสี่ยงใหม่ๆ

Storm-3068: How SSPR Abuse Turns One Azure AD Account Into Kubernetes Credential Theft

cncfkubernetes

Storm-3068: How SSPR Abuse Turns One Azure AD Account Into Kubernetes Credential Theft
Microsoft disclosed in September 2026 that a threat actor tracked as Storm-3068 compromised a single Azure AD identity through self-service password reset (SSPR) abuse, then pivoted through Azure DevOps pipelines to steal Kubernetes cluster credentials — ultimately exfiltrating seven kubeconfig files and gaining access to more than 50 downstream resources from one initial account takeover. No password spray, no zero-day: just SSPR, MFA re-registration, and pipeline permissions that were already too broad. This is the exact attack chain and the controls that close each step. The Attack Chain, Step by Step Storm-3068's campaign worked because each individual step abuses a legitimate feature…

ห่วงโซ่การโจมตี Storm-3068 แสดงให้เห็นว่าบัญชี Azure AD ที่ถูกบุกรุกเพียงบัญชีเดียว ผ่านการใช้ Self-Service Password Reset (SSPR) ในทางที่ผิดและการลงทะเบียน MFA ใหม่ สามารถนำไปสู่การขโมยข้อมูลรับรอง Kubernetes ผ่าน Azure DevOps pipelines ได้ นี่หมายความว่าองค์กรที่ใช้ Azure AD และ Kubernetes ควรสรุปนโยบาย SSPR, กระบวนการลงทะเบียน MFA ใหม่ และสิทธิ์ของ Azure DevOps pipeline นักพัฒนาและผู้ดูแลระบบต้องตรวจสอบให้แน่ใจว่าสิทธิ์ของ pipeline ไม่กว้างขวางเกินไป และมีการควบคุมที่แข็งแกร่งเพื่อป้องกันการเคลื่อนที่ในแนวนอนจากข้อมูลประจำตัวที่ถูกบุกรุกไปยังโครงสร้างพื้นฐานที่สำคัญ เช่น คลัสเตอร์ Kubernetes

2026-10-01

Kubernetes: un runbook para emails lentos

cncfkubernetes

Kubernetes: un runbook para emails lentos
En Kubernetes, una alerta de email lenta se parece demasiado a un fallo completo. El pod de la aplicación termina correctamente, el proveedor SMTP responde, pero el mensaje de verificación tarda dos minutos en llegar. Para la persona que está probando el flujo, la experiencia es la misma: pulsa «reenviar» y acaba creando varios intentos. En una guardia aprendí a no empezar cambiando timeouts. Primero hay que separar tres tiempos: el que tarda la aplicación en aceptar el evento, el que tarda el proveedor en aceptar el mensaje y el que tarda el mensaje en aparecer en el buzón de prueba. Esa separación convierte un síntoma difuso en una investigación de SRE que se puede repetir. El síntoma no…

บทความนี้นำเสนอ Runbook สำหรับการวินิจฉัยการแจ้งเตือนอีเมลที่ล่าช้าใน Kubernetes โดยเน้นย้ำถึงความสำคัญของการแยกองค์ประกอบเวลา: การยอมรับของแอปพลิเคชัน, การยอมรับของผู้ให้บริการ SMTP และการส่งข้อความไปยังกล่องจดหมาย แทนที่จะปรับ Timeout ทันที ผู้เขียนแนะนำให้ทำการตรวจสอบ SRE อย่างมีโครงสร้าง นักพัฒนาและ SRE ที่จัดการบริการอีเมลบน Kubernetes สามารถใช้วิธีนี้เพื่อระบุปัญหาคอขวดและแก้ไขปัญหาประสิทธิภาพได้อย่างมีประสิทธิภาพมากขึ้น

We're Dropping Sidecars In Favor Of A Node Sensor

cncfkubernetes

We're Dropping Sidecars In Favor Of A Node Sensor
We built PandoCore as a detector container in every pod. We are replacing it with one process per node. The threat model, the privilege count, the visibility, and the resource reservation all point the same way. The node sensor is still in development; here is the argument for it. Full blog linked here .

บทความนี้กล่าวถึงการตัดสินใจที่จะเปลี่ยนจากการใช้ Sidecar Container ไปเป็น Node Sensor สำหรับความปลอดภัยและการสังเกตการณ์ใน Kubernetes ผู้เขียนให้เหตุผลว่าเซ็นเซอร์ระดับโหนดให้การสร้างแบบจำลองภัยคุกคามที่ดีกว่า ลดจำนวนสิทธิ์ และปรับปรุงการมองเห็นและการสำรองทรัพยากรเมื่อเทียบกับ Sidecar แบบต่อ Pod นักพัฒนาและสถาปนิกที่ออกแบบโซลูชันความปลอดภัยและการตรวจสอบใน Kubernetes ควรสพิจารณาการเปลี่ยนแปลงกลยุทธ์นี้เพื่อการ Deploy ที่มีประสิทธิภาพและปลอดภัยยิ่งขึ้น

2026-09-30

29 Notable Cloud & DevOps Professionals from India to Follow in 2026

cncfkubernetes

29 Notable Cloud & DevOps Professionals from India to Follow in 2026
India has one of the world's largest and fastest-growing cloud, DevOps, Kubernetes, and cloud-native communities. There is no single official organization that maintains a definitive ranking of India's "Top 50 Cloud Engineers." Therefore, this list is not intended as a ranking or a claim that one professional is better than another. Instead, it highlights 29 notable professionals based on publicly documented community leadership, open-source contributions, cloud certifications, ambassador/hero programs, technical education, and contributions to the cloud-native ecosystem. Yash Pimple CNCF Ambassador based in Mumbai, India. His CNCF profile highlights his work with Kubernetes, Kyverno…

บทความนี้เน้นย้ำถึงผู้เชี่ยวชาญด้าน Cloud & DevOps ที่น่าติดตาม 29 ท่านจากอินเดียในปี 2026 โดยพิจารณาจากการเป็นผู้นำชุมชน การมีส่วนร่วมในโอเพนซอร์ส และความเชี่ยวชาญทางเทคนิค แม้จะไม่ใช่การจัดอันดับที่แน่นอน แต่ก็เป็นแหล่งข้อมูลที่มีค่าสำหรับนักพัฒนาและวิศวกรที่กำลังมองหาผู้นำทางความคิดและผู้มีส่วนร่วมในระบบนิเวศ cloud-native การติดตามบุคคลเหล่านี้สามารถให้ข้อมูลเชิงลึกเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุด เทคโนโลยีเกิดใหม่ และการอภิปรายในชุมชนที่เกี่ยวข้องกับ Kubernetes, DevOps และ cloud computing

production statefulset argocd

cncfkubernetes

production statefulset argocd
GitHub ↓ Argo CD ↓ Kubernetes ↓ StatefulSet ├── Headless Service ├── ConfigMap ├── ServiceAccount ├── StatefulSet ├── PVC per Pod ├── PDB └── StorageClass ↓ AWS EBS Repository students should create restaurant-statefulset-gitops/ │ ├── README.md ├── argocd/ │ └── application.yaml │ └── k8s/ ├── namespace.yaml ├── serviceaccount.yaml ├── configmap.yaml ├── storageclass.yaml ├── headless-service.yaml ├── service.yaml ├── statefulset.yaml ├── pdb.yaml └── kustomization.yaml k8s/namespace.yaml apiVersion : v1 kind : Namespace metadata : name : restaurant k8s/serviceaccount.yaml apiVersion : v1 kind : ServiceAccount metadata : name : restaurant namespace : restaurant automountServiceAccountToken…

บทความนี้ให้คำแนะนำเชิงปฏิบัติเกี่ยวกับการตั้งค่า StatefulSets ที่พร้อมใช้งานจริงด้วย Argo CD บน Kubernetes โดยแสดงให้เห็นถึงวิธีการจัดการแอปพลิเคชันที่มีสถานะ (persistent applications) ได้อย่างมีประสิทธิภาพ ครอบคลุมการกำหนดค่าทรัพยากร Kubernetes ต่างๆ เช่น Headless Service, ConfigMap, ServiceAccount, PVC per Pod, PDB และ StorageClass โดยรวมเข้ากับ Argo CD สำหรับการ deploy แบบ GitOps นักพัฒนาที่ทำงานกับแอปพลิเคชันที่มีสถานะบน Kubernetes โดยเฉพาะผู้ที่ใช้ Argo CD สามารถใช้คู่มือนี้เพื่อปรับปรุงกระบวนการ deploy และรับรองความพร้อมใช้งานสูงและการคงอยู่ของข้อมูล

2026-09-29

Build a Helm Release Health Agent: Fix Stuck pending-upgrade Releases, Failed Hooks, and 'another operation is in progress' Safely

cncfkubernetes

Build a Helm Release Health Agent: Fix Stuck pending-upgrade Releases, Failed Hooks, and 'another operation is in progress' Safely
💡 Originally published on devtocash.com — where this guide stays updated. I write hands-on DevOps/SRE deep-dives there weekly. What This Agent Does A Helm release health agent scans every Helm release in the cluster, finds the ones whose latest revision is stuck in pending-upgrade , pending-install , or failed , works out which of five failure classes it belongs to, and either rolls the release back to the last revision that actually deployed or hands a human a precise diagnosis. The scan and the fix are deterministic code. The LLM only classifies a stuck release from the evidence and picks from a short list of actions the executor already knows how to do safely. It cannot run helm…

บทความนี้อธิบายวิธีการสร้าง Helm release health agent ที่ออกแบบมาเพื่อตรวจจับและแก้ไข Helm release ที่ติดขัดในคลัสเตอร์ Kubernetes โดยอัตโนมัติ Agent จะสแกน release ที่อยู่ในสถานะเช่น `pending-upgrade`, `pending-install` หรือ `failed` จัดประเภทความล้มเหลว และทำการ rollback ไปยัง revision ที่สำเร็จล่าสุด หรือให้การวินิจฉัยที่แม่นยำแก่ผู้ดูแล โค้ดหลักสำหรับการสแกนและการแก้ไขเป็นโค้ดที่ทำงานแบบกำหนดผลลัพธ์ (deterministic code) โดยใช้ LLM เพียงเพื่อการจัดประเภทและการเลือกการดำเนินการจากรายการที่ปลอดภัยที่กำหนดไว้ล่วงหน้า ทีมที่จัดการการ deploy Kubernetes ด้วย Helm สามารถปรับปรุงความน่าเชื่อถือและลดการแทรกแซงด้วยตนเองที่จำเป็นสำหรับการจัดการ release ได้อย่างมาก การตรวจจับและแก้ไข release ที่ติดขัดโดยอัตโนมัติสามารถป้องกันการหยุดชะงักที่ยาวนานและปรับปรุงกระบวนการ deploy โดยเฉพาะในสภาพแวดล้อมที่ซับซ้อน พิจารณาการนำ Helm release health agent ที่คล้ายกันไปใช้ในคลัสเตอร์ Kubernetes ของคุณ มุ่งเน้นไปที่โค้ดที่ทำงานแบบกำหนดผลลัพธ์สำหรับการระบุและแก้ไขรูปแบบความล้มเหลวทั่วไป แม้ว่า LLM จะช่วยในการจัดประเภทได้ แต่ต้องแน่ใจว่าการดำเนินการใดๆ ที่ทำนั้นได้รับการอนุมัติล่วงหน้าและปลอดภัย เพื่อป้องกันไม่ให้ LLM รันคำสั่งตามอำเภอใจ แนวทางนี้ช่วยรักษาสภาพแวดล้อมการ deploy ที่มีสุขภาพดีและเสถียร.

Cloud Email Fixtures Need an Expiry Contract

cncfkubernetes

Cloud Email Fixtures Need an Expiry Contract
Email verification tests often fail long after the application code is finished. A CI job creates a mailbox, waits for a message, follows a link, and then forgets the fixture when a pod is evicted or the runner times out. The next run may inherit the old data. It can recieve a message quickly and still be testing the wrong signup. The operational fix is an expiry contract. Every cloud email fixture should have an owner, a creation timestamp, a maximum lifetime, and a cleanup state. Expiry is not just a scheduled deletion task; it is part of the test's definition of done. This pattern has been useful for AWS-backed services running verification flows in Kubernetes. It also keeps disposable…

บทความนี้นำเสนอแนวคิดของ "expiry contract" สำหรับ cloud email fixtures ที่ใช้ในการทดสอบ โดยเฉพาะอย่างยิ่งสำหรับ verification flows ในบริการที่ใช้ Kubernetes ปัญหาที่กล่าวถึงคือ CI jobs มักจะสร้างกล่องจดหมายชั่วคราวสำหรับการทดสอบ แต่ล้มเหลวในการล้างข้อมูล ทำให้เกิดข้อมูลเก่าที่อาจทำให้การทดสอบครั้งต่อไปล้มเหลวหรือให้ผลลัพธ์ที่ไม่ถูกต้อง นักพัฒนาและวิศวกร QA ที่พึ่งพาบริการ cloud email สำหรับการทดสอบอัตโนมัติ โดยเฉพาะในสภาพแวดล้อมแบบไดนามิกเช่น Kubernetes จำเป็นต้องใช้การจัดการวงจรชีวิตที่ชัดเจนสำหรับ test fixtures ของตน หากไม่มี expiry contract การทดสอบอาจไม่เสถียรเนื่องจากข้อมูลที่เหลือจากการรันครั้งก่อน ทำให้การดีบักเป็นเรื่องยากและลดความน่าเชื่อถือของผลการทดสอบ เพื่อให้แน่ใจว่าการทดสอบการยืนยันอีเมลมีความน่าเชื่อถือ ทุก cloud email fixture ควรกำหนดเจ้าของ, เวลาที่สร้าง, อายุการใช้งานสูงสุด และสถานะการล้างข้อมูลที่ชัดเจน ใช้กลไกการล้างข้อมูลอัตโนมัติโดยอิงตาม expiry contract นี้ เพื่อให้แน่ใจว่าข้อมูลเก่าจะถูกล้างออกก่อนที่จะรบกวนการทดสอบครั้งใหม่ รูปแบบนี้มีประโยชน์อย่างยิ่งสำหรับบริการที่ใช้ AWS ที่รัน verification flows ใน Kubernetes.

2026-09-28

Kubernetes Operator for BitCloudPhone Device Pools: From Zero to Production

cncfkubernetes

Kubernetes Operator for BitCloudPhone Device Pools: From Zero to Production
Managing 200 cloud phone instances through a REST client is fine until the day one region goes offline, half your devices die, and you find yourself typing curl commands at 2 a.m. to rebuild the pool. The Kubernetes Operator pattern was invented for exactly this problem: declare what you want, let a controller reconcile reality to match. This article walks through building a production Operator for BitCloudPhone device pools using Kubebuilder and Go. CRD schema, reconcile loop, finalizers, metrics, the three gotchas that will bite you in week two. Everything is code you can actually paste into a fresh cluster. What a Kubernetes Operator is An Operator is a custom Kubernetes controller…

บทความนี้เป็นคู่มือที่ครอบคลุมเกี่ยวกับการสร้าง Kubernetes Operator ที่พร้อมใช้งานจริงสำหรับการจัดการ BitCloudPhone device pools โดยใช้ Kubebuilder และ Go มันช่วยแก้ปัญหาการจัดการอินสแตนซ์โทรศัพท์คลาวด์จำนวนมากโดยการทำให้การกระทบยอดสถานะที่ต้องการเป็นไปโดยอัตโนมัติ นักพัฒนาที่ทำงานกับ Kubernetes และต้องการจัดการแอปพลิเคชันที่ซับซ้อนและมีสถานะจะพบว่านี่เป็นแหล่งข้อมูลที่มีค่าสำหรับการทำความเข้าใจ CRD schema, reconcile loops, finalizers และข้อผิดพลาดทั่วไปในการพัฒนา Operator.

Build a TLS Certificate Expiry Agent: Catch cert-manager Renewal Failures, Unmanaged Secrets, and Stale Certs Before the Outage

cncfkubernetes

Build a TLS Certificate Expiry Agent: Catch cert-manager Renewal Failures, Unmanaged Secrets, and Stale Certs Before the Outage
💡 Originally published on devtocash.com — where this guide stays updated. I write hands-on DevOps/SRE deep-dives there weekly. What This Agent Does A TLS certificate expiry agent finds every certificate in and around your cluster that will expire soon, works out why it has not renewed, and either fixes it or hands a specific owner a specific task. The inventory is deterministic code: it reads cert-manager's metrics, parses every kubernetes.io/tls Secret, and connects to each Ingress host to see which certificate is actually being served. The LLM only sees the shortlist of certificates that are inside the renewal window and still not renewed, and for each one it picks from a small set of…

คู่มือนี้อธิบายถึงวิธีการสร้าง TLS Certificate Expiry Agent เพื่อระบุและแก้ไขปัญหาการต่ออายุใบรับรองที่ล้มเหลว, secret ที่ไม่ได้จัดการ และใบรับรองที่หมดอายุในคลัสเตอร์ Kubernetes ตัว Agent จะทำการสำรวจใบรับรองทั้งหมด, อ่านเมตริกจาก `cert-manager`, วิเคราะห์ `kubernetes.io/tls` Secrets และตรวจสอบ Ingress hosts เพื่อพิจารณาสถานะการต่ออายุ สำหรับใบรับรองที่อยู่ในช่วงการต่ออายุแต่ยังไม่ได้รับการต่ออายุ LLM จะช่วยระบุสาเหตุและแนะนำการดำเนินการเฉพาะ สิ่งนี้เป็นเครื่องมือสำคัญในการป้องกันการหยุดชะงักที่เกิดจากใบรับรองที่หมดอายุและรับประกันความพร้อมใช้งานของบริการอย่างต่อเนื่อง.

2026-09-27

NVIDIA Dynamo Disaggregated Serving on Kubernetes: What a Credible vLLM Benchmark Requires

cncfkubernetes

NVIDIA Dynamo Disaggregated Serving on Kubernetes: What a Credible vLLM Benchmark Requires
Why We Brought This Tool Into Our Lab We started evaluating NVIDIA Dynamo because aggregated vLLM deployments eventually force an awkward compromise. Prompt ingestion and token generation have different performance profiles, but an aggregated worker schedules both phases on the same GPU allocation. Planned equal-GPU benchmark split Aggregated workers 4/4 Prefill workers 2/4 Decode workers 2/4 The plan holds sixteen GPUs constant and changes only stage separation, which is the right control for attribution, but no results have been collected, so no throughput, TTFT, or cost claim is safe yet. That is acceptable for short prompts and predictable output lengths. It becomes harder to operate…

บทความนี้กล่าวถึงการประเมิน NVIDIA Dynamo สำหรับการให้บริการ vLLM แบบแยกส่วนบน Kubernetes โดยเน้นถึงความท้าทายของการ deploy vLLM แบบรวมศูนย์ มันชี้ให้เห็นว่าการรับ prompt และการสร้าง token มีโปรไฟล์ประสิทธิภาพที่แตกต่างกัน ซึ่งอาจนำไปสู่การประนีประนอมเมื่อทั้งสองขั้นตอนถูกกำหนดเวลาบน GPU เดียวกัน สิ่งนี้เกี่ยวข้องกับนักพัฒนาและวิศวกร MLOps ที่ deploy large language models (LLMs) บน Kubernetes โดยเฉพาะอย่างยิ่งเมื่อต้องการเพิ่มประสิทธิภาพและการใช้ทรัพยากร บทความแนะนำว่าการให้บริการแบบแยกส่วน ซึ่งมีการแยก prefill และ decode workers ออกจากกัน อาจให้การควบคุมและประสิทธิภาพที่ดีขึ้น แม้ว่าจะยังไม่มีผลการ benchmark เพื่อยืนยันข้ออ้างด้านประสิทธิภาพก็ตาม.

Learn Kubernetes by Building a Mini Container Orchestrator

cncfkubernetes

Learn Kubernetes by Building a Mini Container Orchestrator
You start three copies of your application. One crashes while you are away from your laptop. Two are still running, but you asked for three. Something needs to notice the missing copy and replace it. That is a useful first step toward understanding Kubernetes. The idea has two parts: what you want, called desired state, and what is actually happening, called observed state. Reconciliation means comparing the two and taking a useful next step. In this example, the next step is to start one replacement. Figure 1: Compare the saved request with current observations, act, and check again. This article starts with that idea, explains the Kubernetes components behind it, and gives you a small…

บทความนี้ให้ความเข้าใจพื้นฐานเกี่ยวกับ Kubernetes โดยนำผู้อ่านสร้าง mini container orchestrator มันอธิบายแนวคิดหลัก เช่น desired state, observed state และ reconciliation โดยแสดงให้เห็นว่า orchestrator ทำให้แน่ใจว่าสถานะจริงตรงกับสถานะที่ต้องการได้อย่างไร สิ่งนี้เกี่ยวข้องอย่างมากสำหรับนักพัฒนาที่ต้องการเข้าใจหลักการพื้นฐานของ Kubernetes โดยไม่ต้องลงลึกในความซับซ้อนทั้งหมดในทันที ด้วยการทำความเข้าใจว่า orchestrator แบบง่ายทำงานอย่างไร นักพัฒนาจะสามารถเข้าใจได้ดีขึ้นว่าทำไม Kubernetes จึงมีพฤติกรรมเช่นนั้น ทำให้ง่ายต่อการออกแบบ, deploy และแก้ไขปัญหาแอปพลิเคชันภายในสภาพแวดล้อม Kubernetes.

2026-09-26

Kubernetes Ingress 502 Bad Gateway (ingress-nginx): How to Debug and Fix 502, 503, and 504 Errors

cncfkubernetes

Kubernetes Ingress 502 Bad Gateway (ingress-nginx): How to Debug and Fix 502, 503, and 504 Errors
💡 Originally published on devtocash.com — where this guide stays updated. I write hands-on DevOps/SRE deep-dives there weekly. What a 502 from the Ingress actually means A 502 Bad Gateway page that says nginx at the bottom means the ingress-nginx controller accepted the request, tried to open a connection to one of your pods, and did not get a valid HTTP response back . Your Service, your Ingress rule, and TLS all worked. The failure is between the controller and the pod IP: nothing listening on that port, the app closing the connection mid-request, a keepalive race, or a backend that speaks HTTPS or gRPC while nginx sent plain HTTP/1.1. Its siblings are 503 , which almost always means the…

ข้อผิดพลาด 502 Bad Gateway จาก Kubernetes Ingress (nginx) บ่งชี้ว่า Ingress Controller ได้รับคำขอสำเร็จ แต่ไม่สามารถรับการตอบกลับ HTTP ที่ถูกต้องจาก Pod ของคุณได้ ซึ่งมักจะชี้ไปที่ปัญหาระหว่าง Controller และ IP ของ Pod เช่น ไม่มีอะไรกำลังฟังอยู่ที่พอร์ตนั้น แอปพลิเคชันปิดการเชื่อมต่อก่อนเวลาอันควร หรือโปรโตคอลไม่ตรงกัน (เช่น Ingress ส่ง HTTP ในขณะที่ Backend คาดหวัง HTTPS/gRPC) นักพัฒนาที่กำลังดีบั๊กข้อผิดพลาดเหล่านี้ควรตรวจสอบ Log ของ Pod และการกำหนดค่าเครือข่ายเพื่อให้แน่ใจว่าแอปพลิเคชันทำงานได้อย่างถูกต้องและกำลังฟังอยู่ที่พอร์ตที่คาดไว้ด้วยโปรโตคอลที่ถูกต้อง

Adding Status and Conditions to My Kubernetes Operator

cncfkubernetes

Adding Status and Conditions to My Kubernetes Operator
In the previous posts, I created a custom Kubernetes resource called Greeting , built a Java controller for it, and then deployed that controller inside Kubernetes. The current flow looks like this: Greeting | v Java Operator | v ConfigMap For example, I can create: apiVersion : platform.shubforge.dev/v1alpha1 kind : Greeting metadata : name : hello spec : message : " Hello from Platform Lab" and the operator creates: hello-greeting as a ConfigMap. This works. But there is still one problem. If I run: kubectl get greeting hello -o yaml the Greeting resource itself does not tell me much about what the operator has done. I can check the ConfigMap. I can check operator logs. But ideally, the…

ในการสร้าง Kubernetes Operator การเพิ่ม `Status` และ `Conditions` ให้กับ Custom Resource Definition (CRD) เป็นสิ่งสำคัญสำหรับการให้ข้อมูลย้อนกลับที่ชัดเจนเกี่ยวกับการทำงานของ Operator และสถานะของ Managed Resources แม้ว่า Operator อาจสร้าง ConfigMap ได้สำเร็จ แต่ `Greeting` Resource เองจะไม่สะท้อนสิ่งนี้หากไม่มีฟิลด์ `Status` นักพัฒนาควรใช้ `Status` เพื่อเปิดเผยข้อมูล เช่น สถานะปัจจุบัน Observed Generation และ Conditions ใดๆ (เช่น `Ready`, `Progressing`, `Degraded`) โดยตรงภายใน CRD ทำให้ผู้ใช้สามารถสอบถาม `kubectl get greeting hello -o yaml` เพื่อรับข้อมูลเชิงลึกในการดำเนินงานได้ทันทีโดยไม่จำเป็นต้องตรวจสอบ Log หรือ Resource อื่นๆ

2026-09-25

Kubernetes Admission Control: From Pod Security Standards to Policy-as-Code Gates

cncfkubernetes

Kubernetes Admission Control: From Pod Security Standards to Policy-as-Code Gates
Kubernetes Admission Control: From Pod Security Standards to Policy-as-Code Gates Kubernetes security guidance often stops at recommendations. Admission control is where recommendations become gates that a workload cannot pass without meeting them. Why the reader needs this A cluster that relies on documentation and review will eventually run a workload that violates its own rules. Admission controllers evaluate requests before objects are persisted, which means a policy can reject a non-compliant pod rather than relying on someone noticing it later. The built-in Pod Security Standards provide a baseline without any additional tooling. Policy engines extend that baseline to…

Kubernetes Admission Control เป็นกลไกสำคัญในการบังคับใช้นโยบายความปลอดภัยโดยการประเมินคำขอก่อนที่อ็อบเจกต์จะถูกบันทึกในคลัสเตอร์ ในขณะที่ Pod Security Standards ให้พื้นฐาน แต่ policy engines ขยายสิ่งนี้เพื่อให้สามารถใช้ policy-as-code gates แบบกำหนดเองได้ ซึ่งหมายความว่านักพัฒนาและผู้ดูแลคลัสเตอร์สามารถก้าวข้ามคำแนะนำไปสู่การปฏิเสธ workload ที่ไม่เป็นไปตามข้อกำหนดได้อย่างแข็งขัน ป้องกันการกำหนดค่าความปลอดภัยที่ไม่ถูกต้องไม่ให้ถูกปรับใช้ การนำ admission controllers มาใช้เป็นสิ่งสำคัญสำหรับการรักษาสภาพแวดล้อม Kubernetes ที่ปลอดภัย โดยเฉพาะอย่างยิ่งสำหรับองค์กรที่มีข้อกำหนดการปฏิบัติตามที่เข้มงวด.

2026-09-24

Kubernetes Architecture Explained: The core components that run your cluster

cncfkubernetes

Kubernetes Architecture Explained: The core components that run your cluster
You have containerized your application with Docker and you need to run 100 copies across 20 servers, restart the containers when they crash, scale up or increase resources at users spike, plan updates without downtimes, doing that by hand(manually) is chaotic, that’s where kubernetes comes in. Requirements Docker — Minikube uses it to run your cluster. Install from the official docs: https://docs.docker.com/get-started/get-docker/ Minikube — runs a single-node Kubernetes cluster on your machine. Pick your operating system here: https://minikube.sigs.k8s.io/docs/start/ kubectl — the command-line tool you use to talk to the cluster: https://kubernetes.io/docs/tasks/tools/ You’ll also want at…

บทความนี้อธิบายสถาปัตยกรรมของ Kubernetes โดยเน้นที่ส่วนประกอบหลักที่ช่วยให้สามารถจัดการแอปพลิเคชันคอนเทนเนอร์ขนาดใหญ่ได้ มันเน้นย้ำว่า Kubernetes แก้ปัญหาการรันคอนเทนเนอร์หลายร้อยรายการบนเซิร์ฟเวอร์หลายเครื่องได้อย่างไร เพื่อให้แน่ใจว่ามีการรีสตาร์ท, การปรับขนาด และการอัปเดตโดยไม่มีการหยุดทำงาน สำหรับนักพัฒนาที่เพิ่งเริ่มต้นกับ Kubernetes หรือผู้ที่ต้องการทบทวน บทความนี้จะอธิบายความจำเป็นของเครื่องมือต่างๆ เช่น Docker, Minikube และ kubectl สำหรับการตั้งค่าและการโต้ตอบกับคลัสเตอร์ การทำความเข้าใจส่วนประกอบพื้นฐานเหล่านี้เป็นสิ่งสำคัญสำหรับทุกคนที่ต้องการ deploy และจัดการแอปพลิเคชันอย่างมีประสิทธิภาพในสภาพแวดล้อม Kubernetes.

Build a Node Drain Agent: PDB-Aware Kubernetes Maintenance That Never Violates a Disruption Budget

cncfkubernetes

Build a Node Drain Agent: PDB-Aware Kubernetes Maintenance That Never Violates a Disruption Budget
💡 Originally published on devtocash.com — where this guide stays updated. I write hands-on DevOps/SRE deep-dives there weekly. What This Agent Does A node drain agent takes the most tedious job in cluster maintenance, emptying nodes for kernel patches, AMI rotations, and version upgrades, and makes it safe to run unattended. Before it cordons anything, deterministic code checks every pod on the node against every PodDisruptionBudget that selects it and predicts whether the eviction will succeed. When a drain would stall, the LLM diagnoses why the budget is exhausted and picks one of a small set of remediations: scale the workload up first, wait for an in-flight rollout, ask the owning…

บทความนี้นำเสนอแนวคิดของ "Node Drain Agent" สำหรับ Kubernetes ซึ่งออกแบบมาเพื่อทำให้การบำรุงรักษาโหนดเป็นไปโดยอัตโนมัติ (เช่น สำหรับการแพตช์เคอร์เนลหรือการอัปเกรด) โดยยึดมั่นใน PodDisruptionBudgets (PDBs) อย่างเคร่งครัด Agent จะตรวจสอบทุก pod เทียบกับ PDBs ก่อนที่จะ cordoning โหนด โดยคาดการณ์ว่าการย้าย pod จะสำเร็จหรือไม่ และวินิจฉัยว่าทำไมงบประมาณอาจหมดลง สิ่งนี้ช่วยป้องกันไม่ให้การดำเนินการบำรุงรักษาละเมิดการรับประกันความพร้อมใช้งานของบริการ นักพัฒนาที่จัดการคลัสเตอร์ Kubernetes สามารถนำแนวทางนี้ไปใช้เพื่อให้การบำรุงรักษาปลอดภัยและเป็นอัตโนมัติมากขึ้น ทำให้มั่นใจได้ว่าเวิร์คโหลดที่สำคัญยังคงพร้อมใช้งานแม้ในระหว่างการ drain โหนด เป็นโซลูชันที่แข็งแกร่งสำหรับการบำรุงรักษาคลัสเตอร์โดยไม่ต้องมีคนดูแล.

2026-09-23

14,913 Kubernetes Dashboard Matches: Why the Management UI Is the Wrong Thing to Expose

cncfkubernetes

14,913 Kubernetes Dashboard Matches: Why the Management UI Is the Wrong Thing to Expose
14,913 Kubernetes Dashboard Matches: Why the Management UI Is the Wrong Thing to Expose A Kubernetes dashboard is an administrative interface. When one is reachable from the public internet, the exposure is qualitatively different from a public web application, because the interface is designed to manage workloads rather than to serve users. The problem and why it matters Management interfaces concentrate privilege. A dashboard that can list pods, read secrets or execute into containers gives an authenticated user a great deal of control. Exposing that interface to the internet removes the network boundary that would otherwise be the first control an attacker has to defeat. The exposure is…

การเปิดเผย Kubernetes Dashboard สู่สาธารณะบนอินเทอร์เน็ตมีความเสี่ยงด้านความปลอดภัยอย่างมาก เนื่องจากเป็นอินเทอร์เฟซการดูแลระบบที่มีสิทธิ์สูง แตกต่างจากเว็บแอปพลิเคชันสาธารณะ แดชบอร์ดนี้ออกแบบมาเพื่อจัดการเวิร์กโหลด ทำให้ผู้ใช้ที่ผ่านการยืนยันตัวตนสามารถควบคุม pod, secret และ container ได้อย่างกว้างขวาง นักพัฒนาและผู้ดูแลระบบควรหลีกเลี่ยงการเปิดเผย Kubernetes Dashboard โดยตรงต่ออินเทอร์เน็ต และควรใช้วิธีการเข้าถึงที่ปลอดภัย เช่น VPN หรือ bastion host เพื่อปกป้องคลัสเตอร์จากการเข้าถึงโดยไม่ได้รับอนุญาตและการถูกโจมตีที่อาจเกิดขึ้น.

Docker Essentials: Containerizing Your First App – Like Neo Dodging Bullets in The Matrix

cncfkubernetes

Docker Essentials: Containerizing Your First App – Like Neo Dodging Bullets in The Matrix
The Quest Begins (The "Why") Honestly, I remember the first time I tried to share a Node.js API with a teammate. I zip‑up the project, send it over Slack, and they reply, “Hey, it’s complaining about missing modules on my machine.” We spend an hour aligning Node versions, fiddling with npm config, and finally get it running — only to discover the next day that the production server has a different OS and the build breaks again. It felt like trying to solve a puzzle where the pieces keep changing shape. That’s when the idea of containerization clicked: what if I could package my app exactly as it runs on my laptop, ship that package everywhere, and know it will behave the same? No more…

บทความนี้เป็นบทนำสู่ Docker โดยอธิบายแนวคิดพื้นฐานของการทำคอนเทนเนอร์และประโยชน์สำหรับนักพัฒนา มันเน้นว่า Docker แก้ปัญหาการปรับใช้และความสอดคล้องของสภาพแวดล้อมทั่วไปได้อย่างไร โดยการบรรจุแอปพลิเคชันและส่วนประกอบเข้าในคอนเทนเนอร์ที่แยกจากกัน นักพัฒนาที่เพิ่งเริ่มต้นกับการทำคอนเทนเนอร์สามารถใช้คู่มือนี้เพื่อทำความเข้าใจว่าทำไม Docker จึงจำเป็นสำหรับการสร้างสภาพแวดล้อมแอปพลิเคชันที่พกพาได้และเชื่อถือได้ ซึ่งช่วยขจัดปัญหา "มันทำงานบนเครื่องของฉัน".

2026-09-22

What EU Data Sovereignty Actually Requires Beyond Hosting

cncfkubernetes

What EU Data Sovereignty Actually Requires Beyond Hosting
Pipeline & Prompts | Byte size guides on DevOps, Cloud and AI ☁️ Cloud Without the Chaos #4 ⚡ Byte Size Summary Why "the data is in an EU data centre" doesn't answer a sovereignty question. Support access, logs, and metrics are separate surfaces, and each needs its own boundary What happened when a blanket EU-only routing fix broke a 2-hour P1 SLA, and the tier we built instead Why sovereignty isn't something you automate. You can only shrink the surface area where a human has to touch the boundary The Story The data residency box was already checked. Managed Kubernetes clusters, multi-region, customer workload data pinned to EU regions from day one. That part of the compliance conversation…

การบรรลุ Data Sovereignty โดยเฉพาะในภูมิภาคอย่าง EU ไม่ได้หมายถึงแค่การโฮสต์ข้อมูลใน Data Center ท้องถิ่นเท่านั้น แต่ยังรวมถึงการเข้าถึง Support, Logs และ Metrics ซึ่งแต่ละส่วนต้องมีขอบเขตของตนเอง การกล่าวเพียงว่า "ข้อมูลอยู่ใน Data Center ของ EU" ไม่ได้ตอบคำถามเรื่อง Sovereignty อย่างครบถ้วน เนื่องจากมนุษย์ยังสามารถเข้าถึงส่วนต่างๆ เหล่านี้ได้โดยไม่ผ่านข้อจำกัดทางภูมิศาสตร์ นักพัฒนาและสถาปนิกที่ออกแบบระบบสำหรับ Data Sovereignty ต้องพิจารณาจุดเข้าถึงที่เป็นไปได้ทั้งหมด และใช้การควบคุมที่นอกเหนือจากการเก็บข้อมูลในพื้นที่ โดยตระหนักว่าการทำให้ Sovereignty เป็นอัตโนมัติทั้งหมดนั้นเป็นเรื่องที่ท้าทาย และมักต้องมีการกำกับดูแลโดยมนุษย์ ณ ขอบเขตที่สำคัญ

Found the Real Kubernetes Memory Ceiling — It Wasn't Double

cncfkubernetes

Found the Real Kubernetes Memory Ceiling — It Wasn't Double
Last entry left a real question hanging: the exact Podman number got killed under kind , twice. Did that mean the gap between the two runtimes was huge — needing something close to double the memory — or was the real ceiling only a little higher than 1663Mi, and I'd just clipped it? Only one way to find out. Redeployed with the limit bumped to 2048Mi — a deliberately big jump, so the answer would be unambiguous either way: kubectl delete pod ollama-sized kubectl apply -f ollama-pod-2gb.yaml kubectl exec -it ollama-2gb -- ollama pull llama3.2:1b kubectl exec -it ollama-2gb -- ollama run llama3.2:1b Asked it a real question, checked the outcome: kubectl top pod ollama-2gb kubectl describe pod…

ในการปรับแต่ง Memory Limit ของ Kubernetes เพดานหน่วยความจำที่แท้จริงสำหรับ Pod อาจสูงกว่าที่สังเกตได้เล็กน้อยเท่านั้น ไม่จำเป็นต้องเป็นสองเท่า แม้ว่าความพยายามครั้งแรกจะล้มเหลวก็ตาม การค้นพบนี้ชี้ให้เห็นว่าการปรับแต่ง Memory Request และ Limit ต้องอาศัยการทดสอบที่แม่นยำ แทนที่จะเป็นการเพิ่มค่าแบบสุ่ม นักพัฒนาและ SRE ที่จัดการ Kubernetes Cluster ควรสทการทดสอบซ้ำๆ โดยเพิ่มหน่วยความจำทีละน้อยเมื่อปรับ Memory Limit เพื่อระบุเพดานที่เหมาะสมอย่างแม่นยำ ป้องกันการจัดสรรทรัพยากรเกินความจำเป็น หรือ OOMKill ที่ไม่คาดคิด และรับประกันการใช้ทรัพยากรอย่างมีประสิทธิภาพ

2026-09-21

Our linter's "safe" autofix would have silently disabled RBAC

cncfkubernetes

Our linter's "safe" autofix would have silently disabled RBAC
KubeIntellect is an AI agent that runs kubectl against a live cluster, so its tools carry a role check and a human-approval gate. Both depend on one thing: the tool actually receiving the run config the graph injects. This is the parameter that receives it. config : Annotated [ RunnableConfig , InjectedToolArg ] = None , # type: ignore[assignment] That line is wrong in every way a reviewer is trained to notice. The default is None , but the annotation does not say | None . mypy complains, which is why there is a type: ignore sitting on it. Ruff wants to rewrite the Optional[...] spelling of it. Every instinct says clean this up. Cleaning it up disables role-based access control. Why the…

บทความนี้เน้นย้ำถึงปัญหาสำคัญที่ฟังก์ชัน "autofix" ของ Linter อาจปิดใช้งาน Role-Based Access Control (RBAC) ใน Kubernetes โดยไม่ตั้งใจ เมื่อทำงานกับ AI Agent ที่รันคำสั่ง `kubectl` ปัญหาเกิดจากการแก้ไข type annotation ที่ดูเหมือนไม่มีอันตราย แต่เมื่อนำไปใช้แล้ว จะขัดขวางไม่ให้ `RunnableConfig` ถูก inject อย่างถูกต้อง ซึ่งเป็นการข้ามการตรวจสอบความปลอดภัย นักพัฒนาที่ใช้ Linter ที่มีคุณสมบัติ autofix กับการกำหนดค่า Kubernetes โดยเฉพาะที่เกี่ยวข้องกับ AI Agent หรือเครื่องมือที่กำหนดเอง ต้องใช้ความระมัดระวังอย่างยิ่งและตรวจสอบการเปลี่ยนแปลงอย่างละเอียด เพื่อหลีกเลี่ยงการลดทอนความปลอดภัยของ RBAC โดยไม่รู้ตัว

Kubernetes - Day - 03 - File Permissions, Bind Mount

cncfkubernetes

Kubernetes - Day - 03 - File Permissions, Bind Mount
File Permission - chmod 600 <file_name> - chmod -R 6-- <folder_name> - R -- > Recurrsive What is UMASK ? This is for default permission. just type "umask". Reply 0002 ( what it means ? ) Don't take the first 0. It will be for directory. It will give 666 (rw- rw- rw-) --> 666 - 002 --> 664. The result is ( rw- rw- r-- ) Bind Mount mount --bind <src_folder> <dest_folder> A folder is like HOST. B folder is like Container. This is literally called as Volume. Bind Mount is nothing buta VOLUME. Commands docker run -v "./data":"/home/data" ubuntu bash Architecture Image is RO. No in-place updation for image , only new image can be created. Each image will have different layers. Notes : Container…

บทความนี้ให้ข้อมูลเบื้องต้นเกี่ยวกับการอนุญาตไฟล์ (file permissions) และ bind mounts ในบริบทของ Kubernetes และ Docker ครอบคลุมคำสั่ง `chmod`, แนวคิดของ `umask` สำหรับการอนุญาตเริ่มต้น และวิธีการทำงานของ bind mounts ในฐานะ volume โดยแสดงตัวอย่างด้วยคำสั่ง Docker นักพัฒนาที่เพิ่งเริ่มต้นกับการใช้คอนเทนเนอร์หรือ Kubernetes โดยเฉพาะผู้ที่ประสบปัญหาเกี่ยวกับการจัดเก็บข้อมูลถาวรและการควบคุมการเข้าถึงภายในคอนเทนเนอร์ จะพบว่านี่เป็นข้อมูลเบื้องต้นที่เป็นประโยชน์สำหรับการทำความเข้าใจแนวคิดพื้นฐานของการจัดการไฟล์และการเมานต์วอลุ่ม

2026-09-20

VMware Admin's Guide to Kubernetes

cncfkubernetes

VMware Admin's Guide to Kubernetes
The Problem Nobody Talks About When I first approached Kubernetes, every tutorial assumed I was a developer coming from Docker. Nobody wrote for someone who knew vSphere inside-out — who understood DRS, vMotion, VSAN, NSX, and had opinions about datastore sizing. The Mental Model Map | VMware vSphere | Kubernetes Equivalent | Key Difference | |---|---|---| | ESXi Host | Node | Nodes run containers, not VMs | | vCenter Server | Control Plane (API Server) | API-driven, not GUI-first | | VM | Pod | Pods are ephemeral — embrace this | | VM Template | Container Image | Stored in a registry, not a datastore | | vSwitch / DVS | CNI Plugin (Calico, Cilium) | Defined in YAML, not GUI clicks | | NSX…

สำหรับผู้ดูแลระบบ VMware ที่กำลังเปลี่ยนผ่านสู่ Kubernetes การทำความเข้าใจแนวคิดของ vSphere ที่คุ้นเคยเทียบกับ Kubernetes จะเป็นประโยชน์ ตัวอย่างเช่น ESXi Host เทียบได้กับ Node, vCenter Server เทียบได้กับ Control Plane และ VM เทียบได้กับ Pod การทำความเข้าใจว่า Pods มีลักษณะชั่วคราวไม่เหมือน VM และ Kubernetes เป็นแบบ API-driven ไม่ใช่ GUI-first เป็นกุญแจสำคัญในการทำความเข้าใจกระบวนทัศน์ใหม่ การแปลโมเดลความคิดนี้ช่วยเชื่อมช่องว่างความรู้ ทำให้ผู้เชี่ยวชาญ VMware สามารถใช้ความรู้โครงสร้างพื้นฐานที่มีอยู่แล้วในบริบทของ Kubernetes ได้

Cosign Keyless Signing in GitHub Actions: Sign Images, Attest SBOMs, and Enforce It with Kyverno

cncfkubernetes

Cosign Keyless Signing in GitHub Actions: Sign Images, Attest SBOMs, and Enforce It with Kyverno
💡 Originally published on devtocash.com — where this guide stays updated. I write hands-on DevOps/SRE deep-dives there weekly. The short version Cosign keyless signing means your GitHub Actions job proves its identity with its OIDC token, gets a ten-minute certificate from Sigstore's Fulcio CA, signs the image digest, and throws the private key away. There is no signing key to store, rotate, or leak. What you verify later is not "was this signed by key X" but "was this signed by this workflow file, on this branch, in this repo ." The whole loop is three moves: add id-token: write and a cosign sign step to the build job, attach an SBOM as a signed attestation, and make the cluster refuse…

การเซ็นแบบ keyless ด้วย Cosign ใน GitHub Actions เป็นวิธีที่ปลอดภัยในการเซ็นอิมเมจคอนเทนเนอร์และยืนยัน SBOMs โดยไม่ต้องจัดการ private keys กระบวนการนี้เกี่ยวข้องกับการที่ GitHub Actions job พิสูจน์ตัวตนด้วย OIDC token, รับใบรับรองชั่วคราวจาก Sigstore's Fulcio CA, เซ็น image digest และทิ้ง private key วิธีนี้ช่วยให้สามารถตรวจสอบได้จากไฟล์ workflow, branch และ repository แทนที่จะเป็นคีย์แบบคงที่ และสามารถบังคับใช้ในคลัสเตอร์ Kubernetes โดยใช้ Kyverno เพื่อปฏิเสธอิมเมจที่ไม่ได้เซ็น ซึ่งช่วยเพิ่มความปลอดภัยของ supply chain ได้อย่างมาก

2026-09-19

Deployed Ollama to Local Kubernetes With No Resource Limits

cncfkubernetes

Deployed Ollama to Local Kubernetes With No Resource Limits
Before testing whether last entry's real Podman number (1.663GB) holds up as an actual Kubernetes resource limit, I wanted a baseline: what happens with nothing set at all. kind runs a full local Kubernetes cluster inside containers acting as nodes — Kubernetes on top of the same containers everything else in this series has been using. Spun up a fresh cluster and deployed Ollama with no resources section in the pod spec whatsoever: kind create cluster --name today-i-ran kubectl apply -f ollama-pod-naive.yaml kubectl exec -it ollama-naive -- ollama pull llama3.2:1b kubectl exec -it ollama-naive -- ollama run llama3.2:1b Asked it a real question — "What does BGP do in OpenShift Networking" —…

บทความนี้อธิบายการทดลอง deploy Ollama ซึ่งเป็น LLM runner แบบ local ไปยัง Kubernetes cluster แบบ local (kind) โดยไม่ได้ตั้งค่า resource limits ใดๆ เป้าหมายคือการสร้าง baseline สำหรับการใช้ทรัพยากรก่อนที่จะกำหนด limits ที่เฉพาะเจาะจง ผู้เขียนสามารถ pull และรันโมเดล `llama3.2:1b` และสอบถามข้อมูลได้สำเร็จ สิ่งนี้เกี่ยวข้องกับนักพัฒนาที่กำลังสำรวจการ deploy โมเดล AI แบบ local บน Kubernetes เนื่องจากเป็นการแสดงจุดเริ่มต้นสำหรับการทำความเข้าใจการใช้ทรัพยากร อย่างไรก็ตาม ในสภาพแวดล้อมการผลิต การตั้งค่า resource requests และ limits ที่เหมาะสมเป็นสิ่งสำคัญอย่างยิ่งเพื่อป้องกันการใช้ทรัพยากรจนหมดและรับรองความเสถียรของคลัสเตอร์

The Same Memory Number That Worked in Podman Got OOMKilled in Kubernetes

cncfkubernetes

The Same Memory Number That Worked in Podman Got OOMKilled in Kubernetes
OOMKilled is what Kubernetes says when a container tries to use more memory than its limit allows and the kernel steps in and kills it. Going into this one, my assumption was straightforward: Entry 09 measured 1.663GB under Podman, so setting a Kubernetes limit to that exact number should be enough. Same model, same host, same measurement. That assumption was wrong, and finding out why turned into the most interesting result in the series so far. Deployed the same image to a fresh kind cluster with requests.memory and limits.memory both set to the precise Podman figure — 1663Mi. Pulled the model, tried to load it: kubectl exec -it ollama-sized -- ollama pull llama3.2:1b kubectl exec -it…

บทความนี้เน้นความแตกต่างที่สำคัญในการจัดการหน่วยความจำระหว่าง Podman และ Kubernetes: ขีดจำกัดหน่วยความจำที่ใช้ได้กับ Ollama ใน Podman (1.663GB) กลับทำให้เกิดข้อผิดพลาด Out-Of-Memory (OOMKilled) เมื่อนำไปใช้กับ Kubernetes สิ่งนี้บ่งชี้ว่าพฤติกรรมการใช้หน่วยความจำอาจแตกต่างกันอย่างมีนัยสำคัญระหว่าง container runtimes และแพลตฟอร์ม orchestration แม้จะเป็นแอปพลิเคชันเดียวกันก็ตาม นักพัฒนาที่ deploy โมเดล AI หรือแอปพลิเคชันที่ใช้หน่วยความจำมากไปยัง Kubernetes ไม่ควรถือว่าขีดจำกัดทรัพยากรที่ได้จากเครื่องมือคอนเทนเนอร์แบบ local จะสามารถนำไปใช้ได้โดยตรง การทดสอบอย่างละเอียดและการปรับแต่ง `requests.memory` และ `limits.memory` ใน Kubernetes เป็นสิ่งสำคัญเพื่อหลีกเลี่ยง OOMKilled pods และรับรองความเสถียรของแอปพลิเคชัน