Crate lmrc_kubernetes

Crate lmrc_kubernetes 

Source
Expand description

§Kubernetes Manager

A comprehensive Rust library for managing Kubernetes resources.

This library provides a high-level, ergonomic API for common Kubernetes operations including deployments, services, secrets, and namespace management.

§Features

  • Deployment Management: Create, update, rollback, and scale deployments
  • Service Management: Manage Kubernetes Services with different types (ClusterIP, NodePort, LoadBalancer)
  • Secret Management: Handle Docker registry secrets and generic secrets
  • Namespace Operations: Create and manage namespaces
  • Health Monitoring: Wait for deployments to be ready with detailed error reporting
  • Builder Pattern: Ergonomic API for constructing resource specifications

§Quick Start

use lmrc_kubernetes::{Client, ClientConfig};
use lmrc_kubernetes::deployment::{DeploymentSpec, ContainerSpec};
use lmrc_kubernetes::config::DeploymentOptions;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Create a client
    let config = ClientConfig::infer().await?;
    let client = Client::new(config, "default").await?;

    // Ensure namespace exists
    client.namespaces().ensure("my-app").await?;

    // Create a deployment
    let container = ContainerSpec::new("app", "nginx:1.21")
        .with_port(80)
        .with_env("ENV", "production");

    let deployment = DeploymentSpec::new("web-app")
        .with_replicas(3)
        .with_container(container);

    let options = DeploymentOptions::new()
        .timeout_secs(300)
        .wait(true);

    // Switch to the target namespace
    let app_client = client.with_namespace("my-app");
    app_client.deployments().apply(&deployment, &options).await?;

    // Get deployment status
    let status = app_client.deployments().status("web-app").await?;
    println!("Ready: {}/{}", status.ready_replicas, status.replicas);

    Ok(())
}

§Configuration

The library supports multiple ways to configure Kubernetes access:

use lmrc_kubernetes::ClientConfig;

// Infer from environment (tries in-cluster, then KUBECONFIG, then ~/.kube/config)
let config = ClientConfig::infer().await?;

// Use a specific kubeconfig file
let config = ClientConfig::from_kubeconfig("/path/to/kubeconfig").await?;

// Use in-cluster configuration (when running inside a pod)
let config = ClientConfig::in_cluster()?;

// Customize field manager name
let config = ClientConfig::infer().await?
    .with_field_manager("my-app");

Re-exports§

pub use config::ClientConfig;
pub use config::DeploymentOptions;
pub use config::RollbackOptions;
pub use error::Error;
pub use error::Result;
pub use deployment::ContainerSpec;
pub use deployment::DeploymentManager;
pub use deployment::DeploymentSpec;
pub use deployment::DeploymentStatus;
pub use deployment::DeploymentStrategy;
pub use deployment::ExecProbe;
pub use deployment::HttpGetProbe;
pub use deployment::KeyToPath;
pub use deployment::ProbeSpec;
pub use deployment::ResourceRequirements;
pub use deployment::TcpSocketProbe;
pub use deployment::Volume;
pub use deployment::VolumeMount;
pub use deployment::VolumeSource;
pub use service::ServiceManager;
pub use service::ServiceSpec;
pub use service::ServiceType;
pub use secret::SecretManager;
pub use namespace::NamespaceManager;
pub use configmap::ConfigMapManager;
pub use configmap::ConfigMapSpec;
pub use ingress::IngressManager;
pub use ingress::IngressRule;
pub use ingress::IngressSpec;
pub use ingress::IngressTLS;
pub use ingress::PathType;
pub use gateway::GatewayManager;
pub use gateway::GatewaySpec;
pub use gateway::HTTPRoute;
pub use gateway::HTTPRouteRule;
pub use gateway::Protocol;
pub use networkpolicy::NetworkPolicyManager;
pub use networkpolicy::NetworkPolicySpec;
pub use networkpolicy::PolicyRule;
pub use networkpolicy::PolicyType;
pub use networkpolicy::PortProtocol;
pub use job::JobManager;
pub use job::JobSpec;
pub use job::RestartPolicy;
pub use cronjob::ConcurrencyPolicy;
pub use cronjob::CronJobManager;
pub use cronjob::CronJobSpec;
pub use pvc::AccessMode;
pub use pvc::PersistentVolumeClaimSpec;
pub use pvc::PvcManager;
pub use pvc::StorageClass;
pub use hpa::HpaManager;
pub use hpa::HpaSpec;
pub use hpa::MetricTarget;
pub use hpa::MetricType;
pub use hpa::ScaleTargetRef;

Modules§

config
Configuration types for the Kubernetes manager.
configmap
ConfigMap management for Kubernetes.
cronjob
CronJob management for Kubernetes.
deployment
Deployment management for Kubernetes.
error
Error types for the Kubernetes manager library.
gateway
Gateway API management for Kubernetes.
hpa
HorizontalPodAutoscaler (HPA) management.
ingress
Ingress management for Kubernetes.
job
Job management for Kubernetes.
namespace
Namespace management for Kubernetes.
networkpolicy
NetworkPolicy management for Kubernetes.
pvc
PersistentVolumeClaim (PVC) management.
secret
Secret management for Kubernetes.
service
Service management for Kubernetes.

Structs§

Client
The main Kubernetes client for managing cluster resources.