> For the complete documentation index, see [llms.txt](https://academy.pentaho.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://academy.pentaho.com/solution-architect-path-sandbox/speciality-courses/containers.md).

# Containers — Speciality

Level 2 of the Solution Architect path: Containers — Speciality. 10 lessons across 6 modules: build the Pentaho Server EE image, run it with Podman Compose, then deploy it to K3s and Helm.

{% hint style="warning" %}
**🧪 SANDBOX — draft content, built from `architect-con-specialty` 0.1.7 in Pentaho Content Manager.** Module and lesson names, the reading-or-workshop kinds and the times come straight from each lab's manifest. Items marked REPLACE-ME need an owner's confirmation.
{% endhint %}

The first deployment speciality of the Solution Architect path. Deploy the Pentaho Server with containers and Kubernetes: build the EE image from a staged archive, run it with Podman Compose against PostgreSQL, then take the same deployment to K3s with raw manifests and Helm. High availability is the next course, High Availability — Speciality.

{% columns %}
{% column %}

<p align="center"><i class="fa-file-lines" style="color:green;">:file-lines:</i><br><strong>10 lessons</strong><br><em>across 6 modules</em></p>
{% endcolumn %}

{% column %}

<p align="center"><i class="fa-flask" style="color:orange;">:flask:</i><br><strong>4 workshops</strong><br><em>hands-on labs</em></p>
{% endcolumn %}

{% column %}

<p align="center"><i class="fa-clock" style="color:cyan;">:clock:</i><br><strong>~4h 50m</strong><br><em>a day, or three evenings</em></p>
{% endcolumn %}
{% endcolumns %}

{% hint style="success" icon="box" %}
Every workshop is hands-on. The guide runs on your desktop and the workshops on an Ubuntu 24.04 host — a lab VM with Podman, K3s and Helm already in place, or your own machine, set up once in the Before You Start page.
{% endhint %}

***

<h3 align="center">Before you start</h3>

{% columns %}
{% column %}
{% hint style="success" icon="circle-check" %}
**What you'll need**

The Linux command line — `bash`, `sudo` and a text editor — and an idea of what a container image and a container are; Containers 101 covers the rest. The workshops run on an Ubuntu 24.04 LTS host with at least 4 CPU cores, 16 GB of memory and 40 GB of free disk, and the image build stages the licensed Pentaho Server archive from the Pentaho Support Portal.
{% endhint %}
{% endcolumn %}

{% column %}
{% hint style="info" icon="tag" %}
**Built against**

The Pentaho 11.0 GA archive (`pentaho-server-ee-11.0.0.0-237`) on Ubuntu 24.04 LTS, with rootless Podman and `podman-compose`, PostgreSQL 15 in containers, single-node K3s with `kubectl`, and Helm 3.

REPLACE-ME — confirm whether this course moves to the 11.0.0.3-312 service pack, which the Installation course now applies.
{% endhint %}
{% endcolumn %}
{% endcolumns %}

***

{% hint style="info" icon="cubes" %}

#### What you'll build

A containerised Pentaho Server, three ways. A parameterised EE image, built from the staged archive with the softwareOverride layer pattern. A Podman Compose deployment against PostgreSQL 15 — the three repository databases, HashiCorp Vault holding their passwords, health checks and persistent volumes. The same deployment on single-node K3s from namespaces, configmaps, storage, database and server manifests, then packaged as a Helm release you can install, upgrade and roll back.
{% endhint %}

```mermaid
%%{init: {"theme":"base","themeVariables":{"fontFamily":"Arial, Helvetica, sans-serif","fontSize":"13px","lineColor":"#64748b","clusterBkg":"#fafaf9","clusterBorder":"#d6d3d1","edgeLabelBackground":"#ffffff"},"flowchart":{"curve":"basis","nodeSpacing":28,"rankSpacing":44,"padding":22,"wrappingWidth":600,"htmlLabels":true}}}%%
flowchart TB
  classDef input fill:#dbeafe,stroke:#1d4ed8,color:#1e3a8a,text-align:left,rx:6,ry:6
  classDef engine fill:#ede9fe,stroke:#6d28d9,color:#3b0764,text-align:left,rx:6,ry:6
  A["<b>Licensed archive</b>&nbsp;&nbsp;&nbsp;&nbsp;<br/>pentaho-server-ee-11.0.0.0-237.zip&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>staged into the build, never shipped&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]:::input
  I["<b>Pentaho Server EE image</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>softwareOverride layer pattern&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>podman build&nbsp;&nbsp;&nbsp;"]:::engine
  C["<b>Podman Compose</b>&nbsp;&nbsp;&nbsp;&nbsp;<br/>the image with PostgreSQL 15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>and Vault, health checks and volumes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]:::engine
  K["<b>K3s, plain manifests</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>namespaces, configmaps, storage,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>database and server&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]:::engine
  H["<b>K3s, Helm chart</b>&nbsp;&nbsp;&nbsp;&nbsp;<br/>install, upgrade, roll back,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>uninstall from one chart&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]:::engine
  A -->|"podman build&nbsp;&nbsp;&nbsp;"| I
  I -->|"the same image&nbsp;&nbsp;&nbsp;&nbsp;"| C
  C -->|"podman save into containerd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"| K
  K -->|"packaged&nbsp;&nbsp;&nbsp;"| H
```

<p align="center"><em>One image, three ways to run it on the same Ubuntu host: Podman Compose, K3s from plain manifests, then the same deployment as a Helm chart</em></p>

***

<h3 align="center">What you'll learn</h3>

{% columns %}
{% column %}

* How container runtimes and orchestration fit together, and where the Pentaho Server sits in them
* Build a parameterised Pentaho Server EE image from a staged archive with the softwareOverride layer pattern, and smoke-test it with a throwaway compose file
* Run the server against PostgreSQL with Podman Compose — the three repository databases, HashiCorp Vault for their passwords, health checks and persistent volumes — and know what changes for MySQL, MSSQL and Oracle
  {% endcolumn %}

{% column %}

* Take the same deployment to a lightweight Kubernetes: namespaces, configmaps, storage, database and server manifests, deployed and torn down by script
* Package the K3s deployment as a Helm release, and install, upgrade and roll back from one chart
  {% endcolumn %}
  {% endcolumns %}

***

<h3 align="center">Course outline</h3>

<p align="center"><i class="fa-file-lines" style="color:green;">:file-lines:</i> reading · <i class="fa-flask" style="color:orange;">:flask:</i> hands-on workshop</p>

{% hint style="info" icon="circle-info" %}
Full lessons unlock once you're enrolled — this is the outline only. Times are the lab guides' own estimates.
{% endhint %}

<table data-search="false"><thead><tr><th width="382">Module</th><th width="115" align="center">Reading</th><th width="132" align="center">Workshops</th><th width="100" align="right">Time</th></tr></thead><tbody><tr><td>Getting Started</td><td align="center">1</td><td align="center">—</td><td align="right">~25m</td></tr><tr><td>Containers 101</td><td align="center">1</td><td align="center">—</td><td align="right">~15m</td></tr><tr><td>Build the Image</td><td align="center">1</td><td align="center">1</td><td align="right">~55m</td></tr><tr><td>Compose Deployment</td><td align="center">2</td><td align="center">1</td><td align="right">~1h 20m</td></tr><tr><td>Kubernetes (K3s)</td><td align="center">1</td><td align="center">1</td><td align="right">~1h 10m</td></tr><tr><td>Helm</td><td align="center">—</td><td align="center">1</td><td align="right">~45m</td></tr><tr><td><strong>Total</strong></td><td align="center"><strong>6</strong></td><td align="center"><strong>4</strong></td><td align="right"><strong>~4h 50m</strong></td></tr></tbody></table>

{% stepper %}
{% step %}

### <i class="fa-rocket" style="color:blue;">:rocket:</i> Getting Started

`1 reading · ~25m`

How to get the most out of this guide, and how to set up the Ubuntu host - Podman with podman-compose, K3s, kubectl and Helm - plus the licensed Pentaho Server archive the image build stages.

<details>

<summary>See the full breakdown</summary>

<table data-search="false"><thead><tr><th width="79"></th><th>Lesson</th><th width="90">Time</th></tr></thead><tbody><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Before You Start</td><td>~25m</td></tr></tbody></table>

</details>
{% endstep %}

{% step %}

### <i class="fa-cubes" style="color:blue;">:cubes:</i> Containers 101

`1 reading · ~15m`

Runtimes, orchestration and where the Pentaho Server fits - the concepts behind everything you deploy in this course.

<details>

<summary>See the full breakdown</summary>

<table data-search="false"><thead><tr><th width="79"></th><th>Lesson</th><th width="90">Time</th></tr></thead><tbody><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Overview of Containers</td><td>~15m</td></tr></tbody></table>

</details>
{% endstep %}

{% step %}

### <i class="fa-hammer" style="color:blue;">:hammer:</i> Build the Image

`1 reading · 1 workshop · ~55m`

Build a parameterised Pentaho Server EE image from a staged archive with the softwareOverride layer pattern, then smoke-test it with a throwaway compose file.

<details>

<summary>See the full breakdown</summary>

<table data-search="false"><thead><tr><th width="79"></th><th>Lesson</th><th width="90">Time</th></tr></thead><tbody><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Overview of the Image Build</td><td>~10m</td></tr><tr><td></td><td></td><td></td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Build the Pentaho Image</td><td>~45m</td></tr></tbody></table>

</details>
{% endstep %}

{% step %}

### <i class="fa-layer-group" style="color:blue;">:layer-group:</i> Compose Deployment

`2 readings · 1 workshop · ~1h 20m`

Run the server against PostgreSQL 15 with Podman Compose - the three repository databases, HashiCorp Vault for their passwords, health checks, persistent volumes - and see what changes for MySQL, MSSQL and Oracle.

<details>

<summary>See the full breakdown</summary>

<table data-search="false"><thead><tr><th width="79"></th><th>Lesson</th><th width="90">Time</th></tr></thead><tbody><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Overview of Compose Deployment</td><td>~10m</td></tr><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Database Variants</td><td>~10m</td></tr><tr><td></td><td></td><td></td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Pentaho Server + PostgreSQL</td><td>~1h</td></tr></tbody></table>

</details>
{% endstep %}

{% step %}

### <i class="fa-dharmachakra" style="color:blue;">:dharmachakra:</i> Kubernetes (K3s)

`1 reading · 1 workshop · ~1h 10m`

Take the same deployment to a lightweight Kubernetes: namespaces, configmaps, storage, database and server manifests, deployed and torn down by script.

<details>

<summary>See the full breakdown</summary>

<table data-search="false"><thead><tr><th width="79"></th><th>Lesson</th><th width="90">Time</th></tr></thead><tbody><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Overview of K3s Deployment</td><td>~10m</td></tr><tr><td></td><td></td><td></td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Deploy to K3s</td><td>~1h</td></tr></tbody></table>

</details>
{% endstep %}

{% step %}

### <i class="fa-ship" style="color:blue;">:ship:</i> Helm

`1 workshop · ~45m`

Package the K3s deployment as a Helm release - install, upgrade and roll back from one chart.

<details>

<summary>See the full breakdown</summary>

<table data-search="false"><thead><tr><th width="79"></th><th>Lesson</th><th width="90">Time</th></tr></thead><tbody><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Install via Helm</td><td>~45m</td></tr></tbody></table>

</details>
{% endstep %}
{% endstepper %}

***

<h3 align="center">Exam &#x26; accreditation</h3>

{% columns %}
{% column %}
{% hint style="info" icon="clipboard-check" %}
**The course exam**

30 questions drawn at random from a pool of 35, covering Containers 101, Build the Image, Compose Deployment, Kubernetes (K3s) and Helm. The pass mark is 80%. It's open-book: browse any module or ask the AI assistant while you work.
{% endhint %}
{% endcolumn %}

{% column %}
{% hint style="warning" icon="file-certificate" %}
**Course accreditation**

Finish the lessons and workshops and pass the exam, and you'll automatically be able to download your course accreditation — Pentaho Containers Deployment, Specialty Level. It states your name, the course and the Pentaho version you studied against, and is valid for two years. The exam is self-paced and not proctored.

This course is the third step on the Certified Solution Architect learning path: DI Developer — Practitioner, then Installation — Certified, the Containers, High Availability and Enterprise Security Speciality courses, leading to the Certified Solution Architect credential.
{% endhint %}
{% endcolumn %}
{% endcolumns %}

***

<p align="center"><a href="https://academy.pentaho.com/solution-architect-path-sandbox/" class="button secondary" data-icon="arrow-left">Back to the Solution Architect path</a></p>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://academy.pentaho.com/solution-architect-path-sandbox/speciality-courses/containers.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
