Skip to content

Commit f7cce0d

Browse files
committed
add doc for new delete option ignoreStoreReadErrorWithClusterBreakingPotential
1 parent d00b46e commit f7cce0d

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
@@ -847,6 +847,41 @@ not vulnerable to ordering changes in the list.
847847

848848
Once the last finalizer is removed, the resource is actually removed from etcd.
849849

850+
### Force deletion
851+
852+
{{< feature-state feature_gate_name="AllowUnsafeMalformedObjectDeletion" >}}
853+
854+
{{< caution >}}
855+
This may break the workload associated with the resource being force deleted, if it
856+
relies on the normal deletion flow, so cluster breaking consequences may apply.
857+
{{< /caution >}}
858+
859+
By enabling the delete option `ignoreStoreReadErrorWithClusterBreakingPotential`, the
860+
user can perform an unsafe force **delete** operation of an undecryptable/corrupt
861+
resource. This option is behind an ALPHA feature gate, and it is disabled by
862+
default. In order to use this option, the cluster operator must enable the feature by
863+
setting the command line option `--feature-gates=AllowUnsafeMalformedObjectDeletion=true`.
864+
865+
{{< note >}}
866+
The user performing the force **delete** operation must have the privileges to do both
867+
the **delete** and **unsafe-delete-ignore-read-errors** verbs on the given resource.
868+
{{< /note >}}
869+
870+
A resource is considered corrupt if it can not be successfully retrieved from the
871+
storage due to a) transformation error (for example: decryption failure), or b) the object
872+
failed to decode. The API server first attempts a normal deletion, and if it fails with
873+
a _corrupt resource_ error then it triggers the force delete. A force **delete** operation
874+
is unsafe because it ignores finalizer constraints, and skips precondition checks.
875+
876+
The default value for this option is `false`, this maintains backward compatibility.
877+
For a **delete** request with `ignoreStoreReadErrorWithClusterBreakingPotential`
878+
set to `true`, the fields `dryRun`, `gracePeriodSeconds`, `orphanDependents`,
879+
`preconditions`, and `propagationPolicy` must be left unset.
880+
881+
{{< note >}}
882+
If the user issues a **delete** request with `ignoreStoreReadErrorWithClusterBreakingPotential`
883+
set to `true` on an otherwise readable resource, the API server aborts the request with an error.
884+
{{< /note >}}
850885

851886
## Single resource API
852887

0 commit comments

Comments
 (0)