kr8s:面向 kubectl 用户的 Python Kubernetes 客户端
kr8s 是一个「开箱即用」的 Python Kubernetes 客户端库,API 设计贴近 kubectl 使用习惯,内置同步与异步接口,支持 asyncio 与 trio,让熟悉 kubectl 的开发者几乎零成本上手。
爱鲜报评分
0.0
0 人评分
986
星数
否
中文
Python
主语言
是
活跃
28
贡献者
人工分析
EDITORIAL推荐理由
kr8s 把 kubectl 的命令式体验搬进了 Python,get、create、scale、cordon、exec、portforward 等方法命名直观,学习曲线很浅。它不依赖 swagger 自动生成代码,全部为可读的手写实现,同时提供同步与 asyncio/trio 异步 API,适合脚本、运维工具与自动化平台。对于已经熟悉 kubectl 的开发者,几乎是「换个语言继续用」的体验。
适用场景
- 编写 Kubernetes 运维脚本与自动化任务
- 在 Python 服务中管理 Pod、Deployment 等资源
- 基于 asyncio/trio 构建高并发集群操作工具
- CI/CD 流水线中执行集群检查与变更
- 本地开发调试时替代 kubectl 的部分操作
优点
- API 高度贴近 kubectl,熟悉命令行即可快速上手
- 同时提供同步与异步接口,兼容 asyncio 和 trio
- 无 swagger 生成代码,源码可读、易扩展
- 内置客户端缓存与合理默认值,减少样板代码
- 提供 exec、portforward、cordon 等实用工具方法
缺点
- 相比官方 kubernetes-client,生态与文档积累仍较少
- 部分高级特性与 CRD 场景需自行验证兼容性
- 异步与同步 API 混用时需注意线程与事件循环管理
- 版本迭代较快,生产使用建议锁定版本
上手难度
入门
kr8s 是什么
kr8s 是一个面向 Kubernetes 的 Python 客户端库,目标是让已经会用 kubectl 的开发者几乎零成本迁移到 Python。它的 API 命名和操作方式都刻意贴近 kubectl,例如 get、create、scale、cordon、exec、portforward 等。
项目采用 BSD-3-Clause 许可,支持 Python 3.9 至 3.14,并覆盖多个 Kubernetes 版本。
核心特性
- kubectl 风格 API:方法名与命令行操作一一对应,学习曲线平缓。
- 合理默认值:自动处理认证与配置,减少样板代码。
- 手写可读代码:不使用 swagger 自动生成,便于阅读和二次开发。
- 同步 + 异步:同时提供标准 API 与基于
asyncio、trio的异步 API。 - 客户端缓存:避免到处传递 API 对象。
- 内置实用工具:如 Pod 操作、端口转发、节点封锁等。
快速上手
安装:
$ pip install kr8s
列出集群中的所有节点:
import kr8s
for node in kr8s.get("nodes"):
print(node.name)
创建一个 Pod:
from kr8s.objects import Pod
pod = Pod({
"apiVersion": "v1",
"kind": "Pod",
"metadata": {"name": "my-pod"},
"spec": {
"containers": [{"name": "pause", "image": "gcr.io/google_containers/pause"}]
},
})
pod.create()
扩缩容 Deployment:
from kr8s.objects import Deployment
deploy = Deployment.get("metrics-server", namespace="kube-system")
deploy.scale(1)
按标签筛选 Pod:
import kr8s
selector = {"component": "kube-scheduler"}
for pod in kr8s.get("pods", namespace=kr8s.ALL, label_selector=selector):
print(pod.namespace, pod.name)
常用操作示例
给 Pod 打标签
from kr8s.objects import Pod
pod = Pod("kube-apiserver", namespace="kube-system")
pod.label({"foo": "bar"})
快速生成 Pod
from kr8s.objects import Pod
pod = Pod.gen(name="example-1", image="nginx:latest")
pod.create()
封锁节点
from kr8s.objects import Node
node = Node("k8s-node-1")
node.cordon()
在 Pod 中执行命令
from kr8s.objects import Pod
pod = Pod.get("my-pod")
command = pod.exec(["uptime"])
print(command.stdout.decode())
端口转发
from kr8s.objects import Pod
pod = Pod.get("my-pod")
pf = pod.portforward(remote_port=1234, local_port=5678)
pf.start()
# 其他逻辑
pf.stop()
适用人群
如果你已经在用 kubectl 管理集群,又希望用 Python 编写自动化脚本、运维工具或平台服务,kr8s 会是一个上手成本很低的选择。官方文档站点提供了完整的示例与 asyncio 用法说明。
评论
- 暂无评论,来写第一条吧。