写了一个小工具,在Get k8s 资源的yaml只看自己改过的配置参数,过滤默认的以及附加的参数

kubeclean:告别 kubectl 输出的噪音

用过 kubectl get deploy nginx -o yaml 的人都懂那种感受------你只想看看这个 Deployment 到底配了什么,结果屏幕上刷出来一大堆 managedFieldsresourceVersionuidstatus......真正有用的配置淹没在几百行系统字段里。

kubeclean 就是为了解决这个问题而生的。


它做什么

kubeclean 是一个轻量的命令行工具,专门用来清理 kubectl 输出中的冗余字段,只保留你实际定义的配置内容。

一个典型的例子,清理前:

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  uid: 12345678-abcd-efgh-ijkl-mnopqrstuvwx
  resourceVersion: "12345"
  creationTimestamp: "2024-01-01T00:00:00Z"
  managedFields:
    - manager: kubectl
      operation: Apply
      # ... 几十行
  annotations:
    helm.sh/chart: nginx-1.0.0
spec:
  template:
    spec:
      containers:
        - name: nginx
          image: nginx:1.21
          imagePullPolicy: IfNotPresent
          terminationMessagePath: /dev/termination-log
      dnsPolicy: ClusterFirst
      restartPolicy: Always
status:
  replicas: 1
  # ... 更多状态字段

执行 kubectl get deploy nginx -o yaml | kubeclean -A 之后:

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  template:
    spec:
      containers:
        - name: nginx
          image: nginx:1.21

干净了。


安装

GitHub Releases 下载对应平台的二进制文件,支持:

  • Linux amd64 / arm64
  • macOS amd64 / arm64
  • Windows amd64

或者本地编译:

bash 复制代码
git clone https://github.com/your-repo/kubeclean
cd kubeclean
go build -o kubeclean .

快速上手

最常用的方式,管道直接接 kubectl:

bash 复制代码
kubectl get deploy nginx -o yaml | kubeclean -A

也可以清理本地文件:

bash 复制代码
kubeclean -A deployment.yaml

多个文件一起处理:

bash 复制代码
kubeclean -A deploy.yaml service.yaml ingress.yaml

输出为 JSON:

bash 复制代码
kubectl get deploy nginx -o yaml | kubeclean -A -o json

过滤器

-A 是一键启用所有过滤器,也可以按需组合:

参数 说明
-m / --meta 清理 uid、resourceVersion、managedFields 等系统元数据
-s / --status 清理整个 status 字段
-d / --defaults 清理 K8s 自动填充的默认值(dnsPolicy、restartPolicy 等)
-H / --helm 清理 Helm 相关标记(helm.sh/meta.helm.sh/
-r / --rke 清理 RKE/Rancher 相关标记(cattle.io/*)
-A / --all 启用以上所有过滤器

比如只想去掉元数据和状态,保留其他字段:

bash 复制代码
kubeclean -m -s deployment.yaml

配置文件

如果每次都要敲同样的参数,可以用配置文件固定默认行为。

在当前目录或 ~/.kubeclean.yaml 创建配置:

yaml 复制代码
# 默认启用的过滤器(不传参数时生效)
defaults:
  - meta
  - status

# 自定义过滤规则
custom:
  annotations:
    - "kubectl.kubernetes.io/*"   # 前缀匹配
  labels:
    - "pod-template-hash"         # 精确匹配

配置好之后,直接 kubeclean deployment.yaml 就会按默认规则处理,不需要每次带参数。

匹配模式支持:

  • prefix* 前缀匹配
  • *suffix 后缀匹配
  • 其他字符串精确匹配

项目地址:https://github.com/s-infinite-box/kubeclean/releases


后记:

项目主体基本由AI编写,当然也包括这片博客;

项目有github完整的workflow,每次push tag且是v*的格式就会自动发布release,我也是通过这个项目来学习了一下;

大家有需要可以拿去再搞搞🤣

相关推荐
赵渝强老师1 小时前
【赵渝强老师】Kubernetes(K8s)中的金丝雀升级
linux·docker·云原生·容器·kubernetes
鹤落晴春1 小时前
【K8s】配置存储卷
云原生·容器·kubernetes
张忠琳3 小时前
【client-go v0.36.1】(DeltaFIFO Part 1)DeltaFIFO 超深度分析 — 模块定位、类结构、接口层次、构造与初始化
云原生·kubernetes·deltafifo·informer·client-go
原来是猿4 小时前
Docker 【 技术架构(1)】
docker·容器·架构
阿里云云原生4 小时前
实战揭秘:如何通过 AI Agent Skill 让 K8s 应用自动接入云监控?
云原生
ba_pi4 小时前
k8s删除pod
linux·容器·kubernetes
木雷坞4 小时前
Qdrant Docker 部署教程:数据卷、API Key 和集合初始化
运维·docker·容器·知识图谱
张忠琳6 小时前
【client-go v0.36.1】tools/cache 深度分析(下篇)— RealFIFO 深度、集成架构、生命周期、设计模式总结
云原生·kubernetes·cache·informer·client-go
张忠琳7 小时前
【client-go v0.36.1】(store Part 2)Store 超深度分析 — threadSafeMap 核心、索引体系、RV追踪、事务机制
云原生·kubernetes·informer·store·client-go
sbjdhjd8 小时前
04(上)| k8s中的微服务
微服务·云原生·kubernetes·开源·云计算·excel·kubelet