You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kubernetes中阻止Pod手动删除但允许Deployment/StatefulSet扩缩容?

实现目标的Kyverno策略方案

完全可以通过Kyverno实现“阻止手动删除Pod,但允许Deployment/StatefulSet扩缩容”的需求,核心是区分用户手动发起的Pod删除请求和控制器(Deployment/StatefulSet)触发的Pod删除请求,同时单独允许控制器的扩缩容操作。

核心逻辑

  • 扩缩容操作是针对Deployment/StatefulSet资源的UPDATE请求(修改spec.replicas字段),需要单独允许这类操作。
  • 用户手动删除Pod是直接针对Pod资源的DELETE请求,需要拦截;而控制器因扩缩容删除Pod时,请求由集群控制器服务账号发起,需排除这类请求。

具体策略示例

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: block-manual-pod-deletion-allow-controller-scale
spec:
  validationFailureAction: Enforce
  rules:
  # 规则1:允许Deployment/StatefulSet的扩缩容操作
  - name: allow-controller-scale
    match:
      any:
      - resources:
          kinds:
          - Deployment
          - StatefulSet
          operations:
          - UPDATE
    validate:
      message: "仅允许修改副本数(扩缩容)操作"
      pattern:
        spec:
          replicas: "?*"
  # 规则2:阻止手动删除Pod,仅允许控制器发起的删除
  - name: block-manual-pod-delete
    match:
      any:
      - resources:
          kinds:
          - Pod
          operations:
          - DELETE
    exclude:
      any:
      # 排除集群控制器发起的请求,需根据实际集群调整账号
      - userInfo:
          username: "system:kube-controller-manager"
      # 可选:允许集群管理员删除Pod,用于紧急场景
      - userInfo:
          groups:
          - "system:masters"
    validate:
      message: "禁止手动删除Pod,仅允许Deployment/StatefulSet控制器执行该操作"
      deny: {}

关键说明

  1. 关于扩缩容的规则:
    该规则仅允许修改Deployment/StatefulSet的spec.replicas字段,若需要允许其他合法操作(如滚动更新镜像),可调整pattern字段,比如添加spec.template的匹配。

  2. 关于控制器账号的确认:
    不同集群的控制器服务账号可能存在差异,可通过以下命令查看Pod的管理控制器账号:

    kubectl get pod <目标Pod名称> -o jsonpath='{.metadata.managedFields[*].manager}'
    

    若输出为kube-controller-manager,则策略中的username填system:kube-controller-manager即可。

  3. 关于手动删除的拦截:
    单独配置Pod的DELETE拦截规则是必须的——允许扩缩容的策略只会管控Deployment/StatefulSet的操作,不会默认拦截Pod的删除请求,两者是独立的规则逻辑。

更优实现建议

  • 如果集群中存在其他需要删除Pod的控制器(如DaemonSet、Job),可在exclude列表中添加对应控制器的服务账号,避免误拦截。
  • 若需要更精细的管控,可结合Pod的ownerReferences字段,仅允许删除属于Deployment/StatefulSet的Pod(但此方式无法区分用户手动删除和控制器删除,需配合账号验证)。

内容的提问来源于stack exchange,提问作者Lucian Negru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 04:06:02