Additional Application Features

Using The Same Microservice Component Multiple Times In an App

Since UCS 2.5.0, an application manifest may specify the same microservice multiple times. For example, below we have an app that uses microservice A twice and microservice B once:

specVersion: '2.5.0'

version: 0.0.1

doc: README.md

name: multiple-same-ms-example

description: MS A is used twice

dependencies:
- ucf.svc.microserviceA:0.0.1
- ucf.svc.microserviceB:0.0.1

components:
- name: microserviceA one
  type: ucf.service.microserviceA
  parameters:
    paramA1: 100
    paramA2:
    - name: tango
    imagePullSecrets:
    - name: ngc-docker-reg-secret
- name: microserviceA two
  type: ucf.service.microserviceA
  parameters:
    paramA1: 200
    paramA2:
    - name: waltz
    imagePullSecrets:
    - name: ngc-docker-reg-secret
- name: microserviceB
  type: ucf.service.microserviceB
  parameters:
    paramB1: false
  secrets:
    some-secret-name: some-secret

connections:
  microserviceA one/http: microserviceB/http
  microserviceA two/http: microserviceB/http

This feature is implemented using Helm Chart aliasing, with the resuliting Chart.yaml looking like this:

apiVersion: v2
name: multiple-same-ms-example
description: MS A is used twice
type: application
version: 0.1.0
appVersion: ''
dependencies:
- name: ucf.svc.microserviceB
  version: 0.0.1
- name: ucf.svc.microserviceA
  version: 0.0.1
  alias: microserviceA one
- name: ucf.svc.microserviceA
  version: 0.0.1
  alias: microserviceA two

A current limitation is that any parameters specified in the first instance of MicrosrviceA will be also applied to the second instance (or third and fourth, etc.). If you don’t want this behavior, you’ll need to specify the same parameters for any instances of the same microservice with the desired values, otherwise the defaults won’t apply.

Interfacing with the NVIDIA K8s RAG Operator

Since UCS Tools 2.5, a new built-in component named ucf.svc.rag-operator-external is available, which represents the NVIDIA K8s Operator. This allows microservices in a UCS Application to implicitly connect to NeMo microservices that are managed and deployed by the RAG Operator, thereby easing the development of RAG applications in UCS Tools.

The RAG Operator needs to be deployed to the target K8s platform prior to deploying your UCS App that uses it. The NVIDIA GPU Operator is a dependency and must be running prior to installing the RAG Operator. Instructions for deploying the RAG Operator are on the project’s home page. In short, you need to do the following:

helm repo add nemollm-ea-rag-examples https://helm.ngc.nvidia.com/ohlfw0olaadg/ea-rag-examples
helm install rag-operator nemollm-ea-rag-examples/rag-operator -n rag-operator --create-namespace

You may also optionally configure GPU time-slicing

Please see an example UCS RAG Application in our UCS-Tools GitLab repository.