什么是 kubectl --raw?
kubectl --raw 是一个强大的底层工具,允许你直接访问 Kubernetes API Server 的 REST API,绕过 kubectl 的客户端逻辑、准入控制器(Admission Controllers)和 Webhook。
为什么需要 --raw?
标准 kubectl 的请求流程
CodeBlock Loading...
kubectl --raw 的请求流程
CodeBlock Loading...
适用场景
- 绕过 Webhook 干扰
- 当 Mutating/Validating Webhook 阻止正常操作时
- 调试 API Server
- 排查 kubectl 客户端与 API Server 的交互问题
- 访问特殊端点
- 访问 metrics、healthz 等非资源端点
- 绕过客户端限制
- kubectl 版本不支持某些新特性时
- 性能测试
- 直接测试 API Server 响应时间
- 修复僵尸资源
- 清理被控制器锁定的资源状态
基本语法
CodeBlock Loading...
常用操作示例
1. GET 请求 - 查询资源
查看集群级别资源
CodeBlock Loading...
查看命名空间级别资源
CodeBlock Loading...
查看子资源
CodeBlock Loading...
2. PUT 请求 - 完整更新资源
CodeBlock Loading...
实战案例:清除节点僵尸条件
CodeBlock Loading...
3. POST 请求 - 创建资源
CodeBlock Loading...
4. DELETE 请求 - 删除资源
CodeBlock Loading...
5. PATCH 请求 - 部分更新
CodeBlock Loading...
API 路径规则
核心 API 组 (Core API Group)
CodeBlock Loading...
命名 API 组 (Named API Groups)
CodeBlock Loading...
子资源 (Subresources)
CodeBlock Loading...
特殊端点
查看 API 资源
CodeBlock Loading...
集群信息
CodeBlock Loading...
认证和授权
CodeBlock Loading...
使用 kubectl proxy 的方式
当 kubectl --raw 不可用或语法复杂时,可以使用 proxy 方式:
CodeBlock Loading...
实战案例
案例 1: 绕过 Webhook 修改节点标签
CodeBlock Loading...
案例 2: 清理僵尸 Finalizer
CodeBlock Loading...
案例 3: 批量查询资源状态
CodeBlock Loading...
案例 4: 性能测试
CodeBlock Loading...
案例 5: 导出所有资源
CodeBlock Loading...
注意事项
1. 权限要求
CodeBlock Loading...
2. resourceVersion 冲突
CodeBlock Loading...
3. 数据格式验证
CodeBlock Loading...
4. 备份重要资源
CodeBlock Loading...
5. 只读操作优先
CodeBlock Loading...
版本兼容性
Kubernetes 1.18+
CodeBlock Loading...
早期版本或不支持时
CodeBlock Loading...
调试技巧
1. 查看完整请求
CodeBlock Loading...
2. 使用 jq 过滤输出
CodeBlock Loading...
3. 格式化时间戳
CodeBlock Loading...
总结
kubectl --raw 是 Kubernetes 的"瑞士军刀",提供了:
✅ 直接访问 API - 绕过客户端限制
✅ 调试工具 - 排查 kubectl 和 API Server 问题
✅ 应急修复 - 处理 Webhook 和控制器导致的问题
✅ 性能测试 - 直接测试 API Server
✅ 学习工具 - 理解 Kubernetes API 结构
⚠️ 使用场景: 作为最后的调试和修复手段
⚠️ 不推荐: 日常操作应使用标准 kubectl 命令
⚠️ 需谨慎: 直接操作可能破坏资源状态