Topology

This section describes the topology of the ModelOps components that are installed into a Kubernetes cluster during installation.

Namespaces

All ModelOps components are installed into a single Kubernetes cluster. This cluster contains namespaces created during installation for use by users of ModelOps via Environments.

  • datachannels - Data-Channels environment for data channel deployment.
  • development - Development environment for developer scoring pipelines.
  • production - Production environment for production scoring pipelines.
  • testing - Testing environment for test (QA) scoring pipelines.

There are also modelops and tekton-pipelines namespaces created that that are reserved for the ModelOps components. These namespaces are not exposed in ModelOps as an Environment.

Namespaces

Components

The components that make up ModelOps are all installed into the modelops and tekton-pipelines namespaces.

In addition, container registry is required to store built container images. ModelOps use a container registry provided by the cloud infrastructure. It is configured during installation.

Components

A brief description of each of these components and their associated service name is summarized in the table below.

Component Service Description
Artifact Repository artifact-repository Maven, Python, and Helm artifact repository
Data Channel Registry data-channel-registry Data channel registry
Git git Git repository server
Logging Store elasticsearch-es-http ElasticSearch logging store
Logging Visualization kibana-kb-http Kibana log visualization
Model Management modelops-server Artifact (scoring flows, pipelines, and models) management, editing, governance, and deployment
Real-Time Metrics modelops-metrics Real-time metric aggregration
Metrics Store prometheus Prometheus metrics store
Scheduler scheduling-server Scoring pipeline and data channel scoring service
Tekton N/A Tekton CI/CD pipeline definition and execution

Accessing Services

The Kubernetes services associated with the ModelOps components are not exposed outside of the Kubernetes cluster. To access the ModelOps services these general steps are required:

  1. Login to Kubernetes cluster (see AKS or OpenShift).
  2. Set Kubernetes context (see setting current context).
  3. Locate target service and get port number (see locating service).
  4. Set up a port-forward from a local workstation to target service (see port forwarding).
  5. Open port-forwarded port on the local workstation in a web browser

These steps require kubectl to be installed on the local workstation. See the general installation instructions for details on installing prerequisites.

Setting Current Context

The current context is set using this commands:

//
// Get current context
//
kubectl config current-context

//
// Get all available contexts
//
kubectl config get-contexts

//
// Set current context - replace <context> with actual context name
//
kubectl config use-context <context>

Locating Services

Use the service name in the components table to determine the target service name and then display the service using this command:

//
// Display service - replace <service-name> with actual service name
//
kubectl get services --namespace modelops <service-name>

//
// Display all ModelOps services
//
kubectl get services --namespace modelops

Port Forwarding

A port-forward must be set up on the local workstation to allow local access to the service.

//
// Set up port-forward
//
// Replace <service-name> and <service-port> with actual service name and port
// Replace <local-port> to an unused port on the local workstation
//
kubectl port-forward service/<service-name> --namespace modelops <local-port>:<service-port>

The port-forward command does not return. It must be run in the shell background to continue to use the same terminal window.

Service Pods

Use the service name in the components table to determine the target service name and then display Pods associated with the service using these commands:

//
// Display selector for service - replace <service-name> with actual service name
//
kubectl get services \
    --namespace modelops <service-name> \
    --output custom-columns=SELECTOR:.spec.selector

//
// Display service Pods - replace <selector-value> with the
// selector value above replacing ":" with "="
//
kubectl get pods --namespace modelops --selector <selector-value>

For example, finding the Pod for the scheduling-server service would require these commands:

//
//  Get selector for scheduling-server
//
kubectl get services \
    --namespace modelops scheduling-server \
    --output custom-columns=SELECTOR:.spec.selector
SELECTOR
map[app:scheduling-server]

//
//  Display pods using the selector
//
//  Notice that the selector name from map[app:scheduling-server]
//  is app=scheduling-server
//
kubectl get pods --namespace modelops --selector app=scheduling-server
NAME                               READY   STATUS    RESTARTS   AGE
scheduling-server-8975c87f-kxlb8   1/1     Running   0          13d