# kube-sync **Repository Path**: hexug/kube-sync ## Basic Information - **Project Name**: kube-sync - **Description**: kube-sync 是一个用于 同步和过滤 Kubernetes 资源 的命令行工具。 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/hexug/kube-sync - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-08 - **Last Updated**: 2026-04-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: Kubernetes, Go语言, sync ## README # kube-sync [![License](https://img.shields.io/badge/License-Apache_2.0-green?logo=apache&style=flat-square)](LICENSE) [![Go Report Card](https://img.shields.io/badge/Go%20Report-A+-brightgreen?logo=go&style=flat-square)](https://goreportcard.com/report/gitee.com/hexug/kube-sync) [![Gitee tag (latest SemVer)](https://img.shields.io/badge/dynamic/json?url=https://gitee.com/api/v5/repos/hexug/kube-sync/releases/latest&label=Version&query=$.name&color=brightgreen&logo=gitee&logoColor=ee1c25&style=flat-square)](https://gitee.com/hexug/kube-sync/releases/latest) ![Go Version](https://img.shields.io/badge/Go-1.24-blue?logo=go&style=flat-square) ![Kubernetes](https://img.shields.io/badge/Kubernetes-v1.21%2B-326CE5?logo=kubernetes&logoColor=white&style=flat-square) `kube-sync` 是一个用于 **同步、克隆、迁移和查询 Kubernetes 资源** 的命令行工具。 通过自定义规则(include/exclude),用户可以灵活地指定需要保留或排除的字段,避免无关字段带来的干扰,专注于业务核心配置。 ## ✨ 功能特性 - **资源同步**:将 Kubernetes 资源导出为本地 YAML 文件,便于与 GitOps 或配置管理结合 - **资源迁移**:支持同集群跨命名空间、跨集群的资源克隆与迁移 - **资源查询**:提供类 `kubectl get` 的查询能力,支持多种输出格式和标签过滤 - **字段过滤**:通过 **include/exclude 路径规则** 精准控制同步字段,去除集群自动生成的噪声字段 - **多资源支持**:覆盖 `Deployment`、`StatefulSet`、`DaemonSet`、`Service`、`ConfigMap`、`Secret`、`ServiceAccount`、`Role`、`RoleBinding`、`ClusterRole`、`ClusterRoleBinding`、`PersistentVolumeClaim`、`PersistentVolume` 等常见资源 - **Shell 补全**:支持 Bash、Zsh、Fish、PowerShell 的动态命令补全,包括资源名称、命名空间、标签等 - **多配置来源**:支持从文件、环境变量或默认配置加载规则 - **Debug 模式**:提供详细日志输出,便于问题排查 ## 📂 项目结构 ``` kube-sync/ ├── cmd/ # CLI 命令定义 │ ├── root.go # 根命令及全局参数 │ ├── sync/ # sync 子命令 │ ├── migrate/ # migrate 子命令 │ ├── get/ # get 子命令及所有资源子命令 │ └── completion/ # Shell 补全辅助函数 ├── worker/ # 核心业务逻辑 │ ├── sync/ # 资源同步执行器 │ ├── migrate/ # 资源迁移执行器 │ └── get/ # 资源查询执行器 ├── apps/ # 应用层(资源处理、字段清洗、文件输出) ├── conf/ # 配置加载与注册 ├── version/ # 版本信息 ├── main.go # 程序入口 ├── config.yaml # 配置文件示例 ├── Makefile # 构建脚本 └── README.md ``` ## 📦 安装 ### 方式一:从源码编译 ```bash # 克隆项目 git clone https://gitee.com/hexug/kube-sync.git cd kube-sync # 编译(当前平台) go mod tidy go build -o kube-sync . # 或使用 Makefile 编译 Linux amd64 二进制 make linux # 编译并安装到 /bin(Linux,同时配置 bash 补全) make install ``` ### 方式二:下载预编译二进制 前往 [Releases 页面](https://gitee.com/hexug/kube-sync/releases/latest) 下载对应平台的二进制文件,解压后放入 `PATH` 即可。 ### 验证安装 ```bash kube-sync -v # 输出示例:kube-sync version v0.6.21,build a1b2c3d4,go1.24.4 kube-sync -V # 输出完整版本信息(版本号、构建时间、分支、Commit、Go 版本) ``` ## 🎯 快速开始 ### 同步资源到本地文件 ```bash # 同步指定命名空间的资源到 ./output 目录 kube-sync sync -n ns1 -n ns2 -o ./output -f config.yaml # 开启 debug 模式 kube-sync sync -n ns1 -o ./output -f config.yaml -d # 排除指定工作负载 kube-sync sync -n ns1 -o ./output -e "ns1:Deployment:my-deploy" # 只同步指定工作负载 kube-sync sync -n ns1 -o ./output -i "ns1:Deployment:my-deploy" ``` ### 迁移资源到另一个命名空间或集群 ```bash # 同集群跨命名空间迁移 kube-sync migrate --src.ns ns1 --dst.ns ns2 # 跨集群迁移(指定目标集群 kubeconfig) kube-sync migrate --src.ns ns1 --dst.ns ns2 --dst.kc ~/.kube/target-config # 只导出为本地文件(不部署) kube-sync migrate --src.ns ns1 --dst.ns ns2 --sync ``` ### 查询集群资源 ```bash # 查询 Pod kube-sync get pod -n my-namespace # 查询节点资源统计 kube-sync get node-resources # 查询 Service 端口使用情况 kube-sync get service-ports ``` ## ⚙️ 全局参数 以下参数对所有子命令(`sync`、`migrate`、`get`)均有效: | 参数 | 简写 | 类型 | 说明 | | --- | --- | --- | --- | | `--version` | `-v` | bool | 打印简短版本信息并退出 | | `--Version` | `-V` | bool | 打印完整版本信息并退出 | | `--debug` | `-d` | bool | 开启 debug 模式,输出详细日志 | | `--config-type` | `-t` | string | 配置加载方式:`file`、`env`、`default`(默认 `default`) | | `--config-path` | `-f` | string | 指定配置文件路径(指定后自动切换为 `file` 模式) | ## 📋 命令说明 ### `sync` — 同步资源到本地文件 将指定命名空间的 Kubernetes 资源按照配置规则导出为本地 YAML 文件。 ```bash kube-sync sync [参数] ``` | 参数 | 简写 | 类型 | 说明 | | --- | --- | --- | --- | | `--namespaces` | `-n` | string[] | 指定需要同步的命名空间(可多次传入) | | `--out` | `-o` | string | 指定输出路径(默认 `./`) | | `--excludes` | `-e` | string[] | 排除指定工作负载,格式:`::`(与 `-i` 互斥) | | `--includes` | `-i` | string[] | 只同步指定工作负载,格式:`::`(与 `-e` 互斥) | | `--skip-configmap` | `-c` | bool | 跳过 ConfigMap 同步 | | `--skip-pv-pvc` | `-p` | bool | 跳过 PV/PVC 同步 | | `--skip-secret` | `-s` | bool | 跳过 Secret 同步 | | `--kube-config` | `-k` | string | 指定 kubeconfig 文件路径 | **示例:** ```bash # 同步多个命名空间,跳过 ConfigMap 和 Secret kube-sync sync -n ns1 -n ns2 -o ./output -c -s -f config.yaml # 只同步指定的 Deployment(支持 Tab 补全三段式参数) kube-sync sync -n ns1 -i "ns1:Deployment:my-app" -o ./output # 排除多个工作负载 kube-sync sync -n ns1 -e "ns1:Deployment:test-app" -e "ns1:Service:test-svc" -o ./output ``` > **提示**:`--excludes` 和 `--includes` 支持 Tab 补全,格式为 `::`, > 输入 `ns1:` 后按 Tab 可补全该命名空间下的工作负载类型和名称。 --- ### `migrate` — 克隆或迁移资源 支持同集群跨命名空间迁移,以及跨集群资源克隆。 ```bash kube-sync migrate [参数] ``` | 参数 | 简写 | 类型 | 说明 | | --- | --- | --- | --- | | `--src.ns` | — | string[] | 源命名空间(必填,可多次传入) | | `--dst.ns` | — | string[] | 目标命名空间(可多次传入;同集群时不填则只导出文件) | | `--src.kc` | — | string | 源集群 kubeconfig 路径(不填则使用默认集群) | | `--dst.kc` | — | string | 目标集群 kubeconfig 路径(不填则迁移到同一集群) | | `--out` | `-o` | string | 指定输出路径(默认 `./`) | | `--excludes` | `-e` | string[] | 排除指定工作负载,格式:`::`(与 `-i` 互斥) | | `--includes` | `-i` | string[] | 只迁移指定工作负载,格式:`::`(与 `-e` 互斥) | | `--sync` | — | bool | 只导出为本地文件,不部署到目标集群 | | `--skip-configmap` | `-c` | bool | 跳过 ConfigMap(跳过可能导致工作负载无法正常启动) | | `--skip-pv-pvc` | `-p` | bool | 跳过 PV/PVC | | `--skip-secret` | `-s` | bool | 跳过 Secret | **迁移场景说明:** | 场景 | 命令示例 | | --- | --- | | 同集群、同命名空间(只能导出文件) | `kube-sync migrate --src.ns ns1` | | 同集群、跨命名空间 | `kube-sync migrate --src.ns ns1 --dst.ns ns2` | | 跨集群、同名命名空间 | `kube-sync migrate --src.ns ns1 --dst.kc ~/.kube/target` | | 跨集群、不同命名空间 | `kube-sync migrate --src.ns ns1 --dst.ns ns2 --dst.kc ~/.kube/target` | | 只导出文件(不部署) | `kube-sync migrate --src.ns ns1 --dst.ns ns2 --sync` | --- ### `get` — 查询 Kubernetes 资源 提供类 `kubectl get` 的查询能力,支持多种资源类型、输出格式和标签过滤。 ```bash kube-sync get <子命令> [NAME...] [参数] ``` #### 子命令列表 **命名空间级别资源**(支持 `-n`、`-A`、`-l`、`-o`、`--show-labels`): | 子命令 | 缩写 | 说明 | | --- | --- | --- | | `pod` | — | 查询 Pod 信息 | | `deployment` | `deploy` | 查询 Deployment 信息 | | `statefulset` | `sts` | 查询 StatefulSet 信息 | | `daemonset` | `ds` | 查询 DaemonSet 信息 | | `service` | `svc` | 查询 Service 信息 | | `service-ports` | `svc-ports` | 分析 Service 端口使用情况(默认查询所有命名空间) | | `configmap` | `cm` | 查询 ConfigMap 信息 | | `secret` | — | 查询 Secret 信息 | | `persistentvolumeclaim` | `pvc` | 查询 PersistentVolumeClaim 信息 | | `serviceaccount` | `sa` | 查询 ServiceAccount 信息 | | `cronjob` | — | 查询 CronJob 信息 | | `job` | — | 查询 Job 信息 | | `ingress` | `ing` | 查询 Ingress 信息 | **集群级别资源**(不支持 `-n`/`-A`): | 子命令 | 缩写 | 说明 | | --- | --- | --- | | `namespace` | `ns` | 查询 Namespace 信息 | | `node` | `no` | 查询 Node 信息 | | `persistentvolume` | `pv` | 查询 PersistentVolume 信息 | | `node-resources` | `nr` | 查询节点资源统计(容量/可分配量/已分配量) | | `node-pods` | `np` | 查询节点下运行的 Pod 列表及资源信息 | **工作负载资源配置**(查询容器的 CPU/内存/GPU requests 和 limits): | 子命令 | 缩写 | 说明 | | --- | --- | --- | | `deployment-resources` | `dpr` | 查询 Deployment 容器资源配置 | | `daemonset-resources` | `dsr` | 查询 DaemonSet 容器资源配置 | | `statefulset-resources` | `stsr` | 查询 StatefulSet 容器资源配置 | | `pod-resources` | `pr` | 查询 Pod 容器资源配置 | | `cronjob-resources` | `cjr` | 查询 CronJob 容器资源配置 | | `job-resources` | `jr` | 查询 Job 容器资源配置 | #### 通用参数 以下参数适用于大多数命名空间级别的子命令: | 参数 | 简写 | 类型 | 说明 | | --- | --- | --- | --- | | `--namespace` | `-n` | string[] | 指定命名空间(可多次使用),默认 `default` | | `--all-namespaces` | `-A` | bool | 查询所有命名空间(等同于 `kubectl -A`) | | `--selector` | `-l` | string | 标签选择器,如 `app=nginx`(等同于 `kubectl -l`) | | `--output` | `-o` | string | 输出格式:`json`、`yaml`、`name`、`wide`、`jsonpath=