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

如何查询OpenShift/Kubernetes部署资源的修改历史记录

如何查询OpenShift/Kubernetes集群资源的操作修改历史

可通过以下几种方式查询资源修改记录,覆盖操作人、修改内容、操作时间等核心信息:

1. 审计日志(最全面方案)

所有发送到kube-apiserver的请求都会被审计日志完整记录,包括oc apply/kubectl apply操作、组件自动触发的配置修改、ServiceAccount发起的请求都可以查到,核心记录字段包含操作人(普通用户/ServiceAccount/系统组件)、请求动作(create/update/patch/delete)、操作资源的类型/名称/命名空间、修改前后完整payload、操作时间戳。

OpenShift 4.x默认开启审计日志,可直接通过命令查询控制面节点的审计日志:

# 查询最近1小时内所有Deployment资源的更新操作
oc adm node-logs --role master --path=/var/log/kube-apiserver/audit.log | grep '"operation":"UPDATE"' | grep '"resource":"deployments"' | grep "$(date -d '-1 hour' +%Y-%m-%dT%H:%M:%S)"

如果集群部署了默认的集群日志栈(EFK),可以直接在日志控制台过滤audit.k8s.io类日志,按资源、用户、时间维度筛选即可快速定位目标操作。

2. 资源修订版本历史

针对Deployment、StatefulSet、DaemonSet这类支持回滚的工作负载资源,Kubernetes默认会保留最近的配置修订版本,可直接查询配置差异定位修改内容:

# 查看指定Deployment的所有修订版本
oc rollout history deployment/<部署名称> -n <命名空间>

# 查看某一具体修订版本的完整配置内容
oc rollout history deployment/<部署名称> -n <命名空间> --revision=2

需要对比两个版本的配置差异可以直接用diff工具:

diff <(oc rollout history deployment/<部署名称> --revision=1 -o yaml) <(oc rollout history deployment/<部署名称> --revision=2 -o yaml)

注意:该方法仅能查到修改后的配置内容,无法直接获取操作人信息,需要结合审计日志对应时间点匹配操作主体,默认保留的修订版本数量由资源的revisionHistoryLimit字段控制,默认值为10

3. 集群事件查询

集群事件会记录最近1小时(部分集群会调整为24小时)的资源变更操作,信息密度低于审计日志,但可以快速定位异常修改的时间点和触发源:

# 查询指定命名空间下所有事件,按时间升序排序
oc get events -n <命名空间> --sort-by='.lastTimestamp'

如果是HPA、KEDA等扩缩容组件触发的副本数调整,事件中会直接显示对应的触发主体,无需查询审计日志即可快速区分是人为操作还是组件自动操作。

额外排查建议

如果确认所有团队成员都没有主动发起操作,优先排查以下场景:

  • 是否有CI/CD流水线、GitOps工具(如Argo CD)的ServiceAccount自动同步配置
  • 是否开启了HPA、自定义扩缩容策略,触发了自动副本数调整
  • 对应资源是否被Operator管控,集群内置Operator或自定义Operator会自动修正不符合预期的资源配置,可能出现配置被自动覆盖的情况
  • 若出现凭证类资源(Secret、ServiceAccount)被删除或修改,优先检查资源的OwnerReference字段,关联的上层资源删除时会级联删除关联的凭证资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:45:03