文档首页> Linux命令> Kubernetes查看api教程

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)
  • 核心组:/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 .
​

⚠️ 五、关键注意事项

  1. API 弃用策略
    Kubernetes 1.25+ 移除 v1beta1 等旧 API,需检查兼容性:
    kubectl get --raw /apis | grep removalRelease
    ​
  2. 速率限制
    API Server 默认限流(可通过 --max-requests-inflight 调整)
  3. 审计日志
    开启 audit.k8s.io API 记录操作轨迹

🧪 六、调试实战案例

场景:查询 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='^*$' 开放外部访问(谨慎使用)

💡 八、最佳实践总结

  1. 优先使用 kubectl explain
    替代查阅文档,实时获取集群 API 结构
  2. 善用 JQ 过滤 JSON 输出
    kubectl get pods -o json | jq '.items[].metadata.name'
    ​
  3. API 版本迁移
    定期运行 kubectl convert 更新旧配置:
    kubectl convert -f old-deployment.yaml --output-version apps/v1
    ​
  4. 禁用 Alpha API
    生产环境配置 --runtime-config=api/all=false 减少风险

📌 最终建议:

  • 通过 kubectl options 查看全局参数
  • 使用 -v=9 参数打印 API 请求详情(调试级日志)
  • 关键操作启用 kubectl --dry-run=server 预校验

掌握这些方法,可高效应对 99% 的 Kubernetes API 探查需求。实际运维中建议结合 OpenAPI v3 规范(/openapi/v3)实现自动化管理。