# kubectl_cli **Repository Path**: karentwan/kubectl_cli ## Basic Information - **Project Name**: kubectl_cli - **Description**: 交互式k8s命令行 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-23 - **Last Updated**: 2026-03-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Kubectl CLI - 交互式Kubernetes命令行工具 一个类似于Claude Code的交互式kubectl命令行工具,支持方向键选择、自动补全和直观的操作界面。 ## 功能特性 - 🎯 **交互式Pod选择** - 使用方向键选择Pod,支持模糊搜索 - 📝 **自动补全** - Tab键自动补全命令 - 🎨 **美观界面** - 使用Rich库提供彩色输出和表格 - 🚀 **快速进入容器** - 自动检测并进入bash/sh/ash - 📊 **资源管理** - 管理Pod、Deployment等资源 - 🔍 **实时日志** - 支持日志查看和实时跟踪 - 📁 **文件复制** - 支持本地与Pod之间的文件复制 - 🔄 **集群切换** - 快速切换kubectl集群context - 🌐 **Service类型切换** - 快速切换Service部署方式(ClusterIP/NodePort/LoadBalancer) - 📡 **节点IP和端口映射** - 查看Pod所在节点IP和Service端口映射关系 ## 安装 ### 前提条件 - Python 3.8+ - kubectl 已安装并配置 ### 方式一:通过 pip 安装(推荐) ```bash # 从本地源码安装 git clone <仓库地址> cd kubectl-cli pip install -e . ``` ### 方式二:直接运行 ```bash # 1. 克隆或下载项目 cd kubectl-cli # 2. 安装依赖 pip install -r requirements.txt # 3. 运行 python -m kubectl_cli ``` ## 使用方法 ### 启动程序 安装完成后,可以通过以下方式启动: ```bash # 方式一:使用 kcli 命令(推荐) kcli # 方式二:使用 Python 模块方式 python -m kubectl_cli ``` ### 常用命令 | 命令 | 说明 | 示例 | |------|------|------| | 命令 | 说明 | 示例 | |------|------|------| | `pods [过滤词]` | 列出所有Pod | `pods`, `pods nginx` | | `pods --ip [过滤词]` | 列出Pod并显示Service类型、节点IP和端口映射 | `pods --ip`, `pods -i nginx` | | `pod <名称>` | 搜索并进入Pod | `pod nginx` | | `ns [名称]` | 选择命名空间 | `ns`, `ns default` | | `ctx` | 切换集群context | `ctx` | | `logs [-f] [-n <行数>] ` | 查看Pod日志 | `logs my-pod`, `logs -n 500 my-pod`, `logs -f my-pod` | | `cp ` | 复制文件到/从Pod | `cp ./file my-pod:/tmp/` | | `svc-type <类型>` | 切换Service部署方式 | `svc-type nginx NodePort`, `svc-type nginx ClusterIP` | | `delete ` | 删除Pod | `delete my-pod` | | `deploy` | 列出Deployment | `deploy` | | `scale ` | 扩缩容Deployment | `scale my-app 3` | | `clear/cls` | 清屏 | `clear` | | `help/?` | 显示帮助 | `help` | | `exit/quit/q` | 退出程序 | `exit` | ### 命令别名 | 别名 | 对应命令 | |------|----------| | `p` | `pod` | | `l`, `log` | `logs` | | `del` | `delete` | | `h`, `?` | `help` | | `q` | `quit/exit` | ### 交互式操作示例 #### 1. 进入Pod ``` :$ pod nginx ``` 如果找到多个匹配的Pod,会弹出选择框让你用方向键选择。 #### 2. 选择命名空间 ``` :$ ns ``` 会显示所有命名空间供你选择,包含"全部命名空间"选项。 #### 3. 切换集群Context ``` :$ ctx ``` 显示所有集群context供选择,当前集群会标记 ●。 #### 4. 查看日志 ``` :$ logs my-app ``` 默认显示最近200行。 #### 5. 指定行数 ``` :$ logs -n 500 my-app ``` 显示最近500行日志。 #### 6. 实时跟踪日志 ``` :$ logs -f my-app ``` 按 `Ctrl+C` 停止跟踪。 ### 查看Pod节点IP和端口映射 (pods --ip) 使用 `pods --ip` 或 `pods -i` 命令可以查看Pod所在节点的IP地址和Service端口映射信息。 ```bash # 显示所有Pod的节点IP和端口映射 pods --ip # 过滤并显示节点信息 pods -i nginx ``` **显示字段说明:** - **Service类型**: ClusterIP(蓝色) / NodePort(绿色) / LoadBalancer(紫色) - **节点IP**: Pod所在节点的IP地址(优先ExternalIP,否则InternalIP) - **端口映射**: 格式为 `端口名称:NodePort:ServicePort→ContainerPort` **示例输出:** ``` ┌─────┬───────────┬───────────┬─────────┬─────────────┬────────────┬──────────────────────────┐ │ 序号 │ Pod名称 │ 命名空间 │ 状态 │ Service类型 │ 节点IP │ 端口映射 │ ├─────┼───────────┼───────────┼─────────┼─────────────┼────────────┼──────────────────────────┤ │ 1 │ nginx-xxx │ default │ Running │ NodePort │ 192.168.1.10│ http:30080:80→8080 │ │ │ │ │ │ │ │ https:30443:443→8443 │ ├─────┼───────────┼───────────┼─────────┼─────────────┼────────────┼──────────────────────────┤ │ 2 │ app-xxx │ default │ Running │ ClusterIP │ - │ - │ └─────┴───────────┴───────────┴─────────┴─────────────┴────────────┴──────────────────────────┘ ``` ### 切换Service部署方式 (svc-type) 快速切换Pod关联Service的部署方式,支持 ClusterIP、NodePort、LoadBalancer 三种类型。 ```bash # 切换到 NodePort 类型(允许外部通过节点IP+端口访问) svc-type nginx NodePort # 切换到 ClusterIP 类型(仅集群内部访问) svc-type nginx ClusterIP # 切换到 LoadBalancer 类型(云环境负载均衡) svc-type nginx LoadBalancer ``` **Service类型说明:** - **ClusterIP**: 默认类型,仅集群内部可访问 - **NodePort**: 通过 `<节点IP>:` 可从集群外部访问 - **LoadBalancer**: 云提供商的负载均衡器(需云环境支持) **注意事项:** - 如果匹配多个Pod,会弹出选择框让你选择 - 如果Pod关联多个Service,会弹出选择框让你选择要修改的Service - 从 NodePort 切换到 ClusterIP 时会自动清理 nodePort 字段 - 从 ClusterIP 切换到 NodePort 时 Kubernetes 会自动分配端口 ### 文件复制 (cp) 支持本地与Pod之间的文件复制。 | 操作 | 命令示例 | |------|----------| | 本地 → Pod | `cp ./file.txt my-pod:/app/data/` | | Pod → 本地 | `cp my-pod:/var/log/app.log ./logs/` | **智能文件名补全**:当目标路径以 `/` 结尾时,自动使用源文件名 - `cp ./app.jar my-pod:/data/` → 实际复制到 `/data/app.jar` **Windows路径**:建议用双引号包裹含空格或反斜杠的路径 - `cp "D:\Test\app.jar" my-pod:/data/` ## 快捷键 - `Tab` - 命令自动补全 - `↑/↓` - 浏览命令历史 - `Ctrl+C` - 取消当前操作 - `方向键` - 在弹出的选择框中移动 - `Enter` - 确认选择 - `Esc` - 取消选择 ## 项目结构 ``` kubectl-cli/ ├── kubectl_cli/ # 主包目录 │ ├── __init__.py # 包初始化 │ ├── __main__.py # 模块入口 │ └── cli.py # 主程序代码 ├── pyproject.toml # 现代Python包配置 ├── setup.py # 传统包配置 ├── requirements.txt # 依赖 ├── README.md # 说明文档 └── MANIFEST.in # 打包包含文件 ``` ## 开发安装 如果你想参与开发或修改代码: ```bash # 1. 克隆仓库 git clone <仓库地址> cd kubectl-cli # 2. 以可编辑模式安装 pip install -e . # 3. 修改代码后,直接运行测试 kcli ``` ## 构建wheel文件分发 ```shell # 安装构建工具 pip install build # 构建wheel和源码分发包 python -m build # 安装方式(其他人电脑) pip install kubectl_cli-1.0.0-py3-none-any.whl ``` ## 发布到 PyPI 如果你是项目维护者,发布步骤如下: ```bash # 1. 安装构建工具 pip install build twine # 2. 构建包 python -m build # 3. 检查包 python -m twine check dist/* # 4. 上传到 PyPI(需要账号) python -m twine upload dist/* ``` ## 卸载 ```bash pip uninstall kubectl-cli ``` ## 依赖库 - **prompt-toolkit**: 提供交互式命令行和选择对话框 - **rich**: 提供美观的表格和彩色输出 ## 注意事项 1. 确保kubectl已经配置好kubeconfig,能够正常访问集群 2. 进入Pod后会占用当前终端,输入 `exit` 返回主界面 3. 删除操作会有确认提示,防止误操作 4. 使用 `scale` 命令时,如果匹配多个Deployment,会提供选择框和"全部选择"选项 5. `pods --ip` 显示的节点IP优先使用 ExternalIP,如果没有则使用 InternalIP 6. `svc-type` 命令只能修改已存在Service的类型,不会创建新的Service 7. 从 NodePort 切换到 ClusterIP 后,外部将无法通过节点IP+端口访问该服务