# k8s-cli **Repository Path**: guanyong1/k8s-cli ## Basic Information - **Project Name**: k8s-cli - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-18 - **Last Updated**: 2026-05-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # k8s-cli 一键部署和管理 Kubernetes 集群的命令行工具。通过 SSH 远程操作目标节点,支持集群创建、集群清理、CNI 网络插件单独安装/卸载。 ## 功能特性 - **一键部署 K8s** — 从裸机到可用集群,无需手动操作 - **模块化流水线** — 前置检查 → 系统初始化 → 安装 CRI → 安装 K8s 组件 → 初始化控制面 → 加入节点 → 安装 CNI - **增量操作** — 单独安装/卸载 CNI 网络插件,不影响集群其他组件 - **多种 CNI 支持** — Calico、Flannel、Cilium - **干跑模式** — `--only-print-cmd` 预览要执行的命令,不实际执行 - **无网络依赖** — CNI 清理直接通过 `kubectl` 按资源名操作,无需重新下载清单文件 ## 快速开始 ### 1. 编译 ```bash # Linux amd64(推荐用于实际部署) make build # Windows 本地调试 make build-windows ``` 或直接使用 Go 编译: ```bash # Linux amd64 GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o k8s-cli-linux-amd64 ./cmd/k8s-cli/ # Windows go build -o k8s-cli.exe ./cmd/k8s-cli/ ``` ### 2. 编写配置文件 参考 `config-example.yaml`,创建你的集群配置: ```yaml name: "my-cluster" masters: - "192.168.1.10" workers: - "192.168.1.20" ssh: user: "root" password: "" keyPath: "~/.ssh/id_rsa" port: 22 kubeVersion: "1.29.0" cri: "containerd" cni: "calico" # calico | flannel | cilium | none podCIDR: "10.244.0.0/16" serviceCIDR: "10.96.0.0/12" ``` ### 3. 部署集群 ```bash # 完整部署 k8s-cli-linux-amd64 create k8s --config cluster.yaml # 仅部署 CNI 网络插件(集群已存在时) k8s-cli-linux-amd64 create cni --config cluster.yaml --type calico ``` ## 命令参考 ### 全局标志 | 标志 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `--log-dir` | string | `/var/log/k8s-cli` | 日志文件输出目录 | | `-v, --verbose` | bool | `false` | 开启详细日志输出 | | `--config` | string | (必填) | 集群配置文件路径(YAML 格式) | | `--only-print-cmd` | bool | `false` | 干跑模式:仅打印要执行的命令,不实际执行 | ### create — 部署 #### `create k8s` — 完整部署集群 执行全部 7 个阶段:前置检查 → 系统初始化 → 安装 containerd → 安装 K8s 组件 → kubeadm init → 加入节点 → 安装 CNI。 ```bash k8s-cli create k8s --config cluster.yaml # 完整部署 k8s-cli create k8s --config cluster.yaml -v # 详细日志 k8s-cli create k8s --config cluster.yaml --only-print-cmd # 干跑 ``` #### `create cni` — 单独部署 CNI 网络插件 当集群已存在但需要更换或重装 CNI 插件时使用。支持 `--type` 参数覆盖配置文件中的 CNI 类型。 ```bash k8s-cli create cni --config cluster.yaml # 按配置文件部署 k8s-cli create cni --config cluster.yaml --type calico # 部署 Calico k8s-cli create cni --config cluster.yaml --type flannel # 部署 Flannel k8s-cli create cni --config cluster.yaml --type cilium # 部署 Cilium ``` ### delete — 清理 #### `delete k8s` — 完整清理集群 清理 K8s 集群所有组件(kubeadm reset + 清理运行时残留 + 清理网络残留 + 移除 K8s 源)。 ```bash k8s-cli delete k8s --config cluster.yaml # 完整清理 k8s-cli delete k8s --config cluster.yaml --only-print-cmd # 干跑 ``` #### `delete cni` — 单独清理 CNI 网络插件 仅清理 CNI 网络插件,不影响集群其他组件。可直接通过 `kubectl` 删除资源,无需网络下载清单文件。 ```bash k8s-cli delete cni --config cluster.yaml # 按配置文件清理 k8s-cli delete cni --config cluster.yaml --type calico # 清理 Calico k8s-cli delete cni --config cluster.yaml --type flannel # 清理 Flannel k8s-cli delete cni --config cluster.yaml --type cilium # 清理 Cilium ``` ## 配置文件说明 | 字段 | 类型 | 默认值 | 必填 | 说明 | |------|------|--------|------|------| | `name` | string | — | 是 | 集群名称,用于区分数据目录 | | `masters` | []string | — | 是 | Master 节点 IP 列表(至少 1 个) | | `workers` | []string | `[]` | 否 | Worker 节点 IP 列表 | | `ssh.user` | string | `root` | 否 | SSH 登录用户名 | | `ssh.password` | string | — | 否 | SSH 密码(与 keyPath 二选一) | | `ssh.keyPath` | string | — | 否 | SSH 私钥路径 | | `ssh.port` | int | `22` | 否 | SSH 端口 | | `kubeVersion` | string | — | 是 | K8s 版本,如 `1.29.0` | | `cri` | string | `containerd` | 否 | 容器运行时(目前仅 containerd) | | `cni` | string | — | 否 | CNI 插件类型:`calico` / `flannel` / `cilium` / `none` | | `podCIDR` | string | `10.244.0.0/16` | 否 | Pod 网段 | | `serviceCIDR` | string | `10.96.0.0/12` | 否 | Service 网段 | ## 架构说明 k8s-cli 采用**流水线(Pipeline)**模式组织部署流程: ``` ┌─────────────────────────────────────────────────────────┐ │ k8s-cli Pipeline │ ├───────────┬───────────┬───────────┬─────────────────────┤ │ PreCheck │ InitSystem │ InstallCRI│ InstallK8sComponents│ │ (stage 1) │ (stage 2) │ (stage 3) │ (stage 4) │ ├───────────┴───────────┴───────────┴─────────────────────┤ │ InitControlPlane → JoinNodes → InstallCNI │ │ (stage 5) (stage 6) (stage 7) │ └─────────────────────────────────────────────────────────┘ ``` 各阶段职责: | 阶段 | 说明 | |------|------| | PreCheck | 检查 SSH 连通性、系统环境 | | InitSystem | 关闭防火墙/SELinux/swap,配置内核参数 | | InstallCRI | 安装并配置 containerd | | InstallK8sComponents | 安装 kubeadm/kubelet/kubectl | | InitControlPlane | 在 master0 上执行 kubeadm init | | JoinNodes | 将其他 master 和 worker 加入集群 | | InstallCNI | 安装 Calico/Flannel/Cilium 网络插件 | ## 支持的系统 - **目标节点**: Linux(CentOS 7+、Ubuntu 20.04+、Debian 11+) - **编译环境**: Go 1.21+,支持交叉编译(开发机可以是 macOS / Windows / Linux) ## 开发 ```bash # 克隆项目 git clone cd k8s-cli # 安装依赖 go mod tidy # 编译 make build # 测试帮助信息 ./k8s-cli-linux-amd64 --help # 查看子命令帮助 ./k8s-cli-linux-amd64 create --help ./k8s-cli-linux-amd64 delete --help ./k8s-cli-linux-amd64 delete cni --help ```