--- title: Move a manifest install to the Helm charts description: "Move an OME install from make install or kubectl apply -k to the ome-crd and ome-resources Helm charts, and keep your InferenceServices, models and runtimes in place." --- If you installed OME with `make install` or `kubectl apply -k config/default`, move it to the Helm charts that [Install OME](../../getting-started/install.md) uses, as the releases `ome-crd` and `ome`. Helm takes over the existing objects, so your InferenceServices, models and runtimes stay in place. Since v1.3, the charts also set defaults that a manifest install leaves out, such as the [replica defaults](set-replica-defaults.md) and the [PodDisruptionBudget defaults](../deploy-models/configure-pod-disruption-budgets.md).
- OME installed with `make install` or `kubectl apply -k config/default`, which install it into the namespace `ome`. - `kubectl`, with the rights that [Install OME](../../getting-started/install.md) lists. - Helm 4, or Helm 3.17 or newer, for the `--take-ownership` flag. - cert-manager, installed as in [Step 1 of Install OME](../../getting-started/install.md#step-1-install-cert-manager), even if your manifest install ran with `OME_ENABLE_SELF_SIGNED_CA=true`.
Install the charts at the version that your manifest install came from. The commands use `1.2.2`, for a checkout of v1.2.2. For a build of `main`, install the charts from the checkout as in [Install from source](../../getting-started/install.md#install-from-source), and add `--take-ownership` to both commands. ## Step 1: Prepare the InferenceService CRD The manifest install's `inferenceservices.ome.io` CRD has a conversion webhook, and the annotation `cert-manager.io/inject-ca-from`, which has cert-manager write a CA bundle into it. The chart's CRD has neither, and Helm leaves both in place when it takes the CRD over. Remove the annotation, so that cert-manager stops writing the CA bundle, and then the conversion webhook: ```bash kubectl annotate crd inferenceservices.ome.io cert-manager.io/inject-ca-from- kubectl patch crd inferenceservices.ome.io --type=json -p '[{"op":"remove","path":"/spec/conversion"}]' ``` ```output customresourcedefinition.apiextensions.k8s.io/inferenceservices.ome.io annotated customresourcedefinition.apiextensions.k8s.io/inferenceservices.ome.io patched ``` The CRD serves a single version, so removing the conversion webhook leaves your InferenceServices as they are. ## Step 2: Install the ome-crd chart Install the `ome-crd` chart over the existing CRDs: ```bash helm upgrade --install ome-crd oci://ghcr.io/moirai-internal/charts/ome-crd \ --version 1.2.2 \ --namespace ome \ --take-ownership ``` Helm installs the release and reports its status as `deployed`. ## Step 3: Install the ome release Install the `ome-resources` chart over the existing controller and model agent. The manifest install's model agent keeps model weights under `/raid/models`, so keep that path in your values file: ```yaml title="values.yaml" modelAgent: enabled: true hostPath: /raid/models ``` === "Helm 4" ```bash helm upgrade --install ome oci://ghcr.io/moirai-internal/charts/ome-resources \ --version 1.2.2 \ --namespace ome \ --take-ownership \ -f values.yaml \ --server-side=false ``` === "Helm 3" ```bash helm upgrade --install ome oci://ghcr.io/moirai-internal/charts/ome-resources \ --version 1.2.2 \ --namespace ome \ --take-ownership \ -f values.yaml ``` Helm installs the release and reports its status as `deployed`. Since v1.3, the command can fail with the [webhook error of a first install](../../getting-started/install.md#the-first-install-fails-with-a-webhook-error), with a message that starts with `Error: failed to create resource:`. Run it again as that section describes. Pass the same values file to every later upgrade, as [Step 3 of Install OME](../../getting-started/install.md#step-3-install-ome) explains, so that the model agent keeps its path. ## Step 4: Delete the leftover objects The charts leave out two objects of the manifest install, which are unused after the move. Delete them: ```bash kubectl delete service ome-controller-manager-metrics-service -n ome kubectl delete secret ome-webhook-server-secret -n ome ``` ```output service "ome-controller-manager-metrics-service" deleted from ome namespace secret "ome-webhook-server-secret" deleted from ome namespace ``` The runtimes and models that `make install` applied from `config/runtimes` and `config/models` stay in place, outside both releases. Then check the controller and the model agent as in [Step 4 of Install OME](../../getting-started/install.md#step-4-verify-the-installation). ## Troubleshooting ### Helm can't take over an existing object Helm installs only over objects that it manages. Without `--take-ownership`, it stops at the first existing object and names it: ```text Error: unable to continue with install: CustomResourceDefinition "acceleratorclasses.ome.io" in namespace "" exists and cannot be imported into the current release: invalid ownership metadata; label validation error: missing key "app.kubernetes.io/managed-by": must be set to "Helm"; annotation validation error: missing key "meta.helm.sh/release-name": must be set to "ome-crd"; annotation validation error: missing key "meta.helm.sh/release-namespace": must be set to "ome" ``` Run the command again with `--take-ownership`, on Helm 4, or Helm 3.17 or newer. ## Next steps - [Configure the controller](configure-the-controller.md): tune the OME controller manager's command-line flags. - [Set replica defaults](set-replica-defaults.md): choose the `minReplicas` and `maxReplicas` that components get by default. - [Run the model agent](model-agent.md): configure the model agent that downloads models to each node.