Skip to main content

Python client library for Kubernetes w/ EKS support

Project description

pykubeks

CircleCI PyPI Downloads PyPI Version License

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.

Features

  • HTTP interface using requests using kubeconfig for authentication
  • Python native querying of Kubernetes API objects

Installation

To install pykubeks, use pip:

pip install pykubeks

Usage

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

HTTPie

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.

Requirements

  • Python 2.7 or 3.3+
  • requests (included in install_requires)
  • PyYAML (included in install_requires)

License

The code in this project is licensed under the Apache License, version 2.0 (included in this repository under LICENSE).

Contributing

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

Code of Conduct

Contributor Covenant Code of Conduct

Commercial Support

No commercial support is available for this project.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pykubeks-0.1.0.tar.gz (19.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pykubeks-0.1.0-py2.py3-none-any.whl (27.5 kB view details)

Uploaded Python 2Python 3

File details

Details for the file pykubeks-0.1.0.tar.gz.

File metadata

  • Download URL: pykubeks-0.1.0.tar.gz
  • Upload date:
  • Size: 19.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.6

File hashes

Hashes for pykubeks-0.1.0.tar.gz
Algorithm Hash digest
SHA256 0791b3f7fe1f5c8c8bb2685ec217498d30990f47292b5715b106f9390210010c
MD5 67084c744bf88293d35d10b26d81f9e5
BLAKE2b-256 9f23a43f15421a22efa46390990a93b3124193e2c7e50bfc90d2300a3401ba31

See more details on using hashes here.

File details

Details for the file pykubeks-0.1.0-py2.py3-none-any.whl.

File metadata

  • Download URL: pykubeks-0.1.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 27.5 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.6

File hashes

Hashes for pykubeks-0.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 a5ce56d5ebcf8c6c663ddd5f26683556bb4bacc3aceb3e71a0b0834bdb081e24
MD5 521ac7e8596e1bab54899118be2e52fc
BLAKE2b-256 629f65df7f2fad12d30a56a41f5a7504e58683d5ba687af550d398a9b8c95391

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page