Skip to content

Commit f8f5eda

Browse files
authored
Merge pull request #48463 from tkashem/kep-3926
add doc for new delete option ignoreStoreReadErrorWithClusterBreakingPotential
2 parents f0a0ab2 + f7cce0d commit f8f5eda

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
---
2+
title: AllowUnsafeMalformedObjectDeletion
3+
content_type: feature_gate
4+
_build:
5+
list: never
6+
render: false
7+
8+
stages:
9+
- stage: alpha
10+
defaultValue: false
11+
fromVersion: "1.32"
12+
---
13+
Enables the cluster operator to identify corrupt resource(s) using the **list**
14+
operation, and introduces an option `ignoreStoreReadErrorWithClusterBreakingPotential`
15+
that the operator can set to perform unsafe and force **delete** operation of
16+
such corrupt resource(s) using the Kubernetes API.

content/en/docs/reference/using-api/api-concepts.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -875,6 +875,41 @@ not vulnerable to ordering changes in the list.
875875

876876
Once the last finalizer is removed, the resource is actually removed from etcd.
877877

878+
### Force deletion
879+
880+
{{< feature-state feature_gate_name="AllowUnsafeMalformedObjectDeletion" >}}
881+
882+
{{< caution >}}
883+
This may break the workload associated with the resource being force deleted, if it
884+
relies on the normal deletion flow, so cluster breaking consequences may apply.
885+
{{< /caution >}}
886+
887+
By enabling the delete option `ignoreStoreReadErrorWithClusterBreakingPotential`, the
888+
user can perform an unsafe force **delete** operation of an undecryptable/corrupt
889+
resource. This option is behind an ALPHA feature gate, and it is disabled by
890+
default. In order to use this option, the cluster operator must enable the feature by
891+
setting the command line option `--feature-gates=AllowUnsafeMalformedObjectDeletion=true`.
892+
893+
{{< note >}}
894+
The user performing the force **delete** operation must have the privileges to do both
895+
the **delete** and **unsafe-delete-ignore-read-errors** verbs on the given resource.
896+
{{< /note >}}
897+
898+
A resource is considered corrupt if it can not be successfully retrieved from the
899+
storage due to a) transformation error (for example: decryption failure), or b) the object
900+
failed to decode. The API server first attempts a normal deletion, and if it fails with
901+
a _corrupt resource_ error then it triggers the force delete. A force **delete** operation
902+
is unsafe because it ignores finalizer constraints, and skips precondition checks.
903+
904+
The default value for this option is `false`, this maintains backward compatibility.
905+
For a **delete** request with `ignoreStoreReadErrorWithClusterBreakingPotential`
906+
set to `true`, the fields `dryRun`, `gracePeriodSeconds`, `orphanDependents`,
907+
`preconditions`, and `propagationPolicy` must be left unset.
908+
909+
{{< note >}}
910+
If the user issues a **delete** request with `ignoreStoreReadErrorWithClusterBreakingPotential`
911+
set to `true` on an otherwise readable resource, the API server aborts the request with an error.
912+
{{< /note >}}
878913

879914
## Single resource API
880915

0 commit comments

Comments
 (0)