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.
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.
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 |
Metrics Visualization | grafana | Grafana metric visualization |
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:
- Login to Kubernetes cluster (see AKS or OpenShift).
- Set Kubernetes context (see setting current context).
- Locate target service and get port number (see locating service).
- Set up a port-forward from a local workstation to target service (see port forwarding).
- 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