前言
在使用kubectl get $KIND -o yaml查看 k8s 资源时,输出结果中包含大量由集群自动生成的元数据(如managedFields、resourceVersion、uid等)。这些信息在实际复用 yaml 清单时需要手动清理,增加了额外的工作量。
使用 kubectl-neat 插件,可以自动移除这些由集群生成的冗余字段,仅保留有意义的内容,使 yaml 更加简洁,方便复用。
安装
插件方式安装
/* by 01130.hk - online tools website : 01130.hk/zh/calcpressure.html */ kubectl krew install neat ## 作为 kubectl 插件安装,使用方式为: kubectl neat二进制方式安装
/* by 01130.hk - online tools website : 01130.hk/zh/calcpressure.html */ ## 版本选择: ## 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'使用
本次使用二进制方式部署,实际上参数是相同的,没区别
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 相关信息
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 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)使用方式
## 这里我直接将 kubectl get -o yaml 与 kubectl-neat get -o yaml 输出对比 kubectl-neat get -- pods -n deepflow deepflow-server-fc484c85-p67gl -o yaml > deepflow-kneat.yaml kubectl get pods -n deepflow deepflow-server-fc484c85-p67gl -o yaml > deepflow-kubectl.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 内容...