github GoogleCloudPlatform/khi v0.50.0
KHI v0.50.0

one day ago
unnamed (2)

This release features a complete overhaul of the Kubernetes Audit Log parser. This significantly improves the visualization accuracy of resource state changes, specifically enabling more precise tracking of Pod behavior on Nodes and resource deletion flows. It also includes UX improvements for the New Inspection dialog.

🚀 Key Changes

Revamped Kubernetes Audit Log ParserThe Kubernetes Audit Log parsing logic has been completely rewritten, introducing the following enhancements:

  • Replaced bind with pod pseudo-subresources under Node resources
    Previously, KHI displayed bind subresources under Node resources to represent scheduling events. This has been replaced with new pod pseudo-subresources. This change allows you to view a detailed timeline directly from the Node's perspective, visualizing not just the scheduling timing, but also when a Pod became Running, when containers terminated, and if errors occurred.
    image
  • Enhanced Container ID correlation using Pod Status
    The logic for correlating Container IDs in containerd logs with Pods has been improved. In addition to the existing method using container startup logs, KHI now utilizes Container IDs found in the status field of Pod resources within Audit Logs. This enables automatic and accurate correlation of container logs to Pods even if the specific container startup logs are outside the query range, provided the Audit Log contains the Container ID.
  • Support for metadata.uid in Control Plane logs
    KHI now generates a resource UID mapping during Audit Log parsing. This allows Control Plane logs that only contain metadata.uid (without resource names) to be correctly mapped to the corresponding resource timeline.
  • Strict distinction of Condition statuses
    The visualization of status.conditions now explicitly distinguishes between three states: "Unknown" (explicitly set to Unknown), "Condition does not exist", and "Insufficient log data to determine". This allows users to instantly determine whether the state is due to data loss or an actual Unknown state.
image
  • Visualization of deletion flow considering Finalizers
    KHI now recognizes finalizers in the resource deletion process. When a DELETE request is issued, if finalizers are present, the resource is no longer treated as immediately "Deleted". Instead, it is displayed as "Terminating" until the finalizers are removed.
image

UI/UX Improvements

  • Time-aware cluster name suggestion (Cloud Monitoring Label)
    The cluster name autocomplete behavior in the New Inspection dialog has been changed. The previous method of fetching the "current cluster list" via API has been removed. Instead, KHI now uses Cloud Monitoring labels to suggest only **clusters that actually existed during the input End time and Duration**. This ensures deleted clusters are suggested if they existed during the specified timeframe.

🐛 Bug Fixes

  • Fixed subresource deletion tracking
    Fixed an issue where subresources were not correctly recognized as deleted when their parent resource was deleted.
  • Fixed DeleteCollection state restoration
    Fixed an issue where the manifest state was not correctly restored when multiple resources were bulk deleted via DeleteCollection API requests (e.g., during Namespace deletion).

What's Changed

Features 🚀

  • Update the legacy kubernetes audit log parser with the new base task types by @kyasbal in #399
  • Add CloudTrace support to investigate heavy tasks by @kyasbal in #371
  • fix: Condition "Unknown" was shown for the condition without containing the status body by @kyasbal in #408
  • use Cloud Monitoring for cluster autocomplete by @kyasbal in #413
  • Fix/partial condition complement by @kyasbal in #409

Bug fix 🐛

  • Fix concurrent map access on the processContainerIDDiscoveryForLog by @kyasbal in #400
  • feat: Dynamically generate Cloud Logging resource name input forms based on active tasks in the task graph. by @kyasbal in #374
  • bug: fix leaked channel by @kyasbal in #401

Other Changes 🛠

  • Adding a Make target to build single-binary build artifacts for multiple environments by @kyasbal in #370
  • Updated GEMINI.md by @kyasbal in #407
  • Use xx-version-file to specify compiler/runtime version on release Github Action script by @kyasbal in #410
  • refactor(core): rename taskbase types and files for clarity by @kyasbal in #414
  • feat(inspection): add progress reporting to manifest generator task by @kyasbal in #415

Dependencies ⏫

  • Bump golang.org/x/crypto from 0.42.0 to 0.45.0 by @dependabot[bot] in #372
  • Bump js-yaml from 4.1.0 to 4.1.1 in /web by @dependabot[bot] in #369
  • Bump node-forge from 1.3.1 to 1.3.2 in /web by @dependabot[bot] in #381
  • Added a new GitHub Action to build binaries and attach it to the draft release by @kyasbal in #402
  • Updated Go dependency by @kyasbal in #404
  • Bump @angular/compiler from 20.0.4 to 20.3.15 in /web by @dependabot[bot] in #385
  • Updated go version from 1.24 to 1.25 by @kyasbal in #405

To use this version, you can run the following command:

$ docker run -p 127.0.0.1:8080:8080 gcr.io/kubernetes-history-inspector/release:v0.50.0

Or you can use latest tag until we release the next release.

Full Changelog: v0.49.1...v0.50.0

Don't miss a new khi release

NewReleases is sending notifications on new releases.