Skip to content

v0.1.0

Choose a tag to compare

@yuval-gr yuval-gr released this 12 May 08:11
· 2 commits to v0.1 since this release
1ad38ed

karta v0.1.0

This release completes the project rename from ri / krt to karta , decouples the library from sigs.k8s.io/controller-runtime , and introduces native suspend / resume support on the CRD. See Breaking changes for migration steps.


🌟 Highlights

🆕 Project rename to karta API group is now run.ai/v1alpha1 , the CRD Kind is Karta , and the Helm chart is named karta. (#42 , #50)
🪶 Zero controller-runtime dependency karta no longer imports sigs.k8s.io/controller-runtime. Consumers that only need the CRD types or the resource helpers no longer inherit it transitively. (#62)
⏸️ Suspend / Resume support New SuspendDefinition field on the CRD , and new resource statuses Suspended , Suspending , Resuming. (#56)

📦 Install

Helm chart ( from GHCR ) :

helm install karta oci://ghcr.io/run-ai/karta --version 0.1.0

Go consumers :

go get github.com/run-ai/karta@v0.1.0
import karta "github.com/run-ai/karta/pkg/api/runai/v1alpha1"

📚 Compatibility

Kubernetes tested against v1.30 – v1.34 ( k8s.io/api v0.35.1 )
Go 1.25.9 or later
Helm 3.14 or later

⚠️ Breaking changes

1. Project rename : ri / krtkarta

was now
CRD Kind ResourceInterface Karta
API group optimization.nvidia.com/v1alpha1 run.ai/v1alpha1
Go package github.com/run-ai/karta/pkg/api/optimization/v1alpha1 github.com/run-ai/karta/pkg/api/runai/v1alpha1
Field on ComponentFactory : ri *ResourceInterface karta *Karta
Helm chart krt karta

Cluster migration — existing CRDs need to be re-applied under the new GVK :

kubectl get resourceinterfaces.optimization.nvidia.com -o yaml | \
    sed 's|optimization.nvidia.com/v1alpha1|run.ai/v1alpha1|; s|kind: ResourceInterface|kind: Karta|' | \
    kubectl apply -f -

kubectl delete crd resourceinterfaces.optimization.nvidia.com

Go consumer migration :

- import ri "github.com/run-ai/karta/pkg/api/optimization/v1alpha1"
+ import karta "github.com/run-ai/karta/pkg/api/runai/v1alpha1"

- var obj ri.ResourceInterface
+ var obj karta.Karta

- factory := resource.NewComponentFactoryFromObject(myRi, kubeObj)
+ factory := resource.NewComponentFactoryFromObject(myKarta, kubeObj)

2. sigs.k8s.io/controller-runtime no longer a karta dependency

karta now uses k8s.io/apimachinery directly for the two things it previously needed from controller-runtime :

was now
&scheme.Builder{GroupVersion: ...} from controller-runtime/pkg/scheme runtime.NewSchemeBuilder(addKnownTypes) from k8s.io/apimachinery/pkg/runtime
client.Object from controller-runtime/pkg/client ( in NewComponentFactoryFromObject and GetResource ) local KubernetesObject interface ( metav1.Object + runtime.Object )

Consumer impact : no source code changes required. Go matches interfaces structurally ( by method set ) , so :

import "sigs.k8s.io/controller-runtime/pkg/client"

var pod client.Object = &corev1.Pod{...}
factory := resource.NewComponentFactoryFromObject(myKarta, pod)  // still compiles
obj, _ := factory.GetResource()
var asClientObject client.Object = obj                            // still compiles

Cleanup opportunity : consumers that only had sigs.k8s.io/controller-runtime in their go.mod because karta dragged it in can now drop it :

go get sigs.k8s.io/controller-runtime@none  # if you don't otherwise use it
go mod tidy

This is the dominant pattern across major K8s OSS — see the same idiom in kubevirt/api , prometheus-operator , tektoncd/pipeline , cert-manager , cluster-api , knative/pkg kmeta.Accessor , and crossplane-runtime resource.Object.


✨ New features

  • Suspend / Resume definitions and statuses — new SuspendDefinition on the CRD , plus new resource statuses Suspended , Suspending , Resuming. (#56 by @TomB30)
  • ValidateParsedJQ is now exported — external consumers that already hold a compiled *gojq.Query can run the read-only / safe-expression check without re-parsing. (#53 by @AviadHayumi)
  • Helm chart published to GHCR on every release — pull with helm install karta oci://ghcr.io/run-ai/karta --version 0.1.0. (#27 by @AviadHayumi)
  • Chart version bump enforcement in CIct lint blocks PRs that change the chart without bumping Chart.yaml version. Matches the prometheus-operator / argo enforcement model. (#48 by @AviadHayumi)
  • docs/examples/*.yaml validated in CI — example Kartas are exercised by CI so docs cant silently drift from the schema. (#61 by @Isan-Rivkin)
  • Issue templates + code of conduct — bug / feature templates plus a contributor CoC. (#38 by @yuval-gr)
  • Helm chart annotated with OCI sourcehelm.sh/chart-source annotation links chart back to the GHCR package page. (#49 by @AviadHayumi)

🐛 Bug fixes

  • Repaired docs/examples/mpijob.yaml and simplified the pytorch running mapping. (#58 by @lavianalon)
  • Removed accidentally pushed docs/ri-studio/ directory. (#40 by @ronlv10)
  • Fixed formatting and validation in issue templates. (#41 by @yuval-gr)

🧹 Maintenance

  • Renamed rikrt across the codebase ( first half of the rename to karta ). (#42 by @AviadHayumi)
  • Renamed Helm chart krtkarta ( finishing the rename ). (#50 by @AviadHayumi)
  • Bumped golang.org/x/net to v0.51.0 ( security ). (#45 by @yuval-gr)
  • Updated Go toolchain to 1.25.9. (#30 by @yuval-gr)

📊 Dependencies

Added

nothing

Changed

  • golang.org/x/net v0.39.0 → v0.51.0
  • Go toolchain 1.25.7 → 1.25.9
  • k8s.io/api v0.34.x → v0.35.1
  • k8s.io/apimachinery v0.34.x → v0.35.1

Removed

  • sigs.k8s.io/controller-runtime ( previously v0.23.1 ) — dropped entirely
  • sigs.k8s.io/controller-runtime/pkg/client ( transitive ) — no longer pulled in
  • sigs.k8s.io/controller-runtime/pkg/scheme ( transitive ) — no longer pulled in

🤝 Contributors

thanks to everyone who shipped this release :

@AviadHayumi , @Isan-Rivkin , @TomB30 , @lavianalon , @ronlv10 , @yuval-gr


Full changelog : v0.0.12...v0.1.0
Helm chart : oci://ghcr.io/run-ai/karta:0.1.0