Kubernetes Service
The Kubernetes service: resources in the platform’s Kubernetes cluster.
Kubernetes does not depend on a cloud: only the cluster’s credentials do. So
KubernetesService is implemented once, by KubectlKubernetesService, with
kubectl, and the cloud provider contributes
only the kubeconfig, with
update_kubeconfig(), e.g.
aws eks update-kubeconfig for AWS EKS.
The platform uses it through smarter.apps.infrastructure.services.infrastructure
.kubernetes. Tests replace it with configure_kubernetes().
from smarter.apps.infrastructure.services import infrastructure
infrastructure.kubernetes.apply_manifest(manifest)
- class smarter.apps.infrastructure.services.kubernetes.KubectlKubernetesService(provider=None, allow_in_tests=False, **kwargs)[source]
Bases:
KubernetesServiceThe platform’s Kubernetes cluster, through kubectl.
The cluster is ready once kubectl is configured, with the provider’s
update_kubeconfig(), and the environment’s namespace,smarter_settings.environment_namespace, exists.- Parameters:
provider (
Optional[CloudProvider]) – The cloud provider that writes the kubeconfig. None for a cluster whose kubeconfig is already in place.allow_in_tests (
bool) – Allow kubectl in the unit tests, e.g. when subprocess is mocked.
- apply_manifest(manifest)[source]
Create or update the resources of a manifest, with
kubectl apply.Resources that provision billable cloud resources, see
billable_resources(), are announced with the billable resource signals. Nothing is applied if the cluster is not ready.- Parameters:
manifest (
str) – The manifest, which may have several YAML documents.- Raises:
KubernetesServiceError – If the cluster rejects it.
- Return type:
- delete_resource(kind, name, namespace)[source]
Delete a resource by name.
A resource that does not exist counts as deleted.
- Return type:
- delete_resources(kinds, namespace, selector)[source]
Delete the resources of several kinds that match a label selector.
Idempotent. A selector is required, so that a namespace is never emptied by mistake.
- Return type:
- get_pod_logs(namespace, selector, container=None, tail=200)[source]
Return the most recent log lines of the pods that match a label selector.
- get_resource(kind, name, namespace)[source]
Return a resource, or None if it does not exist or the cluster is unavailable.
- class smarter.apps.infrastructure.services.kubernetes.KubernetesService(provider_name, *args, **kwargs)[source]
Bases:
InfrastructureServiceThe platform’s Kubernetes cluster.
Implementations provide the primitives:
apply_manifest(),get_resource(),list_resources(),delete_resource(),delete_resources()andget_pod_logs(). The ingress operations that LLMClient deployments use are built on them.- abstractmethod apply_manifest(manifest)[source]
Create or update the resources of a manifest.
- Raises:
KubernetesServiceError – If the cluster rejects them.
- Return type:
- certificate_wait_seconds: float = 60
Seconds between the checks of a cert-manager certificate, in
verify_ingress_resources().
- delete_ingress_resources(hostname, namespace)[source]
Delete a host’s Ingress, its cert-manager Certificate, and its TLS Secret.
- abstractmethod delete_resource(kind, name, namespace)[source]
Delete a resource by name.
A resource that does not exist counts as deleted.
- Return type:
- abstractmethod delete_resources(kinds, namespace, selector)[source]
Delete the resources of several kinds that match a label selector.
Idempotent. A selector is required, so that a namespace is never emptied by mistake.
- Return type:
- error_class
alias of
KubernetesServiceError
- abstractmethod get_pod_logs(namespace, selector, container=None, tail=200)[source]
Return the most recent log lines of the pods that match a label selector.
- abstractmethod get_resource(kind, name, namespace)[source]
Return a resource, or None if it does not exist or the cluster is unavailable.
- abstractmethod list_resources(kind, namespace, selector=None)[source]
Return the resources of a kind, optionally those that match a label selector.
- service_name: str = 'kubernetes'
The name of the service in signals and logs, see
InfrastructureServiceNames.
- verify_certificate(name, namespace)[source]
Whether a cert-manager Certificate exists, and is Ready, i.e. issued.
- verify_ingress_resources(hostname, namespace, max_attempts=30)[source]
Verify that a host’s Ingress, its cert-manager Certificate, and its TLS Secret exist.
The Ingress is named after the host, and the Certificate and Secret
<host>-tls.- Parameters:
- Return type:
- Returns:
Whether the Ingress, the Certificate, and the Secret are verified.
- smarter.apps.infrastructure.services.kubernetes.billable_resources(manifest)[source]
Return the resources of a manifest that provision billable cloud resources.
a PersistentVolumeClaim provisions a block storage volume.
a StatefulSet’s volumeClaimTemplates provision one volume per replica.
a Service of type LoadBalancer provisions a cloud load balancer.
- smarter.apps.infrastructure.services.kubernetes.configure_kubernetes(factory)[source]
Set the factory of the Kubernetes service that
get_kubernetes()returns.- Parameters:
factory (
Optional[Callable[[],KubernetesService]]) – Returns the service, or None to restore the default,KubectlKubernetesServicewith the configured cloud provider.- Return type: