从云原生走向 AI 原生:一套面向未来的架构方法论 → 阅读《AI 原生基础设施》

Kubernetes API 访问与 kubectl 实践

kubectl 是 Kubernetes 官方命令行工具,极大简化了 API 交互、认证、资源管理与自动化操作。掌握 kubectl 与 API 的工作原理,有助于提升集群运维与开发效率。

kubectl 与 API Server 交互原理

Kubernetes API 是控制面的核心,提供 HTTP REST 接口,支持用户、集群组件及外部系统通信。kubectl 作为官方 CLI,负责处理认证、请求格式化与响应解析。

图 1: kubectl 到 API Server 交互流程
图 1: kubectl 到 API Server 交互流程

Kubernetes API 基础

Kubernetes API 遵循 RESTful 设计,支持标准 HTTP 动作(GET、POST、PUT、PATCH、DELETE)操作资源。资源按 API 组、版本、类型组织。

图 2: Kubernetes API 结构
图 2: Kubernetes API 结构

常见 API 路径模式:

  • 集群级资源:/apis/GROUP/VERSION/RESOURCETYPE
  • 命名空间资源:/apis/GROUP/VERSION/namespaces/NAMESPACE/RESOURCETYPE
  • 单个资源:/apis/GROUP/VERSION/namespaces/NAMESPACE/RESOURCETYPE/NAME

kubectl 工作机制

kubectl 作为 API 客户端,将用户命令转为 HTTP 请求,读取 kubeconfig 配置集群、认证与上下文信息。

图 3: kubectl 证书签发流程
图 3: kubectl 证书签发流程

kubectl 认证机制

kubectl 通过 kubeconfig 自动完成 API Server 认证,支持多种方式:

  • 客户端证书
  • Bearer Token
  • 基本认证
  • OAuth2 Token(外部插件)
  • 服务账号 Token(集群内)
图 4: kubectl 认证流程
图 4: kubectl 认证流程

kubectl 基本用法

kubectl 命令基本格式如下:

kubectl [command] [TYPE] [NAME] [flags]
  • command:操作类型(如 create、get、describe、delete)
  • TYPE:资源类型(如 pods、deployments、services)
  • NAME:资源名称(列表操作可省略)
  • flags:可选参数

常用 kubectl 命令如下:

CommandDescriptionExample
get列出资源kubectl get pods
describe查看详细信息kubectl describe pod nginx
create创建资源kubectl create deployment nginx --image=nginx
apply文件创建/更新kubectl apply -f manifest.yaml
delete删除资源kubectl delete pod nginx
logs查看容器日志kubectl logs nginx
exec容器内执行命令kubectl exec -it nginx -- bash
port-forward端口转发kubectl port-forward pod/nginx 8080:80
表 1: 常用 kubectl 命令与示例

直接访问 API

kubectl 支持 kubectl proxy 启动本地代理,便于 curl 等工具直接访问 API,适合高级场景。

# 启动本地代理
kubectl proxy --port=8080

# 使用 curl 访问 API
curl http://localhost:8080/api/v1/namespaces/default/pods

输出格式与 JSONPath

kubectl 支持多种输出格式,便于脚本与自动化:

FormatDescriptionExample
jsonJSON 格式kubectl get pods -o json
yamlYAML 格式kubectl get pods -o yaml
wide详细信息kubectl get pods -o wide
name仅资源名kubectl get pods -o name
custom-columns自定义列kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase
jsonpathJSONPath 过滤kubectl get pods -o jsonpath='{.items[0].metadata.name}'
go-templateGo 模板格式化kubectl get pods -o go-template='{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}'
表 2: kubectl 输出格式与示例

JSONPath 常用表达式

ExpressionDescription
{.items[*]}所有列表项
{.metadata.name}资源名称
{.status.phase}资源状态
{range .items[*]}{end}遍历所有项
{.spec.containers[*].image}所有容器镜像
表 3: kubectl JSONPath 常用表达式

Server-Side Apply 原理

Server-Side Apply 支持多管理者协作管理同一对象,追踪字段所有权,避免相互覆盖。

图 5: Server-Side Apply 工作原理
图 5: Server-Side Apply 工作原理

关键点:

  • 字段所有权追踪,避免冲突
  • --field-manager 标识管理者
  • --force-conflicts 强制覆盖冲突字段

其他 API 访问方式

除 kubectl 外,还可通过多种方式访问 Kubernetes API。

官方客户端库

Kubernetes 提供多语言官方客户端库:

LanguageClient Library
Gogithub.com/kubernetes/client-go
Pythongithub.com/kubernetes-client/python
Javagithub.com/kubernetes-client/java
JavaScriptgithub.com/kubernetes-client/javascript
.NETgithub.com/kubernetes-client/csharp
表 4: Kubernetes 官方客户端库

API 代理与端口转发

  • 使用 kubectl proxy 启动本地代理
  • 直接带认证访问 API Server
  • 端口转发访问服务
kubectl proxy --port=8080
curl http://localhost:8080/api/v1/namespaces/default/pods

kubectl 命令分类

kubectl 的子命令按功能主要分为以下几个类别:

  • 基础命令(入门级):create、expose、run、set 等基本操作命令
  • 基础命令(进阶级):explain、get、edit、delete 等常用管理命令
  • 部署命令:rollout、scale、autoscale 等部署相关命令
  • 集群管理命令:certificate、cluster-info、top 等集群维护命令
  • 故障排查和调试命令:describe、logs、exec、port-forward 等诊断命令
  • 高级命令:diff、apply、patch、replace 等高级操作命令
  • 设置命令:label、annotate、completion 等配置命令
  • 其他命令:auth、config、plugin、version 等辅助命令

熟练掌握这些命令分类有助于提高 Kubernetes 集群的操作效率。

kubectl 命令行增强工具

为提升 kubectl 的调试与管理效率,推荐结合多种开源增强工具。

图 6: kubectl 增强工具推荐
图 6: kubectl 增强工具推荐

推荐工具清单

  • kubectx:快速切换 Kubernetes context 和 namespace
  • kube-ps1:在命令行提示符中显示当前的 Kubernetes context 和 namespace
  • k9s:终端 UI,集群资源可视化管理
  • kubens:快速切换 namespace
  • stern:多 Pod 日志聚合查看工具
  • krew:kubectl 插件管理器,kubectl krew install 即可安装 neat、tree、view-secret 等上百个社区插件
  • kuberc:kubectl 内建的用户偏好文件(v1.34 Beta 默认开启),可定义命令别名与默认参数,部分替代 shell alias 的用途

kube-shell 交互式终端

kube-shell 为 kubectl 提供交互式命令行体验,适合复杂调试和命令探索。

图 7: kube-shell 交互终端界面
图 7: kube-shell 交互终端界面

主要特性:

  • 智能命令提示和使用说明
  • 自动补全和模糊搜索
  • 语法高亮显示
  • Tab 键列出可选对象
  • 支持 vim 编辑模式

安装方法:

# 使用 pip 安装
pip install kube-shell --user -U

# 或使用 pipx 安装(推荐)
pipx install kube-shell

kubectl 脚本与自动化最佳实践

  • 明确指定输出格式(json、yaml、name),便于解析
  • 明确资源版本(如 apps/v1/deployments)
  • 不依赖默认 context,必要时显式指定
  • 使用 --dry-run=client/server 预览变更
  • 长时间命令设置超时
  • 使用标签与选择器过滤资源
  • 配合版本控制管理 YAML 文件,推荐用 apply
  • 利用 kubectl 插件扩展功能
kubectl get deployment.apps/nginx -o json
kubectl apply -f deployment.yaml
kubectl apply -f deployment.yaml --dry-run=server

总结

kubectl 极大简化了 Kubernetes API 交互,支持丰富的资源管理、输出格式与自动化能力。深入理解 kubectl 与 API 的工作机制,有助于高效管理和自动化 Kubernetes 集群。

参考文献

  1. Kubernetes 官方文档 - kubernetes.io
  2. kubectl 命令参考 - kubernetes.io
  3. Kubernetes API 访问 - kubernetes.io
  4. Server-Side Apply 机制 - kubernetes.io
  5. Kubernetes 客户端库 - kubernetes.io
创建于 2025/10/13 更新于 2026/11/01 2110 字 阅读约 5 分钟

提交勘误/建议