# 错误：升级失败：无法修补 "my-release"（类型 Deployment）：Deployment.apps "my-release" 无效：spec.selector：无效值：v1.LabelSelector{...}：字段不可变

- **ID:** `kubernetes/helm-upgrade-failed-dry-run`
- **领域:** kubernetes
- **类别:** config_error
- **验证级别:** ai_generated
- **修复率:** 85%

## 根因

Helm 升级尝试修改现有 Deployment 上的不可变字段（例如 spec.selector），这是 Kubernetes API 不允许的。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| helm 3.12 | active | — | — |
| kubernetes 1.27 | active | — | — |
| helm 3.13 | active | — | — |

## 解决方案

1. ```
   运行 `kubectl delete deployment my-release` 删除 Deployment，然后执行 `helm upgrade --install my-release ./chart` 使用新选择器重新创建。
   ```
2. ```
   如果选择器更改是意外的，回滚：`helm rollback my-release <revision>` 到更改前的版本，然后修改 chart 以避免不可变字段更改。
   ```

## 无效尝试

- **** — The --force flag in Helm only recreates resources if the release name changes, but does not bypass immutable field validation on existing resources. (80% 失败率)
- **** — Editing the selector after creation is also rejected by the API; the field is immutable for all operations. (90% 失败率)
- **** — The old Deployment persists and still has the immutable field; Helm will try to patch it again. (70% 失败率)
