Skip to content

Monitor MachinePool Health#1476

Merged
friegger merged 27 commits into
mainfrom
enh/1472-pool-health-on-standalone-ks
Jul 17, 2026
Merged

Monitor MachinePool Health#1476
friegger merged 27 commits into
mainfrom
enh/1472-pool-health-on-standalone-ks

Conversation

@friegger

@friegger friegger commented May 22, 2026

Copy link
Copy Markdown
Contributor
  1. A MachinePool lifecycle controller:

Implements machinepool-lifecycle-controller monitoring MachinePool health, with corresponding API additions for MachinePool/VolumePool/BucketPool conditions, codegen updates

  1. A pool health heartbeat runnable in the machinepoollet:

The poollet now actively reports pool liveness so the lifecycle controller can set pools whose poollets have gone away to Unknown. It also includes kustomizations adding the Lease namespace and RBAC adjustments. The MachinePoolHeartbeat, a ticker-driven Runnable that probes the IRI runtime via Status, renews the pool's Lease in ironcore-machinepool-lease, and patches Ready only when its value or observedGeneration actually changes. Errors on either sub-step are logged and retried on the next tick; the lifecycle controller's grace period absorbs short blips. Lease takeover from a previous holder is logged at Info. Contains app arguments that make the heartbeat intervals configurable, defaulting to the IEP-15 values.

  1. Lease namespaces and RBACs

Contributes to #1472

Summary by CodeRabbit

  • New Features

    • Machine pool lifecycle monitoring with configurable grace period to detect unresponsive pools
    • Heartbeat-based health checks that probe runtimes and reflect readiness into pool status
    • New Ready condition type for machine pools and automatic status transitions when health signals stall
    • Lease-based coordination so heartbeats drive centralized lease renewal and controller watches
  • Configuration

    • New namespace for machine pool lease coordination
    • New CLI flags to configure lifecycle grace period and heartbeat timings

apiserver and controller components now have:
- config/<component>/default/   - namespace+namePrefix only, emits no
                                  Namespace (used as a base)
- config/<component>/standalone/ - wraps default/ and adds the
                                  ironcore-system Namespace; use this for
                                  single-component deploys

Shared Namespace lives in config/namespaces/ironcore-system/. The combined
config/default and config/etcdless installs reference the bases and the
namespace kustomization directly, eliminating the previous
remove-namespace.yaml patch dance. Build output for both is byte-identical
to main (only kustomize deprecation-warning lines disappear, since the
patches that triggered them are gone).

The namespaces folder can be extended with additional namespaces, e.g. for
the pool leases.

Behavioral change for downstream consumers: users who previously ran
`kustomize build config/controller/default` for a complete deploy must
migrate to `config/controller/standalone`; same for
`config/apiserver/default` -> `config/apiserver/standalone` (or
`config/apiserver/standalone-etcdless` for the external-etcd variant).

Consumers must not apply namespace transformers in overlays, these
will fail once we have multiple namespaces.

The Makefile install/uninstall/deploy/undeploy targets are retargeted at
the standalone variants accordingly. hack/validate-kustomize.sh is also
made portable (GNU realpath --relative-to is unavailable on macOS).

Signed-off-by: Felix Riegger <felix.riegger@sap.com>
@friegger
friegger requested a review from a team May 22, 2026 12:54
@github-actions github-actions Bot added enhancement New feature or request size/XL labels May 22, 2026
This change mostly consists of three parts:
1. A MachinePool lifecycle controller:

Implements `machinepool-lifecycle-controller` monitoring MachinePool health, with corresponding API additions for MachinePool/VolumePool/BucketPool conditions, codegen updates

2. A pool health heartbeat runnable in the machinepoollet:

The poollet now actively reports pool liveness so the lifecycle controller can set pools whose poollets have gone away to Unknown. It also includes kustomizations adding the Lease namespace and RBAC adjustments.
The MachinePoolHeartbeat, a ticker-driven Runnable that probes the IRI runtime via Status, renews the pool's Lease in ironcore-machinepool-lease, and patches Ready only when its value or observedGeneration actually changes. Errors on either sub-step are logged and retried on the next tick; the lifecycle controller's grace period absorbs short blips. Lease takeover from a previous holder is logged at Info. Contains app arguments that make the heartbeat intervals configurable, defaulting to the IEP-15 values.

3. Lease namespaces and RBACs

Contributes to #1472

