Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 8 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,14 @@ View this on the [Tutorial Homepage](https://supercontainers.github.io/sc-tutori

## Details

Full-day Tutorial Session
Half-day Tutorial Session

Venue: Supercomputing Conference (SC 25)
Venue: ISC High Performance 2026


Location: St. Louis, MO, USA
Location: Hamburg, Germany

Link: SC 2025 Tutorial Details](https://sc25.conference-program.com/presentation/?id=tut109&sess=sess250)

Keywords: Containerized HPC, System Software and Runtime Systems, Scientific Software Development, DevOps
Keywords: Containerized HPC, System Software and Runtime Systems, Scientific Software Development, DevOps, AI


## Abstract
Expand All @@ -35,11 +33,8 @@ Please consult the website for prerequisites and recommended setup steps.

## Questions

You can ask questions verbally or with this [Google Doc](https://docs.google.com/document/d/11gMZ-T7iA5XiRWPLYIqX7Gqv7RMb-NF9kzGYHrnOi04/edit?usp=sharing).
Please append your question below the others in the document.

We have also created a Slack Team for this. The invitation link is [here](https://join.slack.com/t/hpc-containers/shared_invite/enQtODI3NzY1NDU4OTk5LTUxOTgyOWJmYjIwOWI5YWU2MzBhZDI3Zjc1YmZmMjAxZjgzYzk4ZWEwNmFlNzlkOWI0MGNlZDNlMTBhYTBlOWY).


## Schedule - Autogenerated from the metadata
<!-- TODO: add link to Google document for questions (with edit privileges) -->
You can ask questions verbally or with this [Google Doc](). Please append your question below the others in the document.

<!-- TODO: is invitation link still valid? -->
We have also created a Slack Team for this. The invitation link is [here](https://join.slack.com/t/hpc-containers/shared_invite/enQtODI3NzY1NDU4OTk5LTUxOTgyOWJmYjIwOWI5YWU2MzBhZDI3Zjc1YmZmMjAxZjgzYzk4ZWEwNmFlNzlkOWI0MGNlZDNlMTBhYTBlOWY).
42 changes: 42 additions & 0 deletions _episodes/ai.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
title: "Agentic AI"
teaching: 15
exercises: 20
questions:
- How do I quickly develop and deploy agents in Kubernetes?
- How do multi-agent systems communicate?
objectives:
- Learn about developing AI agents
- Learn about connecting AI agents to MCP servers
- Learn about deploying AI systems to Kubernetes
---

# Agentic AI

## Currency Agent

```bash
git clone https://github.com/srbdev/adk_currency_agent.git
```

1. Update `OPENAI_API_BASE` with value
2. Update `OPENAI_API_KEY` with value

```bash
kubectl apply -f deployment.yaml
```

## Client

```bash
git clone https://github.com/srbdev/currency_client.git
uv run python cli.py --url http://localhost:10999
```

### Example Prompts

```
Find the list of supported EU currencies and show the exchange rate with USD in markdown format
how much is 10 USD in CAD?
how did the EUR value fluctuate against USD from jan 1st, 2026 to now?
```
163 changes: 163 additions & 0 deletions _episodes/kubernetes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
---
title: "Container services and Kubernetes"
teaching: 25
exercises: 20
questions:
- How should services like databases or portals be deployed?
- What is different about deploying services versus HPC applications?
objectives:
- Learn about different frameworks used for deploying services
keypoints:
- Docker Compose is a simple tool to deploy basic services using containers
- Frameworks like Kubernetes, Rancher and OpenShift can help with deploying and managing complex containerized services.
---

# Container Services and Kubernetes

## First Steps

```bash
kubectl get nodes
kubectl get pods
kubectl get pods -A
```

## Create a Namespace

```bash
kubectl create namespace NAME
```

## Deploy the Application

Create `demo-app.yaml`

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-api
spec:
replicas: 2
selector:
matchLabels:
app: backend-api
template:
metadata:
labels:
app: backend-api
spec:
containers:
- name: api
image: nginx:alpine
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "200m"
---
apiVersion: v1
kind: Service
metadata:
name: backend-service
spec:
selector:
app: backend-api
ports:
- port: 80
targetPort: 80
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
spec:
rules:
- host: demo.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: backend-service
port:
number: 80
```

```bash
kubectl apply -f demo-app.yaml -n NAME # OR --namespace=NAME
kubectl get pods,svc,ingress -n NAME
```

## Key Kubernetes Features

### Self-Healing

```bash
# Show running pods
kubectl get pods -n NAME

# Kill a pod
kubectl delete pod pod-name-xyz -n NAME

# Watch Kubernetes automatically recreate it
kubectl get pods -w -n NAME
```

### Scaling

```bash
# Scale up during "traffic spike"
kubectl scale deployment backend-api --replicas=5 -n NAME
kubectl get pods -n NAME

# Scale down
kubectl scale deployment backend-api --replicas=2 -n NAME
```

### Rolling Updates

```bash
# Update to new version with zero downtime
kubectl set image deployment/backend-api api=nginx:1.21-alpine -n NAME

# Watch the rolling update
kubectl rollout status deployment/backend-api -n NAME
kubectl get pods -n NAME

# Rollback if needed
kubectl rollout undo deployment/backend-api -n NAME
```

### Resource Management

```bash
# Show resource usage
kubectl top nodes
kubectl top pods -n NAME
```

## Port Forwarding

```bash
curl http://localhost:8000

# Forward local port to the service
kubectl port-forward svc/backend-service 8000:80 -n NAME

# Access in browser or curl
curl http://localhost:8000
# or open http://localhost:8000 in browser
```

## Clean up Namespaces

```bash
kubectl delete namespaces NAME
```
79 changes: 79 additions & 0 deletions _episodes_sc25/.00.template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
---
title: "TEMPLATE EPISODE - TO BE HIDDEN"
teaching: 10
exercises: 20
questions:
objectives:
- this one
keypoints:
- that one
---


### Title (header 3 for size reasons)

#### Subtitle

##### subsubtitle...and so on


Text types: **bold**, *italic*, ***bold+italic***, `code monospace`.

How to add a new line in same paragraph.
Add two spaces at end of line, then newline.

Leave an entire blank line for a new paragraph.

```
code block
```

* itemise

1. enumerate

> cite

I recommend HTML to embed images, so it's customisable:

<img src="{{ page.root }}/fig/pawsey.jpeg" alt="Pawsey Logo" width="250">

For comments in the markdown source, go again the HTML way with `<!--` and `-->`.
<!-- This is just a comment -->


### Carpentry style: special syntax

When embedding images or links to files in this repo, you need syntax like in the image example above: `{{ page.root }}/fig/pawsey.jpeg`.
The *page.root* sugar ensures the file is found at the time the HTML page is created.

Coloured side for code blocks:

```
# This is bash
```
{: .bash}

After the closing triple ticks, add one of these: `{: .bash}`, `{: .source}`, `{: .output}`, `{: .error}`. There's similar sugar for python, r, sql, make and matlab.
I normally use *bash* for shell commands, *source* for scripts, and *output*/*error* as appropriate.


> ## Text box to highlight, *ie* callout, stuff
>
> This is really important, right?
> Note the use of cite blocks `> `, the *Header ##*, and the `{: .callout}` keyword at the end.
{: .callout}


> ## Challenge
>
> Do you know this?
>
> > ## Solution
> >
> > Sure!
> {: .solution}
{: .challenge}


There are other specials blocks that I normally don't use, in particular `discussion` and `checklist`.
Empty file added _episodes_sc25/.keep
Empty file.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
17 changes: 5 additions & 12 deletions index.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,26 @@ permalink: index.html # Is the only page that don't follow the partner /:path/i



Containers Tutorial Session @ Supercomputing Conference 2025 (SC25)
Containers Tutorial Session @ ISC High Performance 2026 (ISC26)

Date: Sunday, 16 November 2025 8:30am - 5pm CST
Date: Monday, 22 June 2026 2:00PM - 6PM (Europe/Berlin)

Location: St. Louis, MO, USA
Location: Hamburg, Germany

Link: [SC 2025 Tutorial Details](https://sc25.conference-program.com/presentation/?id=tut109&sess=sess250)

Keywords: Containerized HPC, System Software and Runtime Systems, Scientific Software Development, DevOps
Keywords: Containerized HPC, System Software and Runtime Systems, Scientific Software Development, DevOps, AI


> ## Prerequisites
>
> This is a hands-on tutorial. Participants should bring a laptop. We will use a AWS instances for the main exercises.
>
> #### NERSC Perlmutter (optional)
> In addition to the AWS instances, you can also try running some of the exercises on NERSC’s Perlmutter system.
>
> See also the [Setup](./setup.html) page.
{: .prereq}


> ## Questions
>
> You can ask questions verbally or with this [Google Doc](https://docs.google.com/document/d/1zrWRGeDEbokQq03hAHxZzXpNzBSp4YSKJhHiNtjSe1Y/edit?usp=sharing).
> Please append your question below the others in the document.
> You can ask questions verbally or with this [Google Doc](). Please append your question below the others in the document.
>
> We have also created a Slack Team for this. The invitation link is [here](https://join.slack.com/t/hpc-containers/shared_invite/enQtODI3NzY1NDU4OTk5LTUxOTgyOWJmYjIwOWI5YWU2MzBhZDI3Zjc1YmZmMjAxZjgzYzk4ZWEwNmFlNzlkOWI0MGNlZDNlMTBhYTBlOWY).
{: .callout}

Loading