Kubernetes查看api教程
发布时间:2025-07-10 00:02       
以下为 Kubernetes 查看 API 的终极指南,基于 Kubernetes 1.28+ 版本最佳实践,涵盖主流操作场景:
🔍 一、核心查看方式
1. kubectl 原生命令
# 查看所有 API 资源列表(含缩写)
kubectl api-resources --verbs=list
# 查看指定资源类型 (如 Pod) 的 API 版本
kubectl explain pods | head -n 5
# 输出示例:KIND: Pod | VERSION: v1
2. 探查 API 资源结构
# 获取 Pod 的字段定义(含必填项说明)
kubectl explain pod.spec.containers
# 层级递进查看:kubectl explain pod.spec.containers.ports
3. 直接访问 API Server
# 通过代理访问本地 API(默认端口 8001)
kubectl proxy --port=8080 &
curl http://localhost:8080/api/v1/namespaces/default/pods
4. 原始 API 请求(需认证)
# 获取 ServiceAccount 令牌
TOKEN=$(kubectl get secrets -n default -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='default')].data.token}" | base64 -d)
# 查询节点信息
curl -k -H "Authorization: Bearer $TOKEN" https://<API-SERVER-IP>:6443/api/v1/nodes
📚 二、理解 Kubernetes API 层级结构
Syntax error in textmermaid version 10.8.0
No diagram type detected matching given configuration for text: 逻辑层级:
APIGroup → APIVersion → Resource (e.g., apps/v1 → Deployment)
APIGroup → APIVersion → Resource (e.g., apps/v1 → Deployment)
- 核心组:
/api/v1(Pods, Nodes, Services) - 命名组:
/apis/<group>/<version>(如/apis/apps/v1)
🛠️ 三、高阶探查技巧
1. 查看集群支持的 API 版本
kubectl api-versions
# 输出示例:batch/v1、networking.k8s.io/v1
2. 字段选择器过滤
# 查询所有 Running 状态的 Pod
kubectl get pods --field-selector=status.phase=Running
3. 查看扩展 API (CRD)
# 列出所有自定义资源
kubectl get crd
# 查看 CRD 的 API 定义
kubectl get crd <crd-name> -o yaml
🔐 四、生产环境安全访问
1. RBAC 权限验证
# 检查当前用户权限
kubectl auth can-i list nodes --as=system:serviceaccount:default:my-sa
2. 使用 kubectl get --raw
# 无需代理直接访问(自动处理认证)
kubectl get --raw /apis/metrics.k8s.io/v1beta1/pods | jq .
⚠️ 五、关键注意事项
- API 弃用策略
Kubernetes 1.25+ 移除v1beta1等旧 API,需检查兼容性:kubectl get --raw /apis | grep removalRelease - 速率限制
API Server 默认限流(可通过--max-requests-inflight调整) - 审计日志
开启audit.k8s.ioAPI 记录操作轨迹
🧪 六、调试实战案例
场景:查询 Deployment 状态异常的 Pod
# 1. 获取 Deployment 的 UID
DEPLOY_UID=$(kubectl get deploy my-app -o jsonpath='{.metadata.uid}')
# 2. 通过 OwnerReferences 关联 Pod
kubectl get pods -o json | jq '.items[] | select(.metadata.ownerReferences[].uid=="'$DEPLOY_UID'")'
🔧 七、故障排查工具
| 命令 | 用途 |
|---|---|
kubectl get --raw /metrics |
查看 API Server 性能指标 |
kubectl api-resources -o wide |
显示资源所属 API 组及命名空间范围 |
kubectl proxy --accept-hosts='^*$' |
开放外部访问(谨慎使用) |
💡 八、最佳实践总结
- 优先使用
kubectl explain
替代查阅文档,实时获取集群 API 结构 - 善用 JQ 过滤 JSON 输出
kubectl get pods -o json | jq '.items[].metadata.name' - API 版本迁移
定期运行kubectl convert更新旧配置:kubectl convert -f old-deployment.yaml --output-version apps/v1 - 禁用 Alpha API
生产环境配置--runtime-config=api/all=false减少风险
📌 最终建议:
- 通过
kubectl options查看全局参数- 使用
-v=9参数打印 API 请求详情(调试级日志)- 关键操作启用
kubectl --dry-run=server预校验
掌握这些方法,可高效应对 99% 的 Kubernetes API 探查需求。实际运维中建议结合 OpenAPI v3 规范(/openapi/v3)实现自动化管理。