> ## Documentation Index
> Fetch the complete documentation index at: https://docs.macstadium.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Orka Self-Service: Migrating NFS Images to OCI with Harbor

> Migrate NFS-based Orka images to OCI format using Harbor on Orka 3.5. Covers orka3 regcred, orka3 vm push, imagecache, and updating CI/CD integrations.

<Note>
  **Requires Orka 3.5 or later.** If you're on an earlier version, see the [release notes](/orka/orka-upgrades-and-release-notes/orka-upgrades) for your version before proceeding.
</Note>

This guide walks you through the process of migrating your existing NFS-based images to OCI using Harbor storage in Orka 3.5.

### Prerequisites

* Orka cluster upgraded to version 3.5.0 or later
* Harbor instance provisioned by MacStadium
* Harbor credentials (URL, username, password) from your IP Plan
* VPN connection configured per your IP plan
* List of existing NFS images to migrate
* Inventory of all integrations currently using these images

### Step 1: Upgrade to Orka 3.5+

You can verify your Orka version using the Orka3 CLI command `orka3 version`

If an upgrade is needed:

* [Contact MacStadium Support](mailto:support@macstadium.com) to schedule the upgrade
* Review the Orka v3.5 (or later) [release notes](https://docs.macstadium.com/orka/orka-upgrades-and-release-notes/orka-35-release-notes) to better understand how upgrading may impact you
* Plan for your scheduled upgrade maintenance window

### Step 2: Provision Harbor OCI Registry

Submit a support request for Harbor instance provisioning.

* Email [support@macstadium.com](mailto:support@macstadium.com)
* Request: "Harbor OCI registry provisioning for Orka 3.5"

Once the request is complete, you will receive the following:

* A Harbor instance URL (Usually the last IP in your Orka subnet, e.g., `https://10.221.189.254`)
* Harbor metrics URL (e.g., `http://10.221.189.254:9090/metrics`)
* Project Admin username + password
* Default project name (usually this is set to `library`)

Access the [Harbor web interface](/orka/oci-images/using-harbor-oci-storage-with-the-orka-cli):

* Connect to VPN (per your IP plan)
* Navigate to your Harbor instance URL in your browser
* Log in using the credentials provided in your IP Plan
* Verify you can access your project dashboard

### Step 3: Configure Orka to Connect to Harbor

* Add your Harbor registry credentials to Orka using the Orka3 CLI:

```
orka3 regcred add \
  -u <OCI.User> \
  -p <OCI.Pass> \
  <OCI.FQDN>
```

* Verify your credentials using

```
orka3 regcred list
```

* **Note:** Registry credentials are namespace-specific. If you use namespaces other than `orka-default`, add credentials to each namespace:

```
orka3 regcred add \
  -u <user> \
  -p <pass> \
  <FQDN> \
  --namespace <NAMESPACE>
```

### Step 4: Convert NFS Images to OCI Format

* Confirm the image(s) you'd like to migrate by running `orka3 image list` and noting the image(s) to convert.
* Deploy a VM from the specified NFS image:

```
orka3 vm deploy \
  --image "<nfs-image-name>" \
  --name "migration-temp-vm" \
  --cpu 4 \
  --memory 8G
```

* Wait for the VM to begin running

```
orka3 vm list migration-temp-vm
```

* Push the VM as an OCI image to Harbor:

```
    orka3 vm push migration-temp-vm \
      <Harbor-FQDN>/library/<new-image-name>:<tag>
```

* Monitor push status using

```
orka3 vm get-push-status vm-push-temp-vm
```

* After pushing to Harbor, cache the new OCI image on your Orka nodes:

```
orka3 imagecache add <Harbor-FQDN>/library/<image-name>:<tag> --all
```

* To cache the image on a specific node, run:

```
orka3 imagecache add <Harbor-FQDN>/library/<image-name>:<tag> --nodes <node-name>
```

* Monitor image caching status:

```
orka3 imagecache info <Harbor-FQDN>/library/<image-name>:<tag>
```

* Clean up the temporary VM by running:

```
orka3 vm delete migration-temp-vm
```

To do so via the Harbor web UI:

* Log in to the Harbor web interface
* Navigate to 'Projects' -> 'Library'
* Click 'Repositories'
* Verify your image appears with the correct tag, repeating the process for each NFS image to migrate

### Step 5: Update CI/CD Integrations

#### GitHub Actions

Old workflow example:

```
name: Run build
uses: macstadium/orka-actions@v1
with:
  image: ventura-base
  cpu: 4
```

New workflow example:

```
- name: Run build
  uses: macstadium/orka-actions@v1
  with:
    image: 10.221.189.254/library/sequoia-base:v1.0
    cpu: 4
```

### Jenkins

Old Jenkinsfile example:

```
orkaVM(image: 'ventura-base', cpu: 4, memory: '8G') { 
// build steps 
}
```

New Jenkinsfile example:

```
orkaVM(image: '10.221.189.254/library/sequoia-base:v1.0', cpu: 4, memory: '8G') { 
// build steps 
}
```

#### GitLab CI

Old `.gitlab-ci.yml` example:

```
variables:
  ORKA_IMAGE: ventura-base
```

New `.gitlab-ci.yml` workflow example:

```
variables:
  ORKA_IMAGE: 10.221.189.254/library/sequoia-base:v1.0
```

#### Packer Templates

Old HCL:

```
source "macstadium-orka" "build" {
  source_image = "sequoia-base"
  image_name   = "custom-build"
}
```

New HCL:

```
source "macstadium-orka" "build" {
  source_image = "10.221.189.254/library/sequoia-base:v1.0"
  image_name   = "10.221.189.254/library/custom-build:v1.0"
}
```

Packer-built images should also be pushed to Harbor using the new OCI format.

### Validation and Testing

* Example test VM deployment from an OCI image

```
orka3 vm deploy \
  --image "10.221.189.254/library/sequoia-base:v1.0" \
  --name "validation-vm" \
  --cpu 4 \
  --memory 8G
```

* Verify the VM boots successfully using

```
    orka3 vm list validation-vm 
```

* Use `orka3 vm vnc validation-vm` to get the VNC connection information for the VM
* Run any integration smoke tests your organization uses
* Monitor Harbor storage

### Migration Best Practices

* Keep NFS images available during transition
* Migrate integrations gradually (not all at once)
* Test OCI images thoroughly before removing NFS versions
* Maintain rollback capability
* Use consistent, semantic naming conventions for images, such as:

```
    <Harbor-FQDN>/library/<os-version>-<tools>:<semantic-version> 

* (e.g. `10.221.189.254/library/sequoia-xcode16:v1.0`)
```

* Pre-cache frequently used images on all nodes
* Schedule image caching during off-peak hours

For more information on using Harbor with the Orka3 CLI, see [Using Harbor OCI Storage with the Orka CLI](/orka/oci-images/using-harbor-oci-storage-with-the-orka-cli).
