Skip to main content

A transparent, lightweight Kubernetes manifest generator

Reason this release was yanked:

Old and deprecated.

Project description

k8smith

CI PyPI Python 3.11+ License: GPL v3

A transparent, lightweight Kubernetes manifest generator.

Philosophy

  • Transparency over abstraction — Generated YAML is predictable; no hidden defaults
  • Composition over inheritance — Build complex resources from simple pieces
  • Type safety at the boundary — Validate inputs with Pydantic, output plain dicts
  • Cloud-agnostic core — Vanilla K8s resources work anywhere; cloud extensions are optional

Installation

pip install k8smith
# or
uv add k8smith

Quick Start

import k8smith as kk

# Create a deployment
from k8smith import (
    DeploymentSpec,
    Container,
    PodSpec,
    PodTemplateSpec,
    ResourceRequirements,
    ResourceQuantity,
    build_deployment,
    Manifest,
)

spec = DeploymentSpec(
    name="web",
    namespace="production",
    replicas=3,
    template=PodTemplateSpec(
        spec=PodSpec(
            containers=[
                Container(
                    name="web",
                    image="nginx:1.25",
                    resources=ResourceRequirements(
                        requests=ResourceQuantity(cpu="100m", memory="128Mi"),
                        limits=ResourceQuantity(memory="256Mi"),
                    ),
                )
            ]
        )
    ),
)

deployment = build_deployment(spec)

# Collect resources into a manifest
manifest = Manifest()
manifest.add(deployment)
print(manifest.to_yaml())

GPU Support (no workarounds needed!)

from k8smith import (
    Container,
    ResourceRequirements,
    ResourceQuantity,
)

container = Container(
    name="ml-worker",
    image="ml-training:v1",
    resources=ResourceRequirements(
        requests=ResourceQuantity(memory="4Gi", cpu="1"),
        limits=ResourceQuantity(
            memory="8Gi",
            extended={"nvidia.com/gpu": "1"},  # Just works!
        ),
    ),
)

GKE Extensions

from k8smith.gke import (
    GatewaySpec,
    HTTPRouteSpec,
    build_gateway,
    build_httproute,
)

gateway = build_gateway(GatewaySpec(
    name="main-gateway",
    namespace="gateway",
    gateway_class_name="gke-l7-global-external-managed",
    listeners=[{
        "name": "https",
        "port": 443,
        "protocol": "HTTPS",
    }],
))

Core Resources

Resource Builder
Deployment build_deployment(DeploymentSpec)
Service build_service(ServiceSpec)
StatefulSet build_statefulset(StatefulSetSpec)
DaemonSet build_daemonset(DaemonSetSpec)
CronJob build_cronjob(CronJobSpec)
ConfigMap build_configmap(ConfigMapSpec)
Secret build_secret(SecretSpec)
HPA build_hpa(HPASpec)
PDB build_pdb(PDBSpec)
ServiceAccount build_serviceaccount(ServiceAccountSpec)
Namespace build_namespace(NamespaceSpec)
Role build_role(RoleSpec)
ClusterRole build_clusterrole(ClusterRoleSpec)
RoleBinding build_rolebinding(RoleBindingSpec)
ClusterRoleBinding build_clusterrolebinding(ClusterRoleBindingSpec)

GKE Resources

Resource Builder
Gateway build_gateway(GatewaySpec)
HTTPRoute build_httproute(HTTPRouteSpec)
HealthCheckPolicy build_healthcheckpolicy(HealthCheckPolicySpec)
GCPBackendPolicy build_gcp_backend_policy(GCPBackendPolicySpec)
PodMonitoring build_pod_monitoring(PodMonitoringSpec)
ClusterPodMonitoring build_cluster_pod_monitoring(ClusterPodMonitoringSpec)

Why not cdk8s?

k8smith was created to replace cdk8s after encountering these issues:

cdk8s Problem k8smith Solution
Size.gibibytes(6) outputs 6144Mi Strings stay as strings: "6Gi"
Can't add nvidia.com/gpu via resources Built into ResourceQuantity.extended
Adds hostNetwork: false when not set Only outputs what you specify
Requires label cleanup post-processing No generated labels
JSII/Node.js dependency Pure Python

License

GPL-3.0 - See LICENSE for details.

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

k8smith-0.2.1.tar.gz (49.1 kB view details)

Uploaded Source

Built Distribution

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

k8smith-0.2.1-py3-none-any.whl (42.6 kB view details)

Uploaded Python 3

File details

Details for the file k8smith-0.2.1.tar.gz.

File metadata

  • Download URL: k8smith-0.2.1.tar.gz
  • Upload date:
  • Size: 49.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for k8smith-0.2.1.tar.gz
Algorithm Hash digest
SHA256 9769bc88421b26292245ac80a94b11a962db74cba6783cc856bcac2d04b190b1
MD5 670fdbcf81a0ff814b481ec27876fc59
BLAKE2b-256 ab639f34c893e1536953f1cfdde7026896bae775113db3ab8183f9a45e719263

See more details on using hashes here.

Provenance

The following attestation bundles were made for k8smith-0.2.1.tar.gz:

Publisher: release.yml on eliminyro/k8smith

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file k8smith-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: k8smith-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 42.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for k8smith-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b0451b5af218a5889f472deaae9b8e9b233344d6e345ba252e8f970821af4018
MD5 6f7d70bd3dee34e8b89eb5ab7f30af94
BLAKE2b-256 59637af3dffc979fa63c82a17dc5071b27a66f857ecc102d82e3d0ff7e9201b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for k8smith-0.2.1-py3-none-any.whl:

Publisher: release.yml on eliminyro/k8smith

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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