This is a fork of pykube which is no longer maintained. If you are interested in who brought that lovely little library into the world, please check out The Kel Project.
The reason for this fork is to release the AWS EKS support I wrote for
the original project, before it was abandoned. The new name pykubeks
is a portmanteau of pykube
and EKS
.
The python package name is still the same to make it simpler to "upgrade" to this new version which supports user credentials supplied from client-go credential plugins. See k8s documentation for details.
- HTTP interface using requests using kubeconfig for authentication
- Python native querying of Kubernetes API objects
To install pykubeks, use pip:
pip install pykubeks
Query for all ready pods in a custom namespace:
import operator
import pykube
api = pykube.HTTPClient(pykube.KubeConfig.from_file("/Users/<username>/.kube/config"))
pods = pykube.Pod.objects(api).filter(namespace="gondor-system")
ready_pods = filter(operator.attrgetter("ready"), pods)
Access any attribute of the Kubernetes object:
pod = pykube.Pod.objects(api).filter(namespace="gondor-system").get(name="my-pod")
pod.obj["spec"]["containers"][0]["image"]
Selector query:
pods = pykube.Pod.objects(api).filter(
namespace="gondor-system",
selector={"gondor.io/name__in": {"api-web", "api-worker"}},
)
pending_pods = pykube.objects.Pod.objects(api).filter(
field_selector={"status.phase": "Pending"}
)
Watch query:
watch = pykube.Job.objects(api, namespace="gondor-system")
watch = watch.filter(field_selector={"metadata.name": "my-job"}).watch()
# watch is a generator:
for watch_event in watch:
print(watch_event.type) # 'ADDED', 'DELETED', 'MODIFIED'
print(watch_event.object) # pykube.Job object
Create a ReplicationController:
obj = {
"apiVersion": "v1",
"kind": "ReplicationController",
"metadata": {
"name": "my-rc",
"namespace": "gondor-system"
},
"spec": {
"replicas": 3,
"selector": {
"app": "nginx"
},
"template": {
"metadata": {
"labels": {
"app": "nginx"
}
},
"spec": {
"containers": [
{
"name": "nginx",
"image": "nginx",
"ports": [
{"containerPort": 80}
]
}
]
}
}
}
}
pykube.ReplicationController(api, obj).create()
Delete a ReplicationController:
obj = {
"apiVersion": "v1",
"kind": "ReplicationController",
"metadata": {
"name": "my-rc",
"namespace": "gondor-system"
}
}
pykube.ReplicationController(api, obj).delete()
Check server version:
api = pykube.HTTPClient(pykube.KubeConfig.from_file("/Users/<username>/.kube/config"))
api.version
pykube can be used together with HTTPie for Kubernetes command line querying goodness. For example:
pip install httpie
http pykube://minikube/api/v1/services
The above example will construct an HTTP request to the cluster behind the minikube
context and
show you the response containing all services.
- Python 2.7 or 3.3+
- requests (included in
install_requires
) - PyYAML (included in
install_requires
)
The code in this project is licensed under the Apache License, version 2.0 (included in this repository under LICENSE).
By making a contribution to this project, you are agreeing to the Developer Certificate of Origin v1.1
(also included in this repository under DCO.txt).
Developer Certificate of Origin v1.1
Contributor Covenant Code of Conduct
No commercial support is available for this project.