Signed-off-by: Felix Riegger <felix.riegger@sap.com>
@friegger
friegger force-pushed the enh/1472-pool-health-on-standalone-ks branch from 75d6863 to 20479ee Compare May 22, 2026 12:54
@friegger friegger changed the title This change mostly consists of three parts: Monitor MachinePool Health based on standalone kustomizations May 22, 2026
@hardikdr hardikdr added the area/iaas Issues related to IronCore IaaS development. label May 23, 2026
@hardikdr hardikdr added this to Roadmap May 23, 2026

@adracus adracus left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about the remaining pool health controllers / reconcilers? If we want to make this change only about machine pools, we should either remove everything else or add the rest.

Comment thread api/compute/v1alpha1/conditions_test.go
Comment thread internal/controllers/compute/machinepool_lifecycle_controller.go Outdated
Comment thread internal/controllers/compute/machinepool_lifecycle_controller.go Outdated
Comment thread poollet/machinepoollet/controllers/machinepool_heartbeat.go Outdated
friegger added 2 commits June 10, 2026 12:19
Signed-off-by: Felix Riegger <felix.riegger@sap.com>
Signed-off-by: Felix Riegger <felix.riegger@sap.com>
Base automatically changed from chore/add-standalone-kustomizations to main June 10, 2026 12:36
@coderabbitai

coderabbitai Bot commented Jun 10, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Machine pool health monitoring: adds a MachinePoolReady condition and LastUpdateTime, poollet heartbeat that probes runtime and maintains Leases, a lifecycle reconciler that marks stale pools Unknown after a grace period, and namespace/RBAC manifests plus tests and generated updates.

Changes

Machine pool health monitoring

Layer / File(s) Summary
Compute condition contract and helper behavior
api/compute/v1alpha1/common.go, api/compute/v1alpha1/machinepool_types.go, api/compute/v1alpha1/conditions.go, api/compute/v1alpha1/conditions_test.go, api/compute/v1alpha1/v1alpha1_suite_test.go, api/compute/v1alpha1/zz_generated.deepcopy.go, internal/apis/compute/machinepool_types.go, internal/apis/compute/v1alpha1/zz_generated.conversion.go, internal/apis/compute/zz_generated.deepcopy.go, client-go/applyconfigurations/compute/v1alpha1/machinepoolcondition.go, client-go/openapi/zz_generated.openapi.go
Introduces NamespaceMachinePoolLease constant and MachinePoolReady condition type, adds LastUpdateTime to MachinePoolCondition, implements FindMachinePoolCondition and SetMachinePoolCondition with timestamp semantics, and updates generated/internal surfaces.
Poollet heartbeat runnable and ready condition publishing
poollet/machinepoollet/controllers/machinepool_heartbeat.go, poollet/machinepoollet/controllers/machinepool_heartbeat_test.go, poollet/machinepoollet/controllers/machinepool_heartbeat_envtest_test.go, poollet/machinepoollet/controllers/machinepool_controller.go, poollet/machinepoollet/cmd/machinepoollet/app/app.go, poollet/machinepoollet/controllers/controllers_suite_test.go, poollet/machinepoollet/controllers/rbac.go
Adds MachinePoolHeartbeat runnable: probes IRI runtime, reconciles per-pool Lease, publishes probe results to MachinePoolReadyState, emits events on change, and wires heartbeat options and event-channel integration into the poollet reconciler. Includes unit and envtest coverage.
Lifecycle controller stale-health reconciliation
internal/controllers/compute/machinepool_lifecycle_controller.go, internal/controllers/compute/machinepool_lifecycle_controller_test.go, internal/controllers/compute/machinepool_lifecycle_controller_unit_test.go, internal/controllers/compute/suite_test.go, cmd/ironcore-controller-manager/main.go
Adds MachinePoolLifecycleReconciler with per-pool health cache comparing Lease.renewTime and MachinePoolReady; when neither updates for configured grace period, patches MachinePoolReady to Unknown (unless already Unknown). Wires controller flag and watches both MachinePool and Lease. Tests cover timed transitions and cache cleanup.
Lease namespace manifests and RBAC/deployment wiring
config/namespaces/machinepool-lease/namespace.yaml, config/namespaces/machinepool-lease/poollet_role.yaml, config/namespaces/machinepool-lease/poollet_rolebinding.yaml, config/namespaces/machinepool-lease/controller_role.yaml, config/namespaces/machinepool-lease/controller_rolebinding.yaml, config/namespaces/machinepool-lease/kustomization.yaml, config/machinepoollet-broker/poollet-rbac/role.yaml, config/apiserver/rbac/machinepool_role.yaml, config/default/kustomization.yaml, config/apiserver/standalone/kustomization.yaml, config/apiserver/standalone-etcdless/kustomization.yaml, config/controller/standalone/kustomization.yaml, config/etcdless/kustomization.yaml
Creates ironcore-machinepool-lease namespace, poollet/controller Roles and RoleBindings for leases, updates broker role, and includes the namespace in deployment kustomizations.
Dependency and codegen script adjustments
go.mod, hack/update-codegen.sh
Moves github.com/google/uuid to direct dependency and removes -- from chmod invocation in codegen script.

