<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Open OnDemand on </title>
    <link>http://51.159.138.137:8082/devel/solutions/integration_blueprints/open_ondemand/</link>
    <description>Recent content in Open OnDemand on </description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Tue, 15 Sep 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="http://51.159.138.137:8082/devel/solutions/integration_blueprints/open_ondemand/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Overview</title>
      <link>http://51.159.138.137:8082/devel/solutions/integration_blueprints/open_ondemand/overview/</link>
      <pubDate>Tue, 15 Sep 2026 00:00:00 +0000</pubDate>
      <guid>http://51.159.138.137:8082/devel/solutions/integration_blueprints/open_ondemand/overview/</guid>
      <description>&lt;p&gt;The Open OnDemand Service deploys an &lt;a href=&#34;https://openondemand.org/&#34;&gt;Open OnDemand&lt;/a&gt; portal on OpenNebula. A user signs in from a browser and opens JupyterLab, RStudio, Octave, a C++ notebook, VS Code or an Xfce desktop on a compute VM. Scientific software comes from the &lt;a href=&#34;https://www.eessi.io/&#34;&gt;EESSI&lt;/a&gt; catalogue, and the home directory is the same in every session.&lt;/p&gt;&#xA;&lt;p&gt;The service is a OneFlow service built from one appliance image. Three roles boot from it, and every session is a job of the service&amp;rsquo;s own Slurm cluster. OneFlow adds a compute VM when a job waits for one, and removes the oldest worker once it has been idle. The service brings its own Slurm cluster and needs no other cluster. It suits teaching environments and notebook access for research groups.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Service Architecture</title>
      <link>http://51.159.138.137:8082/devel/solutions/integration_blueprints/open_ondemand/architecture/</link>
      <pubDate>Tue, 15 Sep 2026 00:00:00 +0000</pubDate>
      <guid>http://51.159.138.137:8082/devel/solutions/integration_blueprints/open_ondemand/architecture/</guid>
      <description>&lt;p&gt;The Open OnDemand Service has three roles and uses two Virtual Networks. Each user session runs as a Slurm job on a pool of compute VMs that grows and shrinks.&lt;/p&gt;&#xA;&lt;h2 id=&#34;roles&#34;&gt;&#xA;  Roles&#xA;  &lt;a class=&#34;anchor-link&#34; href=&#34;#roles&#34; aria-label=&#34;Link to this section&#34;&gt;&#xA;    &lt;i class=&#34;fas fa-link fa-xs&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&lt;table class=&#34;w-100&#34;&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Role&lt;/th&gt;&#xA;          &lt;th&gt;Cardinality&lt;/th&gt;&#xA;          &lt;th&gt;What it runs&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;storage&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;NFS server for the shared home directories, the state of the Slurm controller and the shared software directory. Squid cache for the EESSI catalogue, unless the service uses a proxy of the site&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;portal&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;Open OnDemand, its LDAP directory, Dex, the Slurm controller &lt;code&gt;slurmctld&lt;/code&gt;, the accounting daemon &lt;code&gt;slurmdbd&lt;/code&gt; with MariaDB, the Prometheus metrics exporter&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;worker&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;1 to 6, elastic&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;slurmd&lt;/code&gt;, joined to the cluster as a dynamic node, and the user sessions as Slurm jobs&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;div class=&#34;td-image-wrapper&#34; style=&#34;margin-left: auto; margin-right: auto; width: 100%; margin-bottom: 20px;&#34;&gt;&#xA;      &lt;img src=&#34;http://51.159.138.137:8082/devel/images/open_ondemand/light/architecture.svg&#34; alt=&#34;The storage, portal and worker roles between the management and compute networks, with the flows between them&#34; class=&#34;roundBorderImage borderImage shadowImage td-img-light &#34; &gt;&lt;img src=&#34;http://51.159.138.137:8082/devel/images/open_ondemand/dark/architecture.svg&#34; alt=&#34;The storage, portal and worker roles between the management and compute networks, with the flows between them&#34; class=&#34;roundBorderImage borderImage shadowImage td-img-dark&#34;&gt;&lt;/div&gt;&#xA;&lt;p&gt;OneFlow starts &lt;code&gt;storage&lt;/code&gt; first. It starts &lt;code&gt;portal&lt;/code&gt; when the storage role is ready, and &lt;code&gt;worker&lt;/code&gt; when both are ready. Each role reports &lt;code&gt;READY&lt;/code&gt; through OneGate only when it is actually serving. The service therefore reaches &lt;code&gt;RUNNING&lt;/code&gt; when a user can sign in and open a session.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quick Start</title>
      <link>http://51.159.138.137:8082/devel/solutions/integration_blueprints/open_ondemand/quick_start/</link>
      <pubDate>Tue, 15 Sep 2026 00:00:00 +0000</pubDate>
      <guid>http://51.159.138.137:8082/devel/solutions/integration_blueprints/open_ondemand/quick_start/</guid>
      <description>&lt;p&gt;This guide deploys an Open OnDemand Service from the Sunstone Web UI, with one portal, one storage VM and one worker. Then it opens a JupyterLab notebook on the service. Check the &lt;a href=&#34;http://51.159.138.137:8082/devel/solutions/integration_blueprints/open_ondemand/architecture/#requirements&#34;&gt;Requirements&lt;/a&gt; first. You need OneFlow and OneGate enabled, and two Virtual Networks, one with Internet access and one reserved for the service.&lt;/p&gt;&#xA;&lt;p&gt;Quick-start workflow:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Create the networks.&lt;/strong&gt; A management network with Internet access, which you probably have, and a compute network reserved for the service.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Download the appliance.&lt;/strong&gt; Import the image, the VM template and the service template from the Community Marketplace.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Instantiate the service.&lt;/strong&gt; Select the two Virtual Networks and keep the default inputs.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Wait for the service.&lt;/strong&gt; It reaches the &lt;code&gt;RUNNING&lt;/code&gt; state in about four minutes.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Open the portal and launch a notebook.&lt;/strong&gt; Sign in with the initial user and open JupyterLab as a Slurm job on the worker VM.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;before-you-start&#34;&gt;&#xA;  Before You Start&#xA;  &lt;a class=&#34;anchor-link&#34; href=&#34;#before-you-start&#34; aria-label=&#34;Link to this section&#34;&gt;&#xA;    &lt;i class=&#34;fas fa-link fa-xs&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&lt;p&gt;The service needs two Virtual Networks, and the wizard requests both:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Configuration</title>
      <link>http://51.159.138.137:8082/devel/solutions/integration_blueprints/open_ondemand/configuration/</link>
      <pubDate>Tue, 15 Sep 2026 00:00:00 +0000</pubDate>
      <guid>http://51.159.138.137:8082/devel/solutions/integration_blueprints/open_ondemand/configuration/</guid>
      <description>&lt;p&gt;This section describes the inputs of the Open OnDemand Service. It also covers role sizing, the worker pool, worker sizes, its Slurm cluster, an external cluster, an external identity provider and user management.&lt;/p&gt;&#xA;&lt;h2 id=&#34;service-inputs&#34;&gt;&#xA;  Service Inputs&#xA;  &lt;a class=&#34;anchor-link&#34; href=&#34;#service-inputs&#34; aria-label=&#34;Link to this section&#34;&gt;&#xA;    &lt;i class=&#34;fas fa-link fa-xs&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&lt;p&gt;All inputs are &lt;code&gt;ONEAPP_*&lt;/code&gt; context variables. OneFlow places every input in the context of every VM of the service, where root can read it. This includes &lt;code&gt;ONEAPP_PORTAL_CERTIFICATE_KEY&lt;/code&gt; and &lt;code&gt;ONEAPP_AUTH_OIDC_CLIENT_SECRET&lt;/code&gt;. Every input is optional, and the Sunstone wizard groups them in four tabs, &lt;strong&gt;Portal&lt;/strong&gt;, &lt;strong&gt;Users and login&lt;/strong&gt;, &lt;strong&gt;Home directories&lt;/strong&gt; and &lt;strong&gt;Software catalogue&lt;/strong&gt;. A feature with an &lt;code&gt;_ENABLED&lt;/code&gt; switch shows its other inputs only while the switch is &lt;code&gt;YES&lt;/code&gt;, and ignores them while it is &lt;code&gt;NO&lt;/code&gt;. If a switch is &lt;code&gt;YES&lt;/code&gt; and a required field is empty, the role stops at boot, and the message names the field, see &lt;a href=&#34;http://51.159.138.137:8082/devel/solutions/integration_blueprints/open_ondemand/monitoring_and_troubleshooting/#a-role-does-not-reach-running&#34;&gt;A Role Does Not Reach RUNNING&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Operations</title>
      <link>http://51.159.138.137:8082/devel/solutions/integration_blueprints/open_ondemand/operations/</link>
      <pubDate>Tue, 15 Sep 2026 00:00:00 +0000</pubDate>
      <guid>http://51.159.138.137:8082/devel/solutions/integration_blueprints/open_ondemand/operations/</guid>
      <description>&lt;p&gt;This section covers the lifecycle of a running Open OnDemand Service. It explains how to keep the home directories across deployments, upgrade the appliance, and remove the service.&lt;/p&gt;&#xA;&lt;h2 id=&#34;keeping-the-home-directories&#34;&gt;&#xA;  Keeping the Home Directories&#xA;  &lt;a class=&#34;anchor-link&#34; href=&#34;#keeping-the-home-directories&#34; aria-label=&#34;Link to this section&#34;&gt;&#xA;    &lt;i class=&#34;fas fa-link fa-xs&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&lt;p&gt;By default the shared home is on the root disk of the storage VM and is deleted with the service. Two options keep it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;A persistent disk on the storage role.&lt;/strong&gt; Create a persistent Datablock and add it to the &lt;code&gt;template_contents&lt;/code&gt; of the storage role in the service template. List it next to the disk of the appliance image, because a &lt;code&gt;DISK&lt;/code&gt; entry there replaces the whole disk list of the VM template:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monitoring and Troubleshooting</title>
      <link>http://51.159.138.137:8082/devel/solutions/integration_blueprints/open_ondemand/monitoring_and_troubleshooting/</link>
      <pubDate>Tue, 15 Sep 2026 00:00:00 +0000</pubDate>
      <guid>http://51.159.138.137:8082/devel/solutions/integration_blueprints/open_ondemand/monitoring_and_troubleshooting/</guid>
      <description>&lt;p&gt;The Open OnDemand Service reports its state through OneFlow, OneGate and a Prometheus endpoint on the portal.&lt;/p&gt;&#xA;&lt;h2 id=&#34;metrics&#34;&gt;&#xA;  Metrics&#xA;  &lt;a class=&#34;anchor-link&#34; href=&#34;#metrics&#34; aria-label=&#34;Link to this section&#34;&gt;&#xA;    &lt;i class=&#34;fas fa-link fa-xs&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&lt;p&gt;The portal serves Prometheus metrics on port 9101 of its management address, at &lt;code&gt;http://&amp;lt;portal management address&amp;gt;:9101/metrics&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;table class=&#34;w-100&#34;&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Metric&lt;/th&gt;&#xA;          &lt;th&gt;Meaning&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;ood_worker_active_sessions&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Slurm jobs running on the worker, sessions included (labels &lt;code&gt;vm_id&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;ood_worker_idle_seconds&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Seconds since the last job on the worker ended&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;ood_worker_oldest_idle&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;1&lt;/code&gt; when the oldest worker of the role is drained and empty, so OneFlow may remove it&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;ood_slurm_pending&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Jobs waiting for a worker of this role, as seen by the worker&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;ood_slurm_idle_nodes&lt;/code&gt;, &lt;code&gt;ood_slurm_alloc_nodes&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Idle nodes of the cluster, and nodes with a job, as seen by the worker&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;ood_worker_healthy&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;1&lt;/code&gt; when the worker passed its last check of the home mount, the software catalogue, munge and slurmd&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;ood_role_cardinality&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;VMs in each role&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;ood_portal_puns&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Per user web servers running on the portal, one per signed in user&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;ood_service_state&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;The OneFlow state of the service, as its numeric code (&lt;code&gt;2&lt;/code&gt; is RUNNING)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;ood_exporter_scrape_ok&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;1&lt;/code&gt; when the exporter&amp;rsquo;s last read of the service through OneGate succeeded&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;The same values are in the user template of each worker VM, in Sunstone or in &lt;code&gt;onevm show &amp;lt;worker id&amp;gt;&lt;/code&gt;. The template also holds &lt;code&gt;SESSION_USERS&lt;/code&gt;, the users with a job on the worker. &lt;code&gt;SLURM_NODENAME&lt;/code&gt; in the same template is the name of its Slurm node. A worker whose home mount, software catalogue, munge or slurmd fails publishes &lt;code&gt;HEALTHY=0&lt;/code&gt; until it recovers. On the portal, &lt;code&gt;sinfo&lt;/code&gt; lists every worker as a node with its role as a feature. &lt;code&gt;squeue&lt;/code&gt; lists the sessions and the batch jobs.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
