kubernetes-sigs/cluster-api

Consistently propagate down timeouts from MD => MS => Machines

开放

#10,753 创建于 2024年6月13日

 (8 条评论) (1 个反应) (1 位负责人)Go (1,532 个派生)auto 404
area/machinedeploymentarea/machinesethelp wantedpriority/important-longtermtriage/accepted

仓库指标

星标
 (4,267 个星标)
PR 合并指标
 (PR 指标待抓取)

描述

Goal

Goal of this issue is to consistently propagate down timeouts (NodeDrainTimeout, NodeDeletionTimeout, ...) from MDs to MSs to Machines. This is desirable so that users can still change timeouts even if a Machine is e.g. stuck in draining.

We had a first PR which ensures a MachineSet propagates down the timeouts to Machines which are in deleting: https://github.com/kubernetes-sigs/cluster-api/pull/10589

But there are a few other cases, as described here: https://github.com/kubernetes-sigs/cluster-api/pull/10589 (inlining below for convenience)

The following specifically focuses on cases where Machines are deleted by the MS controller.

Case 1. MD is deleted

The following happens:

  • MD goes away
  • ownerRef triggers MS deletion
  • MS goes away
  • ownerRef triggers Machine deletion

=> The MS will already be gone when the deletionTimestamp is set on the Machines. In this case folks would have to modify the timestamps on each Machine individually. Because the MS doesn't exist anymore it's not possible to propagate down timeouts from the MS to Machines

Case 2. MD is scaled down to 0

The following happens:

  • MD scales down MS to 0
  • MS deletes Machine

This use case was addressed by: https://github.com/kubernetes-sigs/cluster-api/pull/10589

Case 3. MD rollout

The following happens:

  • Someone updates the MD (e.g. bump the Kubernetes version)
  • MD creates a new MS and scales it up
  • In parallel MD scales down the old MS to 0

=> In this scenario today the MD controller does not propagate the timeouts from MD to all MS (only to the new/current one, not to the old ones). So the Machines of the old MS won't get new timeouts set in the MD

Implementation

To address all scenarios I would propose to always propagate timeouts from MD => MS => Machine. To make that happen we have to implement the following:

Follow-up:

  • We should also check other objects like Cluster (topology), KCP, ...

贡献者指南