Sequence Diagram(s)

sequenceDiagram
  participant Poollet as MachinePoollet
  participant IRI as IRI Runtime
  participant ReadyState as MachinePoolReadyState
  participant Events as Event Channel
  participant Lease as Lease Storage

  Poollet->>IRI: Status probe (with timeout)
  IRI-->>Poollet: probe result (success/error)
  Poollet->>ReadyState: Set(probeErr)
  alt probe error changed
    ReadyState-->>Poollet: changed=true
    Poollet->>Events: emit GenericEvent for MachinePool
  else probe error unchanged
    ReadyState-->>Poollet: changed=false
  end
  Poollet->>Lease: reconcileLease (create/update renewTime)
  Lease-->>Poollet: Lease created/updated
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related issues

Suggested reviewers

  • afritzler
  • lukasfrank
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 32.26% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title is concise and matches the main change: monitoring MachinePool health.
Description check ✅ Passed The description covers the main changes and issue reference, but it does not follow the required Proposed Changes/Fixes # template exactly.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch enh/1472-pool-health-on-standalone-ks

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

♻️ Duplicate comments (1)
internal/controllers/compute/machinepool_lifecycle_controller.go (1)

44-46: ⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

Memory leak: clean up healthData when MachinePool is deleted.

When a MachinePool is deleted, client.IgnoreNotFound(err) returns without removing the corresponding entry from the r.healthData map. Over time, this will cause the map to accumulate stale entries for deleted pools, leading to a memory leak.

As per the past review comment from adracus, you should free the health data when the machine pool is not found.

