Skip to main content

Lightweight kubernetes client library

Project description

lightkube

Coverage Status

Modern lightweight kubernetes module for python

NOTICE: This project is still under development and not suitable for production usage.

Highlights

  • Simple interface shared across all kubernetes APIs.
  • Extensive type hints to avoid common mistakes and to support autocompletion (tested on PyCharm).
  • Defines models and resources generated from the swagger specifications. Models are defined using standard dataclasses.
  • Lazy instantiation of inner models.
  • Fast startup and small memory footprint as only needed models and resources can be loaded.
  • Automatic handling of pagination when listing resources.
  • Customizable handling of errors when watching resources.

This module is powered by httpx.

Installation

This module requires python >= 3.6

pip install lightkube

Usage

Read a pod

from lightkube import Client
from lightkube.resources.core_v1 import Pod

client = Client()
pod = client.get(Pod, name="my-pod", namespace="default")
print(pod.namespace.uid)

List nodes

from lightkube import Client
from lightkube.resources.core_v1 import Node

client = Client()
for node in client.list(Node):
    print(node.metadata.name)

Watch deployments

from lightkube import Client
from lightkube.resources.apps_v1 import Deployment

client = Client()
for op, dep in client.watch(Deployment, namespace="default"):
    print(f"{dep.namespace.name} {dep.spec.replicas}")

Create a config map

from lightkube.resources.core_v1 import ConfigMap
from lightkube.models.meta_v1 import ObjectMeta

config = ConfigMap(
    metadata=ObjectMeta(name='my-config', namespace='default'),
    data={'key1': 'value1', 'key2': 'value2'}
)

client.create(config)

Replace the previous config with a different content

config.data['key1'] = 'new value'
client.replace(config)

Patch an existing config

patch = {'metadata': {'labels': {'app': 'xyz'}}}
client.patch(ConfigMap, name='my-config', namespace='default', obj=patch)

Delete a namespaced resource

client.delete(ConfigMap, name='my-config', namespace='default')

Scale a deployment

from lightkube.resources.apps_v1 import Deployment
from lightkube.models.meta_v1 import ObjectMeta
from lightkube.models.autoscaling_v1 import ScaleSpec

obj = Deployment.Scale(
    metadata=ObjectMeta(name='metrics-server', namespace='kube-system'),
    spec=ScaleSpec(replicas=1)
)
client.replace(obj, 'metrics-server', namespace='kube-system')

Upcoming features

  • Support for async/await
  • Support for loading definitions from yaml files
  • Support for installing a specific version of the kubernetes models

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

lightkube-0.2.1-py3-none-any.whl (21.9 kB view hashes)

Uploaded Python 3

Supported by

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