maksit-cluster-console/CHANGELOG.md

5.6 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

[0.5.0] - 2026-08-22

Added

  • Applications table shows live CPU (% of cluster allocatable) and Memory (k8s Mi/Gi) from summed pod metrics when metrics-server is available.
  • Deployments, StatefulSets, and DaemonSets tables include CPU and Memory columns (millicores / MiB, summed from owned pods).
  • Applications metric tooltips: CPU in millicores; memory as MiB plus rounded MB.
  • Applications pod attribution matches instance labels, direct workload owners, and ReplicaSet → Deployment owners.
  • Transient Kubernetes API errors (for example HTTP/2 ResponseEnded) retry automatically; the client uses HTTP/1.1 for list traffic.

Changed

  • Applications memory uses k8s compact units (512.0MiB, <1Mi) instead of Task Manager MB labels; CPU stays as cluster %.
  • DataGrid row separators, headers, and zebra rows are tuned for the dark theme (less harsh white lines).

Fixed

  • Pod metrics memory was misread when stored as MiB-style strings, which made Applications Memory show 0 MB while CPU looked correct.
  • Pod metrics now sum all container usages in a pod (not only the last container).

[0.4.2] - 2026-08-21

Fixed

  • Switching kubectl current-context only patches current-context and never writes sibling config.bak.* files (Lens treats those as extra kubeconfigs). Blank cluster/user names reuse existing context entries (or match the context name) instead of creating {name}-cluster / {name}-user orphans. Structural kubeconfig saves also skip .bak siblings for the same reason.
  • ConfigMap and Secret Data editors accept multiline values and multiline paste via a dedicated value box under the key list.

[0.4.1] - 2026-08-21

Fixed

  • Staying on Pods (or any resource table) now picks up cluster changes on the automatic refresh. The grid previously only updated after leaving and returning to the view.
  • Logs Follow tails new pod lines instead of hanging on the snapshot request, and turning Follow off no longer races the live stream into the log text.

[0.4.0] - 2026-08-20

Added

  • Resource table column filters, row sort, widths, and search are stored per cluster in appsettings.json (Configuration:Layout:Tables).

Fixed

  • Switching clusters no longer resets table column filters or sort order.

[0.3.0] - 2026-08-20

Changed

  • Catalog radios set kubectl current-context. The asterisk marker and Connections Use for kubectl button are gone.

[0.2.1] - 2026-08-20

Fixed

  • Resource table IP columns (Cluster IP, External IP) sort as addresses, not text (10.1.1.2 before 10.1.1.10).

[0.2.0] - 2026-08-20

Added

  • Status-bar messages for port-forward start, stop, restore, and failure.
  • Local / Remote labels on the port-forward bar so the two port fields are explicit.
  • Rebind the host port of an existing forward from Network → Port Forwarding (Local field + Rebind).
  • Double-click a live port-forward in Network → Port Forwarding to open http://127.0.0.1:{local} in the default browser.

Changed

  • Active port-forwards are listed in Network → Port Forwarding (stop from the table). They are no longer shown in the status bar.
  • Resource table footer, YAML/Data edit bars, and workload limit apply buttons show only for a selected row that can use them. Empty toolbars are hidden.
  • Enabled port-forwards are saved in appsettings.json (Configuration:PortForwards) and restored when a cluster reconnects.

Fixed

  • Service port-forward resolves a backend pod from spec.selector and maps the service port to targetPort, matching kubectl.
  • Service related-pods follow spec.selector only, so Helm siblings (for example Longhorn CSI vs UI) are not mixed; named targetPort is resolved on a pod that actually declares it.
  • Port-forward tunnels use the Kubernetes port-forward multiplex protocol (StreamType.PortForward, channel 0, one stream per local connection) instead of exec stdin/stdout.
  • Port Forwarding Remote is the requested service/pod port (for example 80), not the mapped container port (8000 for Longhorn UI). Open http://127.0.0.1:{local}.
  • Port-forward listens on both IPv4 and IPv6 loopback so localhost works on Windows. The IPv6 listener is IPv6-only so it does not collide with IPv4 on Windows.
  • Port-forward opens multiplex streams before starting the demuxer, then copies with blocking socket I/O, matching the Kubernetes C# client port-forward example.
  • Persisted port-forwards re-resolve a Running pod by Service/workload owner or stable labels after replica recreation, including on each new local connection.

[0.1.1] - 2026-08-19

Fixed

  • Release engine reads <Version> from src/Directory.Build.props when the UI csproj has none.
  • Warnings no longer treat k3s EtcdIsVoter=True as unhealthy; only False (learner / non-voter) is raised.

[0.1.0] - 2026-08-19

Added

  • First public release of MaksIT.ClusterConsole, an Avalonia Kubernetes desktop console (catalog, navigator, tables, YAML apply, logs, exec, port-forward), licensed under Apache 2.0.
  • Cluster access through the official KubernetesClient and the same kubeconfig/RBAC as kubectl, including an in-process connections editor.
  • Helm releases, Dapr CRDs, Applications view, force-delete, volume file browse, resource-limit patches, and a read-only local Ollama Chat tab.

See README.md for the full feature list.