🛠️ Proposed fix
 func (r *MachinePoolLifecycleReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
 	log := ctrl.LoggerFrom(ctx)
 
 	machinePool := &computev1alpha1.MachinePool{}
 	if err := r.Get(ctx, req.NamespacedName, machinePool); err != nil {
+		if apierrors.IsNotFound(err) {
+			r.healthDataMu.Lock()
+			delete(r.healthData, req.Name)
+			r.healthDataMu.Unlock()
+		}
 		return ctrl.Result{}, client.IgnoreNotFound(err)
 	}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/controllers/compute/machinepool_lifecycle_controller.go` around
lines 44 - 46, The current Reconcile branch returns client.IgnoreNotFound(err)
after r.Get and thus never cleans up r.healthData for deleted MachinePools;
modify the error handling so that when r.Get returns a NotFound error (use
apierrors.IsNotFound(err) or check client.IgnoreNotFound result), you remove the
corresponding entry from r.healthData using req.NamespacedName (or its string
form) as the key, then return ctrl.Result{} and nil (or the ignored-not-found
result). Keep the rest of the error path unchanged for non-NotFound errors.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@client-go/openapi/api_violations.report`:
- Line 42: The Conditions slice in BucketPoolStatus lacks explicit list
semantics; add kubebuilder markers above the Conditions field in
api/storage/v1alpha1/bucketpool_types.go (e.g., annotate
BucketPoolStatus.Conditions with +listType=map and +listMapKey=type) so the list
is treated as a map keyed by condition Type, then run the CRD/OpenAPI generation
step to regenerate the openapi/report artifacts.

In `@poollet/machinepoollet/controllers/machinepool_heartbeat_test.go`:
- Around line 56-58: The test titled "ignores LastUpdateTime and
LastTransitionTime" currently compares an unchanged copy; update it so desired
mutates the condition timestamps before asserting: create desired := base (value
copy) then modify desired.Status.Conditions[*].LastUpdateTime and
LastTransitionTime (or at least one condition) to different non-zero values
(e.g., time.Now() or a different metav1.Time) and then call
controllers.ReadyConditionsDiffer(&base, desired) and Expect(...).To(BeFalse())
to ensure timestamp differences are ignored; reference ReadyConditionsDiffer,
base, desired, LastUpdateTime and LastTransitionTime to locate the change.

---

Duplicate comments:
In `@internal/controllers/compute/machinepool_lifecycle_controller.go`:
- Around line 44-46: The current Reconcile branch returns
client.IgnoreNotFound(err) after r.Get and thus never cleans up r.healthData for
deleted MachinePools; modify the error handling so that when r.Get returns a
NotFound error (use apierrors.IsNotFound(err) or check client.IgnoreNotFound
result), you remove the corresponding entry from r.healthData using
req.NamespacedName (or its string form) as the key, then return ctrl.Result{}
and nil (or the ignored-not-found result). Keep the rest of the error path
unchanged for non-NotFound errors.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 5d7b923a-79b4-4d83-aee3-392f96b423a5

📥 Commits

Reviewing files that changed from the base of the PR and between 455f76c and 5e558bc.

📒 Files selected for processing (49)
  • api/compute/v1alpha1/common.go
  • api/compute/v1alpha1/conditions.go
  • api/compute/v1alpha1/conditions_test.go
  • api/compute/v1alpha1/machinepool_types.go
  • api/compute/v1alpha1/v1alpha1_suite_test.go
  • api/compute/v1alpha1/zz_generated.deepcopy.go
  • api/storage/v1alpha1/bucketpool_types.go
  • api/storage/v1alpha1/common.go
  • api/storage/v1alpha1/volumepool_types.go
  • api/storage/v1alpha1/zz_generated.deepcopy.go
  • api/storage/v1alpha1/zz_generated.model_name.go
  • client-go/applyconfigurations/compute/v1alpha1/machinepoolcondition.go
  • client-go/applyconfigurations/storage/v1alpha1/bucketpoolcondition.go
  • client-go/applyconfigurations/storage/v1alpha1/bucketpoolstatus.go
  • client-go/applyconfigurations/storage/v1alpha1/volumepoolcondition.go
  • client-go/applyconfigurations/utils.go
  • client-go/openapi/api_violations.report
  • client-go/openapi/zz_generated.openapi.go
  • cmd/ironcore-controller-manager/main.go
  • config/apiserver/standalone-etcdless/kustomization.yaml
  • config/apiserver/standalone/kustomization.yaml
  • config/controller/standalone/kustomization.yaml
  • config/default/kustomization.yaml
  • config/etcdless/kustomization.yaml
  • config/machinepoollet-broker/poollet-rbac/role.yaml
  • config/namespaces/machinepool-lease/controller_role.yaml
  • config/namespaces/machinepool-lease/controller_rolebinding.yaml
  • config/namespaces/machinepool-lease/kustomization.yaml
  • config/namespaces/machinepool-lease/namespace.yaml
  • config/namespaces/machinepool-lease/poollet_role.yaml
  • config/namespaces/machinepool-lease/poollet_rolebinding.yaml
  • go.mod
  • hack/update-codegen.sh
  • internal/apis/compute/machinepool_types.go
  • internal/apis/compute/v1alpha1/zz_generated.conversion.go
  • internal/apis/compute/zz_generated.deepcopy.go
  • internal/apis/storage/bucketpool_types.go
  • internal/apis/storage/v1alpha1/zz_generated.conversion.go
  • internal/apis/storage/volumepool_types.go
  • internal/apis/storage/zz_generated.deepcopy.go
  • internal/controllers/compute/machinepool_lifecycle_controller.go
  • internal/controllers/compute/machinepool_lifecycle_controller_test.go
  • internal/controllers/compute/suite_test.go
  • poollet/machinepoollet/cmd/machinepoollet/app/app.go
  • poollet/machinepoollet/controllers/controllers_suite_test.go
  • poollet/machinepoollet/controllers/machinepool_heartbeat.go
  • poollet/machinepoollet/controllers/machinepool_heartbeat_envtest_test.go
  • poollet/machinepoollet/controllers/machinepool_heartbeat_test.go
  • poollet/machinepoollet/controllers/rbac.go

Comment thread client-go/openapi/api_violations.report Outdated
Comment thread poollet/machinepoollet/controllers/machinepool_heartbeat_test.go Outdated
friegger added 4 commits June 10, 2026 16:23
Signed-off-by: Felix Riegger <felix.riegger@sap.com>
The MachinePoolReconciler already owns the rest of MachinePool.Status, so it
should also own the Ready condition. The MachinePoolHeartbeat keeps the IRI
Status probe and the Lease, and now publishes its latest probe result through a
new thread-safe MachinePoolReadyState. When the result changes, the heartbeat
sends a GenericEvent on a channel that the reconciler watches via source.Channel;
the reconciler reads the state in its existing updateStatus and merges the desired
condition into the single status patch.

Per code-review feedback on the original heartbeat implementation:
the heartbeat used to write the condition itself, which made it the second
poollet-side writer of MachinePool.Status. Single-writer-per-status-field is the
cleaner default.

Tests: the envtest now registers a MachinePoolReconciler alongside the heartbeat
so the new path is exercised end-to-end. Adds unit tests for MachinePoolReadyState
pinning the changed-detection behaviour the heartbeat relies on for event suppression.

Signed-off-by: Felix Riegger <felix.riegger@sap.com>
These API additions were introduced together with the MachinePool health work but are not yet used by any controller. Removing them keeps the MachinePool health change shippable on its own; the VolumePool/BucketPool conditions are parked on the parked/volumepool-bucketpool-conditions branch for later.

This reverts only the storage API and generated-code portions of 20479ee while keeping all MachinePool-related changes (lifecycle controller, heartbeat, MachinePoolCondition.LastUpdateTime, lease namespace, etc.).

Signed-off-by: Felix Riegger <felix.riegger@sap.com>
Pick up the ironcore-machinepool-lease Role into config/apiserver/rbac/machinepool_role.yaml. This was missed when the kubebuilder marker for the lease RBAC was added in 20479ee ("Implement Machine Pool Health checks"); make test regenerates it via the generate-rbac-aggregator rule.

Signed-off-by: Felix Riegger <felix.riegger@sap.com>
@friegger
friegger force-pushed the enh/1472-pool-health-on-standalone-ks branch from 849569e to 2dd3b0a Compare June 12, 2026 12:19
friegger added 2 commits June 30, 2026 08:52
Signed-off-by: Felix Riegger <felix.riegger@sap.com>
Signed-off-by: Felix Riegger <felix.riegger@sap.com>
friegger added 5 commits June 30, 2026 10:49
Signed-off-by: Felix Riegger <felix.riegger@sap.com>
Signed-off-by: Felix Riegger <felix.riegger@sap.com>
Signed-off-by: Felix Riegger <felix.riegger@sap.com>
Signed-off-by: Felix Riegger <felix.riegger@sap.com>
@friegger friegger self-assigned this Jul 2, 2026
@friegger friegger removed this from Roadmap Jul 2, 2026
@friegger friegger linked an issue Jul 3, 2026 that may be closed by this pull request
7 tasks
@friegger

Copy link
Copy Markdown
Contributor Author

What about the remaining pool health controllers / reconcilers? If we want to make this change only about machine pools, we should either remove everything else or add the rest.

Volume and Bucket changes have been removed from this PR.

@lukasfrank lukasfrank left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you also please update the PR title and description.
For me it's not clear what based on standalone kustomizations means.

Comment thread internal/controllers/compute/machinepool_lifecycle_controller.go Outdated
Comment thread internal/controllers/compute/machinepool_lifecycle_controller.go Outdated
Comment thread internal/controllers/compute/machinepool_lifecycle_controller.go Outdated
Comment thread internal/controllers/compute/machinepool_lifecycle_controller.go Outdated
Comment thread internal/controllers/compute/machinepool_lifecycle_controller.go Outdated
@friegger friegger changed the title Monitor MachinePool Health based on standalone kustomizations Monitor MachinePool Health Jul 13, 2026
Signed-off-by: Felix Riegger <felix.riegger@sap.com>
@friegger
friegger requested a review from a team as a code owner July 15, 2026 08:18
friegger added 4 commits July 15, 2026 10:19
…on-standalone-ks

Signed-off-by: Felix Riegger <felix.riegger@sap.com>
Signed-off-by: Felix Riegger <felix.riegger@sap.com>
Signed-off-by: Felix Riegger <felix.riegger@sap.com>
Signed-off-by: Felix Riegger <felix.riegger@sap.com>

@lukasfrank lukasfrank left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you also please use komega for the tests.

Comment thread .github/workflows/publish-docker.yml
Comment thread internal/controllers/compute/machinepool_lifecycle_controller.go Outdated
friegger and others added 4 commits July 17, 2026 12:43
Co-authored-by: Lukas Frank <lukasfrank@users.noreply.github.com>
Signed-off-by: Felix Riegger <felix.riegger@sap.com>
…on-standalone-ks

Signed-off-by: Felix Riegger <felix.riegger@sap.com>
Signed-off-by: Felix Riegger <felix.riegger@sap.com>
Signed-off-by: Felix Riegger <felix.riegger@sap.com>
@lukasfrank lukasfrank changed the title Monitor MachinePool Health Monitor MachinePool Health Jul 17, 2026

@lukasfrank lukasfrank left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Many thanks for the great work! LGTM

@friegger
friegger merged commit ddcdb76 into main Jul 17, 2026
21 checks passed
@friegger
friegger deleted the enh/1472-pool-health-on-standalone-ks branch July 17, 2026 12:37
@friegger friegger mentioned this pull request Jul 20, 2026
7 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/iaas Issues related to IronCore IaaS development. enhancement New feature or request ok-to-image size/XL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Implement Pool Health Proposal

4 participants