# Architecture

Antidote is a platform for providing an on-demand, interactive learning experience that removes all of the usual complexity of setting up your own lab environment, and instead does it all behind the scenes, giving the user a purely web-based portal to interact with.

To make this happen, Antidote plays a role in a broader technology stack, which we'll overview below:

![](https://16789369-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LuZD4MBkEK047OQNKMZ%2F-M2skjszUecb33dXbez9%2F-M2smmvthE_PcFZCFxCG%2FAntidote%20Architecture.png?alt=media\&token=0c14bb93-53cc-498b-ad98-02012e00dbd9)

### Curriculum

All of the lessons and labs are defined as a standalone curriculum. This model makes it easier for contributors to develop interactive content - they don't need to be web developers to add content to the NRE Labs experience.

The Antidote platform is built to treat this as a modular component. For instance, the [NRE Labs curriculum](https://github.com/nre-learning/nrelabs-curriculum) is the flagship curriculum that is powering the [NRE Labs](https://nrelabs.io) site, but it is possible to develop a different curriculum and deploy it on top of Antidote if you wish, in your own environment.&#x20;

### Platform

This is where the custom software components of Antidote live. In particular, [Syringe](https://github.com/nre-learning/syringe) provides an upstream API for provisioning lesson resources, then makes the relevant calls to Kubernetes to make sure the relevant, specific compute resources and policies are instantiate&#x64;*.* [Antidote-web](https://github.com/nre-learning/antidote-web) consumes the API offered by Syringe and is responsible for providing a fully web-based experience for interacting with lesson resources.

### Kubernetes

Kubernetes was selected as a common substrate for the Antidote platform for better portability between cloud providers or on-premises deployments. Aside from performance considerations, the underlying cloud or bare-metal infrastructure doesn't matter; as long as the Antidote platform is deployed on a Kubernetes cluster, that's all that matters. We recommend running Kubernetes on a bare-metal cluster (while not strictly required), and it must support CNI.

> Why not Hosted Kubernetes? There are two main constraints we need to solve before moving into something like GKE:
>
> * There is currently no hosted Kubernetes offering that gives the performance of bare-metal. For the NRE Labs site, this is absolutely necessary.
> * The current networking model uses a CNI plugin to make the lesson networking work. All of the existing hosted kubernetes options from the major cloud providers have rather strict networking models and don't let you bring your own CNI plugin.

### Infrastructure

This part is a lot more flexible. While we recommend baremetal for performance reasons, there's no technical requirement for it. Anywhere you are able to stand up a Kubernetes cluster should work, such as on-prem servers, virtualization environments, cloud (IaaS), etc.

## Lesson Resources

Lesson resources will be started over the infrastructure for each connected learner in parallel, isolated, according to the lesson specification.

Lesson resources will typically be inter-networked Kubernetes PODs (containers) which will be available for each learner.

In the following figure, the platform runs the same example lesson for 2 learners in parallel. Each lesson instance contains 2 resources (`vqfx1` and `linux1`), running inside their own Kubernetes "namespaces". A learner learner may then interact with the resources as dedicated virtual machines, using Web consoles connected via SSH to the right resources.

![](https://16789369-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LuZD4MBkEK047OQNKMZ%2F-LzKC04DpZMYLDVHltxp%2F-LzL4RHifagSUWt7Irk_%2Flessons_hla.png?alt=media\&token=b2aa5ef9-2282-40b3-820d-a1dd93e187df)

##

*


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.nrelabs.io/antidote/antidote-architecture.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
