前言
在使用 kubectl get $KIND -o yaml 查看 k8s 资源时,输出结果中包含大量由集群自动生成的元数据(如 managedFields、resourceVersion、uid 等)。这些信息在实际复用 yaml 清单时需要手动清理,增加了额外的工作量。
使用 kubectl-neat 插件,可以自动移除这些由集群生成的冗余字段,仅保留有意义的内容,使 yaml 更加简洁,方便复用。
安装
插件方式安装
bash
kubectl krew install neat
## 作为 kubectl 插件安装,使用方式为:
kubectl neat
二进制方式安装
bash
## 版本选择:
## https://github.com/itaysk/kubectl-neat/releases
## 当前环境为 ubuntu 2404 LTS
wget https://github.com/itaysk/kubectl-neat/releases/download/v2.0.4/kubectl-neat_linux_amd64.tar.gz
tar xf kubectl-neat_linux_amd64.tar.gz
mv ./kubectl-neat /usr/local/bin/
## 创建别名(这里看个人习惯)
vim /root/.bashrc
alias kneat='kubectl-neat'
使用
本次使用二进制方式部署,实际上参数是相同的,没区别
bash
root@network-demo:~# kubectl-neat help
Usage:
kubectl-neat [flags]
kubectl-neat [command]
## 示例是通过 kubectl plugin 方式安装,使用二进制安装改成 kubectl-neat 就好
Examples:
kubectl get pod mypod -o yaml | kubectl neat
kubectl get pod mypod -oyaml | kubectl neat -o json
kubectl neat -f - <./my-pod.json
kubectl neat -f ./my-pod.json
kubectl neat -f ./my-pod.json --output yaml
Available Commands:
## 自动补全命令用的
completion Generate the autocompletion script for the specified shell
get
help Help about any command
version Print kubectl-neat version
Flags:
-f, --file string file path to neat, or - to read from stdin (default "-")
-h, --help help for kubectl-neat
-o, --output string output format: yaml or json (default "yaml")
命令补全
简单来说就是按两下 tab 后自动补充没拼完的参数
💡 注:其实没啥用...他只能补全命令本身的参数,并不能补全 k8s 相关信息
bash
root@network-demo:~# kubectl-neat completion --help
Generate the autocompletion script for kubectl-neat for the specified shell.
See each sub-command's help for details on how to use the generated script.
Usage:
kubectl-neat completion [command]
Available Commands:
bash Generate the autocompletion script for bash
fish Generate the autocompletion script for fish
powershell Generate the autocompletion script for powershell
zsh Generate the autocompletion script for zsh
Flags:
-h, --help help for completion
Global Flags:
-o, --output string output format: yaml or json (default "yaml")
bash
## 当前环境使用 bash
root@network-demo:~# hostnamectl
Static hostname: network-demo
Icon name: computer-vm
Chassis: vm
Virtualization: kvm
Operating System: Ubuntu 24.04.3 LTS
Kernel: Linux 6.8.0-88-generic
Architecture: x86-64
## 添加命令补全
echo "source <(kneat completion bash)" >> ~/.bashrc && source ~/.bashrc
## 查看效果
## 上面说没啥用的地方就在这...实际上能用的参数只有 get(kubectl-neat 自己的参数)
## 当你补全 get 后就会发现他无法识别 k8s 资源
root@network-demo:~# kubectl-neat
completion (Generate the autocompletion script for the specified shell) help (Help about any command)
get version (Print kubectl-neat version)
使用方式
bash
## 这里我直接将 kubectl get -o yaml 与 kubectl-neat get -o yaml 输出对比
kubectl-neat get -- pods -n deepflow deepflow-server-fc484c85-p67gl -o yaml > /root/deepflow-kneat.yaml
kubectl get pods -n deepflow deepflow-server-fc484c85-p67gl -o yaml > deepflow-kubectl.yaml
yaml
## 通过 icdiff 输出两个文件的对比结果,这里为了方便大家看,只把删除的内容放上来了
root@network-demo:~# icdiff deepflow-kubectl.yaml deepflow-kneat.yaml
creationTimestamp: "2026-01-23T02:24:57Z"
generateName: deepflow-server-fc484c85-
generation: 1
ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: deepflow-server-fc484c85
uid: 528ab77f-67ba-4099-8771-bfe06ca9ce2f
resourceVersion: "4864722"
uid: 0d5ff97b-9c48-4abf-be8b-d2b76f7a14d2
nodeAffinity: {}
apiVersion: v1
apiVersion: v1
apiVersion: v1
apiVersion: v1
apiVersion: v1
scheme: HTTP
successThreshold: 1
timeoutSeconds: 1
protocol: TCP
protocol: TCP
protocol: TCP
protocol: TCP
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
resources: {}
securityContext: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsConfig: {}
dnsPolicy: ClusterFirst
enableServiceLinks: true
nodeName: network-demo
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: deepflow-server
terminationGracePeriodSeconds: 30
defaultMode: 420
defaultMode: 420
apiVersion: v1
status:
## 下面是所有 status 内容...