jnsgruk / lightkube

Modern lightweight kubernetes module for python

Home Page:https://lightkube.readthedocs.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool


Coverage Status pypi supported versions

Modern lightweight kubernetes module for python

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


  • Simple interface shared across all kubernetes APIs.
  • Extensive type hints to avoid common mistakes and to support autocompletion.
  • Models and resources generated from the swagger specifications using standard dataclasses.
  • Load/Dump resource objects from YAML.
  • Support for async/await
  • Support for installing a specific version of the kubernetes models (1.15 to 1.22)
  • Lazy instantiation of inner models.
  • Fast startup and small memory footprint as only needed models and resources can be imported.
  • Automatic handling of pagination when listing resources.

This module is powered by httpx.


This module requires python >= 3.6

pip install lightkube


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")

List nodes

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

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

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'}


Replace the previous config with a different content

config.data['key1'] = 'new value'

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')

Create resources defined in a file

from lightkube import Client, codecs

client = Client()
with open('deployment.yaml') as f:
    for obj in codecs.load_all_yaml(f):

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'),
client.replace(obj, 'metrics-server', namespace='kube-system')

Stream pod logs

from lightkube import Client

client = Client()
for line in client.log('my-pod', follow=True):

Unsupported features

The following features are not supported at the moment:

  • Special subresources attach, exec, portforward and proxy.
  • auth-provider authentication method is not supported. The supported authentication methods are token, username + password and exec.
ezoic increase your site revenue


Modern lightweight kubernetes module for python


License:MIT License


Language:Python 99.6%Language:Shell 0.4%