Skip to main content

Lightweight kubernetes client library

Project description

lightkube

Coverage Status pypi supported versions

Modern lightweight kubernetes module for python

Highlights

  • 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.16 to 1.31)
  • 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.

Installation

This module requires python >= 3.7

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 adding a label

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

Remove the label app

# When using PatchType.STRATEGIC (default), setting a value of a key/value to None, will remove the current item 
patch = {'metadata': {'labels': {'app': None}}}
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):
        client.create(obj)

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)

Create and modify resources using server side apply

Note: field_manager is required for server-side apply. You can specify it once in the client constructor or when calling apply(). Also apiVersion and kind need to be provided as part of the object definition.

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

client = Client(field_manager="my-manager")
config = ConfigMap(
    # note apiVersion and kind need to be specified for server-side apply
    apiVersion='v1', kind='ConfigMap',
    metadata=ObjectMeta(name='my-config', namespace='default'),
    data={'key1': 'value1', 'key2': 'value2'}
)

res = client.apply(config)
print(res.data)
# prints {'key1': 'value1', 'key2': 'value2'}

del config.data['key1']
config.data['key3'] = 'value3'

res = client.apply(config)
print(res.data)
# prints {'key2': 'value2', 'key3': 'value3'}

Stream pod logs

from lightkube import Client

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

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.

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

lightkube-0.15.5.tar.gz (44.4 kB view details)

Uploaded Source

Built Distribution

lightkube-0.15.5-py3-none-any.whl (38.2 kB view details)

Uploaded Python 3

File details

Details for the file lightkube-0.15.5.tar.gz.

File metadata

  • Download URL: lightkube-0.15.5.tar.gz
  • Upload date:
  • Size: 44.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.12

File hashes

Hashes for lightkube-0.15.5.tar.gz
Algorithm Hash digest
SHA256 5edbfd1aee83398374179f41f4897519e8f89dc9754c866d40bbdc68c49c033f
MD5 a21766c516e0ee581d9714b4dbedbe27
BLAKE2b-256 5d061e38e6c4f99369786380b321c795c8f29ea78997e34bf8f965e82faf7ead

See more details on using hashes here.

File details

Details for the file lightkube-0.15.5-py3-none-any.whl.

File metadata

  • Download URL: lightkube-0.15.5-py3-none-any.whl
  • Upload date:
  • Size: 38.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.12

File hashes

Hashes for lightkube-0.15.5-py3-none-any.whl
Algorithm Hash digest
SHA256 0d93be743cbeae022d18a1d3fbb45d1df58f9a603ea0061237842658f68d93fd
MD5 831fd34412abf812da42c39ce1624558
BLAKE2b-256 d3cc916cbf49ebad6dc190f1b51fbd42dc5b3258b9f4660586171d64952ace7f

See more details on using hashes here.

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