You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[CloudCoil](https://github.com/cloudcoil/cloudcoil) - Production-ready Python client for Kubernetes with async support
I've been working on improving the Python development experience for Kubernetes, and I'm excited to share CloudCoil - a modern K8s client that brings features like async/await, type safety, and integrated testing to the Python ecosystem.
Why another Kubernetes client?
In the Python ecosystem, we've been missing features that Go developers take for granted - things like robust client implementations, proper type safety, and integrated testing tools. CloudCoil aims to fix this by providing:
1) Production-focused features:
* 🔥 Elegant, Pythonic API - Feels natural to Python developers
* ⚡ Async First - Native async/await support for high performance
* 🛡️ Type Safe - Full mypy support and runtime validation
* 🧪 Testing Ready - Built-in pytest fixtures for K8s integration tests
* 📦 Zero Config - Works with your existing kubeconfig
* 🪶 Minimal Dependencies - Only requires httpx, pydantic, and pyyaml
2) First-class operator support:
- [cert-manager](https://github.com/cloudcoil/models-cert-manager)
- [FluxCD](https://github.com/cloudcoil/models-fluxcd)
- [Kyverno](https://github.com/cloudcoil/models-kyverno)
(More coming soon - let me know what you'd like to see!)
3) Rich features for production use:
Resource watching with async support:
async for event_type, pod in await core.v1.Pod.async_watch(
field_selector="metadata.name=mypod"
):
if event_type == "DELETED":
break
Smart wait conditions:
pod = core.v1.Pod.get("test-pod")
status = await pod.async_wait_for({
"succeeded": lambda _, pod: pod.status.phase == "Succeeded",
"failed": lambda _, pod: pod.status.phase == "Failed"
}, timeout=300)
Dynamic CRD support:
DynamicCRD = resources.get_dynamic_resource(
"MyCustomResource",
"example.com/v1"
)
resource = DynamicCRD(
metadata={"name": "example"},
spec={"someField": "value"}
).create()
4) Installation:
Choose your K8s version:
# Latest version
pip install cloudcoil[kubernetes]
# Specific K8s version
pip install cloudcoil[kubernetes-1-32]
The project is Apache 2.0 licensed and ready for production use. We'd especially love feedback from:
- Teams using Python for K8s automation
- Anyone building operators/controllers in Python
- DevOps engineers managing multiple clusters
Links:
* GitHub: https://github.com/cloudcoil/cloudcoil
* Docs: https://cloudcoil.github.io/cloudcoil
* PyPI: https://pypi.org/project/cloudcoil
Looking forward to your feedback, especially on what operators you'd like to see supported next!
0 commit comments