config: support per-node kubelet policy - #200
Merged
Merged
Conversation
Add a bounded native KubeletConfiguration input on individual nodes and compile it into a node-local kubeadm patch. Carry local intent through generation metadata so online reconciliation never uploads the overlay cluster-wide, and expose the effective input through validation, schema, resolve, diff, and operator documentation.
Zariel
enabled auto-merge (squash)
August 5, 2026 21:09
Zariel
disabled auto-merge
August 5, 2026 21:09
Greptile SummaryThe PR adds bounded per-node native kubelet configuration and carries its node-local mode through bundle compilation, inventory, and kubeadm-aware application without updating shared cluster configuration.
Confidence Score: 5/5The PR appears safe to merge because the previously reported compatibility regression is fixed and no blocking failure remains. No blocking failure remains; absent node-local kubelet metadata now retains the historical false behavior, and focused regression coverage exercises that contract.
|
| Filename | Overview |
|---|---|
| internal/installer/configbundle/consume.go | Decodes node-local kubelet metadata while correctly defaulting an absent annotation to the legacy non-node-local behavior. |
| internal/installer/configbundle/bundle.go | Packages node-specific kubeadm input and consistently records whether its kubelet configuration is node-local. |
| internal/installer/configbundle/kubeadm.go | Builds bounded per-node kubelet plans and generated kubeadm patch material. |
| internal/installer/clusterplan/compile.go | Propagates the selected node-local kubelet mode into compiled inventory. |
| internal/katlc/agent/kubeadm_control_plane_config.go | Applies node-local kubelet changes through kubeadm patches while enforcing request and active-generation consistency. |
| cmd/katlctl/kubeadm_control_plane_config.go | Marks node-local kubelet operations and suppresses coordinator upload for that mode. |
| internal/installer/configbundle/bundle_test.go | Covers per-node kubelet bundle generation, validation, and compatibility with missing legacy annotations. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart LR
A[Node kubelet configFile] --> B[Validate native KubeletConfiguration]
B --> C[Compile node-specific kubeadm plan]
C --> D[Bundle annotation and inventory flag]
D --> E[Node-local kubeadm patch path]
E --> F[Refresh local kubelet configuration]
F --> G[Restart kubelet and verify node health]
E -. no upload .-> H[Shared kubelet ConfigMap]
Reviews (2): Last reviewed commit: "config: default missing kubelet mode met..." | Re-trigger Greptile
Treat bundles that predate the node-local kubelet annotation as ordinary cluster-wide kubeadm inputs. Explicit malformed annotation values remain rejected, and a regression test covers the absent-field fallback.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Why
Specialized kubelet policy previously required cluster-wide native kubeadm configuration or writing Katl-owned runtime paths. This gives each node a supported upstream-native surface while preserving Katl's ownership and rollout safety boundaries.