Lightweight kubernetes client library
Project description
lightkube
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.20 to 1.35)
- 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.8
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 more data
patch = {"data": {"key3": "value3"}}
cm = client.patch(ConfigMap, name="my-config", obj=patch)
Remove the just added data key key3
# When using PatchType.MERGE, setting a value of a key/value to None, will remove the current item
patch = {'metadata': {"key3": None}}
client.patch(ConfigMap, name='my-config', namespace='default', obj=patch, patch_type=PatchType.MERGE)
Add a label
cm = client.set(ConfigMap, name="my-config", labels={'env': 'prod'})
Remove a label
cm = client.set(ConfigMap, name="my-config", labels={'env': None})
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)
Update Status of a deployment
from lightkube.resources.apps_v1 import Deployment
from lightkube.models.apps_v1 import DeploymentStatus
obj = Deployment.Status(
status=DeploymentStatus(observedGeneration=99)
)
client.apply(obj, name='metrics-server', namespace='kube-system')
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,portforwardandproxy. auth-providerauthentication method is not supported. The supported authentication methods aretoken,username+passwordandexec.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lightkube-0.19.1.tar.gz.
File metadata
- Download URL: lightkube-0.19.1.tar.gz
- Upload date:
- Size: 29.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c8526068024c194c02fbc0ca6021922feb4b1b9d741d330129f873b27e0fe97
|
|
| MD5 |
f618b159aecf36c7546beae997294f37
|
|
| BLAKE2b-256 |
7a44fbac9db896899b687b078cdd053462d56df05de0e27523b45dafd495fcf5
|
File details
Details for the file lightkube-0.19.1-py3-none-any.whl.
File metadata
- Download URL: lightkube-0.19.1-py3-none-any.whl
- Upload date:
- Size: 42.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
49fef08a1c7aa42082820111ffd5dbbaf78f54c99385810690fc9d94eef5c80d
|
|
| MD5 |
ffa4b6f5b47e3ed06fc771432e1dea17
|
|
| BLAKE2b-256 |
e6ef7faeb245e50e79452bc1f52b90931e7f6ccbcc19c884721f352c7abb4321
|