Skip to content

vanHeemstraSystems/learning-educates

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

4 Commits
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Learning Educates

Educates Azure AKS License

Comprehensive learning repository for Educates Training Platform - an open-source platform for hosting interactive workshop environments in Kubernetes.

This repository documents the journey of learning and implementing Educates on Azure Kubernetes Service (AKS) to create hands-on training workshops for cloud-native applications, with a specific focus on teaching the Agility Game microservices architecture.

๐Ÿ“‹ Table of Contents

๐ŸŽฏ Overview

Project Goals:

  1. Master the Educates Training Platform for creating interactive Kubernetes workshops
  2. Deploy Educates on Azure Kubernetes Service (AKS)
  3. Develop workshops for teaching microservices architecture using Agility Game
  4. Create reusable workshop templates for cloud-native development training

Use Cases:

  • Teaching Kubernetes fundamentals
  • Demonstrating microservices deployment patterns
  • Interactive coding workshops
  • Product demonstrations
  • Developer onboarding programs

๐Ÿš€ What is Educates?

Educates is an open-source training platform designed to provide hands-on, interactive workshop environments running on Kubernetes. Originally developed at VMware and now community-maintained, it offers:

Key Features:

  • Interactive Terminals: Built-in terminal access for each workshop session
  • Code Editors: Integrated web-based editors for hands-on coding
  • Dashboard Views: Custom dashboards for monitoring applications
  • Markdown/AsciiDoc Support: Rich workshop instruction formatting
  • Clickable Commands: Execute commands directly from instructions
  • Multi-Namespace Support: Isolated environments per user
  • Resource Quotas: Control resource consumption per session
  • Virtual Clusters: Optional full cluster admin access via vcluster

Architecture:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Educates Platform                     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”       โ”‚
โ”‚  โ”‚ Workshop 1 โ”‚  โ”‚ Workshop 2 โ”‚  โ”‚ Workshop N โ”‚       โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜       โ”‚
โ”‚         โ”‚               โ”‚               โ”‚              โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”‚
โ”‚  โ”‚         Training Portal Manager             โ”‚      โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ”‚
โ”‚         โ”‚                                               โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”‚
โ”‚  โ”‚      Session Manager (Operator)             โ”‚      โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ”‚
โ”‚                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                        โ”‚
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚                                โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Kubernetes API โ”‚              โ”‚  Ingress/DNS   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“ Repository Structure

learning-educates/
โ”œโ”€โ”€ README.md                          # This file
โ”œโ”€โ”€ docs/                              # Documentation
โ”‚   โ”œโ”€โ”€ 01-introduction/
โ”‚   โ”‚   โ”œโ”€โ”€ what-is-educates.md
โ”‚   โ”‚   โ”œโ”€โ”€ architecture.md
โ”‚   โ”‚   โ””โ”€โ”€ use-cases.md
โ”‚   โ”œโ”€โ”€ 02-setup/
โ”‚   โ”‚   โ”œโ”€โ”€ azure-aks-setup.md        # AKS cluster creation
โ”‚   โ”‚   โ”œโ”€โ”€ educates-installation.md  # Installing Educates
โ”‚   โ”‚   โ”œโ”€โ”€ dns-configuration.md      # DNS and ingress setup
โ”‚   โ”‚   โ””โ”€โ”€ troubleshooting.md
โ”‚   โ”œโ”€โ”€ 03-workshop-development/
โ”‚   โ”‚   โ”œโ”€โ”€ workshop-structure.md
โ”‚   โ”‚   โ”œโ”€โ”€ custom-resources.md
โ”‚   โ”‚   โ”œโ”€โ”€ content-creation.md
โ”‚   โ”‚   โ””โ”€โ”€ best-practices.md
โ”‚   โ”œโ”€โ”€ 04-advanced-topics/
โ”‚   โ”‚   โ”œโ”€โ”€ virtual-clusters.md
โ”‚   โ”‚   โ”œโ”€โ”€ custom-images.md
โ”‚   โ”‚   โ”œโ”€โ”€ resource-management.md
โ”‚   โ”‚   โ””โ”€โ”€ security-policies.md
โ”‚   โ””โ”€โ”€ 05-agility-game/
โ”‚       โ”œโ”€โ”€ overview.md
โ”‚       โ”œโ”€โ”€ microservices-architecture.md
โ”‚       โ”œโ”€โ”€ workshop-design.md
โ”‚       โ””โ”€โ”€ deployment-patterns.md
โ”œโ”€โ”€ examples/                          # Example configurations
โ”‚   โ”œโ”€โ”€ aks-config/
โ”‚   โ”‚   โ”œโ”€โ”€ cluster-config.yaml
โ”‚   โ”‚   โ”œโ”€โ”€ terraform/
โ”‚   โ”‚   โ””โ”€โ”€ bicep/
โ”‚   โ”œโ”€โ”€ educates-config/
โ”‚   โ”‚   โ”œโ”€โ”€ values.yaml
โ”‚   โ”‚   โ””โ”€โ”€ infrastructure-providers/
โ”‚   โ””โ”€โ”€ workshops/
โ”‚       โ”œโ”€โ”€ kubernetes-basics/
โ”‚       โ”œโ”€โ”€ microservices-101/
โ”‚       โ””โ”€โ”€ agility-game-deployment/
โ”œโ”€โ”€ workshops/                         # Workshop content
โ”‚   โ”œโ”€โ”€ template-workshop/            # Workshop template
โ”‚   โ”œโ”€โ”€ agility-game-intro/           # Intro to Agility Game
โ”‚   โ”œโ”€โ”€ space-selector-deployment/    # Deploy space-selector
โ”‚   โ””โ”€โ”€ microservices-complete/       # Full microservices workshop
โ”œโ”€โ”€ scripts/                           # Automation scripts
โ”‚   โ”œโ”€โ”€ setup/
โ”‚   โ”‚   โ”œโ”€โ”€ create-aks-cluster.sh
โ”‚   โ”‚   โ”œโ”€โ”€ install-educates.sh
โ”‚   โ”‚   โ””โ”€โ”€ configure-dns.sh
โ”‚   โ”œโ”€โ”€ workshop-tools/
โ”‚   โ”‚   โ”œโ”€โ”€ create-workshop.sh
โ”‚   โ”‚   โ”œโ”€โ”€ publish-workshop.sh
โ”‚   โ”‚   โ””โ”€โ”€ test-workshop.sh
โ”‚   โ””โ”€โ”€ utilities/
โ”‚       โ”œโ”€โ”€ cleanup.sh
โ”‚       โ””โ”€โ”€ backup-workshops.sh
โ”œโ”€โ”€ infrastructure/                    # Infrastructure as Code
โ”‚   โ”œโ”€โ”€ terraform/
โ”‚   โ”‚   โ”œโ”€โ”€ main.tf
โ”‚   โ”‚   โ”œโ”€โ”€ variables.tf
โ”‚   โ”‚   โ””โ”€โ”€ modules/
โ”‚   โ””โ”€โ”€ bicep/
โ”‚       โ”œโ”€โ”€ main.bicep
โ”‚       โ””โ”€โ”€ modules/
โ””โ”€โ”€ notebooks/                         # Jupyter notebooks for learning
    โ”œโ”€โ”€ educates-basics.ipynb
    โ”œโ”€โ”€ workshop-development.ipynb
    โ””โ”€โ”€ aks-integration.ipynb

๐Ÿ“‹ Prerequisites

Required Tools

Tool Version Purpose
Azure CLI 2.77.0+ Azure resource management
kubectl 1.28+ Kubernetes cluster management
Educates CLI 2.x Educates installation and management
Docker 20.10+ Container image building
Git 2.x Version control
jq 1.6+ JSON processing

Azure Requirements

  • Azure Subscription: Active subscription with quota for:
    • Virtual Machines (4+ vCPUs minimum)
    • Public IP addresses
    • Load Balancers
  • Permissions: Contributor or Owner role on subscription
  • Resource Providers: Registered:
    • Microsoft.ContainerService
    • Microsoft.Network
    • Microsoft.Compute

Knowledge Prerequisites

  • Kubernetes: Basic understanding of pods, services, deployments
  • Azure: Familiarity with Azure portal and CLI
  • YAML: Ability to read and edit YAML configurations
  • Networking: Basic DNS and ingress concepts
  • Markdown: For workshop content creation

Install Required Tools

macOS (Homebrew):

# Azure CLI
brew install azure-cli

# kubectl
brew install kubectl

# Educates CLI
brew install educates

# Docker Desktop
brew install --cask docker

# Additional tools
brew install jq git

Linux (Ubuntu/Debian):

# Azure CLI
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

# kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

# Educates CLI
curl -Lo /tmp/educates-linux-amd64.tar.gz \
  "https://github.com/educates/educates-training-platform/releases/latest/download/educates-linux-amd64.tar.gz"
tar xvfz /tmp/educates-linux-amd64.tar.gz -C /usr/local/bin educates

# Docker
sudo apt-get update
sudo apt-get install docker.io

# Additional tools
sudo apt-get install jq git

Windows (PowerShell):

# Azure CLI
Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi
Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet'

# kubectl
Install-Script -Name install-kubectl -Scope CurrentUser -Force
install-kubectl.ps1

# Educates CLI (download from releases)
# https://github.com/educates/educates-training-platform/releases

# Docker Desktop for Windows
# Download from https://www.docker.com/products/docker-desktop

# Chocolatey for additional tools
choco install jq git

๐Ÿš€ Quick Start

1. Clone Repository

git clone https://github.com/vanHeemstraSystems/learning-educates.git
cd learning-educates

2. Set Up Azure AKS Cluster

# Set environment variables
export RESOURCE_GROUP="educates-rg"
export LOCATION="westeurope"
export CLUSTER_NAME="educates-aks"
export NODE_COUNT=3
export NODE_SIZE="Standard_D4s_v3"

# Login to Azure
az login

# Create resource group
az group create --name $RESOURCE_GROUP --location $LOCATION

# Create AKS cluster
az aks create \
  --resource-group $RESOURCE_GROUP \
  --name $CLUSTER_NAME \
  --node-count $NODE_COUNT \
  --node-vm-size $NODE_SIZE \
  --enable-managed-identity \
  --generate-ssh-keys \
  --network-plugin azure \
  --network-policy azure

# Get credentials
az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME

3. Install Educates

# Create Educates configuration
cat > educates-config.yaml << 'YAML'
clusterInfrastructure:
  provider: custom  # Use 'custom' for AKS

clusterIngress:
  domain: "educates.your-domain.com"  # Replace with your domain

clusterSecurity:
  policyEngine: kyverno

workshopSecurity:
  rulesEngine: kyverno
YAML

# Install Educates using the CLI
educates admin cluster install --config educates-config.yaml

# Verify installation
kubectl get pods -n educates

4. Deploy Your First Workshop

# Navigate to workshop template
cd workshops/template-workshop

# Deploy workshop
kubectl apply -f workshop-definition.yaml

# Create training portal
kubectl apply -f training-portal.yaml

# Get portal URL
kubectl get trainingportal

๐Ÿ“š Installation Guides

Azure AKS Setup

For detailed AKS cluster setup, see <docs/02-setup/azure-aks-setup.md>

Key Configuration Options:

  1. Network Configuration
  • Azure CNI for pod networking
  • Network policies for security
  • Public/Private cluster options
  1. Node Pool Configuration
  • System node pool (for cluster services)
  • User node pool (for workshops)
  • Auto-scaling configuration
  1. Security & Identity
  • Managed Identity
  • Azure AD integration
  • RBAC configuration
  1. Monitoring & Logging
  • Azure Monitor integration
  • Container Insights
  • Log Analytics workspace

Example Terraform Configuration:

# See infrastructure/terraform/main.tf for complete example
resource "azurerm_kubernetes_cluster" "educates" {
  name                = "educates-aks"
  location            = azurerm_resource_group.educates.location
  resource_group_name = azurerm_resource_group.educates.name
  dns_prefix          = "educates"

  default_node_pool {
    name       = "system"
    node_count = 2
    vm_size    = "Standard_D2s_v3"
  }

  identity {
    type = "SystemAssigned"
  }

  network_profile {
    network_plugin = "azure"
    network_policy = "azure"
  }
}

Educates Installation

For step-by-step Educates installation, see <docs/02-setup/educates-installation.md>

Installation Methods:

  1. Using Educates CLI (Recommended)

    educates admin cluster install --config config.yaml
  2. Using kapp-controller

    kubectl apply -f https://github.com/educates/educates-training-platform/releases/latest/download/educates-installer.yaml

Configuration for Azure AKS:

# educates-config.yaml
clusterInfrastructure:
  provider: custom
  domain: "educates.yourdomain.com"

clusterIngress:
  domain: "*.educates.yourdomain.com"
  tlsCertificateRef:
    namespace: "educates-secrets"
    name: "educates-tls"

clusterSecurity:
  policyEngine: kyverno

workshopSecurity:
  rulesEngine: kyverno

imageRegistry:
  host: "your-acr.azurecr.io"
  namespace: "educates"

storage:
  class: "managed-premium"
  group: 2000
  user: 1001

๐ŸŽ“ Workshop Development

Workshop Structure

Every Educates workshop consists of:

workshop-name/
โ”œโ”€โ”€ workshop.yaml              # Workshop definition (metadata, resources)
โ”œโ”€โ”€ resources/                 # Kubernetes resources to deploy
โ”‚   โ”œโ”€โ”€ deployment.yaml
โ”‚   โ”œโ”€โ”€ service.yaml
โ”‚   โ””โ”€โ”€ configmap.yaml
โ”œโ”€โ”€ exercises/                 # Workshop content
โ”‚   โ”œโ”€โ”€ 01-introduction.md
โ”‚   โ”œโ”€โ”€ 02-setup.md
โ”‚   โ”œโ”€โ”€ 03-deployment.md
โ”‚   โ””โ”€โ”€ 04-conclusion.md
โ”œโ”€โ”€ workshop/                  # Additional workshop files
โ”‚   โ”œโ”€โ”€ setup.d/              # Setup scripts
โ”‚   โ”œโ”€โ”€ profile.d/            # Environment setup
โ”‚   โ””โ”€โ”€ content/              # Static content (images, etc.)
โ””โ”€โ”€ README.md                 # Workshop documentation

Creating a Workshop

# Use the provided script
./scripts/workshop-tools/create-workshop.sh my-new-workshop

# Or manually using Educates CLI
educates create-workshop my-new-workshop

Workshop Definition Example

# workshop.yaml
apiVersion: training.educates.dev/v1beta1
kind: Workshop
metadata:
  name: agility-game-deployment
spec:
  title: "Deploy Agility Game Microservices"
  description: "Learn to deploy microservices on Kubernetes"
  vendor: "vanHeemstraSystems"
  difficulty: intermediate
  duration: 60m
  url: https://github.com/vanHeemstraSystems/learning-educates
  
  workshop:
    image: ghcr.io/educates/jdk17-environment:main
  
  session:
    namespaces:
      budget: medium
      limits:
        min:
          cpu: 1
          memory: 1Gi
        max:
          cpu: 2
          memory: 4Gi
    
    applications:
      terminal:
        enabled: true
        layout: split
      editor:
        enabled: true
      console:
        enabled: true
        vendor: kubernetes
  
  environment:
    objects:
    - apiVersion: v1
      kind: Namespace
      metadata:
        name: $(session_namespace)-apps

๐ŸŽฎ Agility Game Integration

Overview

The Agility Game is a microservices-based application designed for teaching project management and software development methodologies. This repository focuses on creating Educates workshops to teach deploying and managing these microservices.

Space Selector Microservice

space-selector is a web application component of the Agility Game that handles space/room selection functionality.

Workshop Integration Plan:

  1. Workshop 1: Introduction to Space Selector
  • Overview of microservice architecture
  • Understanding the space-selector component
  • Local development setup
  1. Workshop 2: Containerization
  • Creating Dockerfile for space-selector
  • Building container images
  • Pushing to Azure Container Registry
  1. Workshop 3: Kubernetes Deployment
  • Creating Kubernetes manifests
  • Deploying to AKS
  • Exposing via ingress
  1. Workshop 4: Advanced Patterns
  • ConfigMaps and Secrets
  • Health checks and monitoring
  • Scaling strategies

Example Workshop: Deploy Space Selector

# Deploy Space Selector to Kubernetes

## Introduction

In this workshop, you'll learn how to deploy the space-selector microservice
from the Agility Game to your Kubernetes cluster.

## Prerequisites

- Basic understanding of Docker
- Familiarity with Kubernetes concepts
- Access to Azure Container Registry

## Step 1: Review the Application

Let's examine the space-selector application:

```execute
cat /opt/agility-game/space-selector/package.json

Step 2: Build Container Image

Build the Docker image:

docker build -t $REGISTRY_HOST/space-selector:v1.0 .

Step 3: Push to Registry

Push the image to Azure Container Registry:

docker push $REGISTRY_HOST/space-selector:v1.0

Step 4: Deploy to Kubernetes

Apply the deployment manifest:

kubectl apply -f deployment.yaml

Verify the deployment:

kubectl get pods -n $(session_namespace)

Step 5: Access the Application

The application is now accessible at:

https://space-selector-$(session_namespace).$(ingress_domain)

Conclusion

Youโ€™ve successfully deployed a microservice to Kubernetes!

### Agility Game Workshop Series

Planned workshop progression:

1. **agility-game-intro**: Introduction to Agility Game and microservices
2. **space-selector-deployment**: Deploy space-selector (as shown above)
3. **service-mesh-basics**: Implement service mesh for microservice communication
4. **observability**: Add monitoring and logging
5. **ci-cd-pipeline**: Automated deployment pipeline
6. **microservices-complete**: Full Agility Game deployment

## ๐Ÿ“š Learning Resources

### Official Documentation
- [Educates Documentation](https://docs.educates.dev/)
- [Educates GitHub](https://github.com/educates/educates-training-platform)
- [Azure AKS Documentation](https://learn.microsoft.com/en-us/azure/aks/)

### Tutorials & Guides
- [Getting Started with Educates](docs/01-introduction/what-is-educates.md)
- [Workshop Development Guide](docs/03-workshop-development/workshop-structure.md)
- [Best Practices](docs/03-workshop-development/best-practices.md)

### Community
- [Educates Community](https://educates.dev/)
- [GitHub Discussions](https://github.com/educates/educates-training-platform/discussions)
- [Kubernetes Slack](https://kubernetes.slack.com/) - #educates channel

### Example Workshops
- [Official Educates Samples](https://github.com/educates/educates-training-platform/tree/main/samples)
- [Lab Kubernetes Tutorial](https://github.com/educates/lab-k8s-fundamentals)

## ๐Ÿ”ง Troubleshooting

### Common Issues

#### Issue: Pods not starting

**Symptoms:**

kubectl get pods -n educates NAME READY STATUS RESTARTS AGE session-manager-xxx 0/1 ImagePullBackOff 0 2m

**Solution:**
1. Check image pull secrets
2. Verify Azure Container Registry authentication
3. Check node resources

```bash
kubectl describe pod session-manager-xxx -n educates
kubectl top nodes

Issue: Workshop sessions not accessible

Symptoms:

  • Training portal shows workshops but sessions fail to create
  • DNS resolution errors

Solution:

  1. Verify DNS configuration
  2. Check ingress controller
  3. Validate certificate configuration
# Check ingress
kubectl get ingress -A

# Check DNS
nslookup educates.yourdomain.com

# Check certificates
kubectl get certificate -n educates

Issue: AKS cluster quota exceeded

Symptoms:

Error: (QuotaExceeded) Operation could not be completed as it results in exceeding approved Total Regional Cores quota.

Solution:

# Check current quota
az vm list-usage --location westeurope -o table

# Request quota increase
az support tickets create --title "AKS quota increase" ...

For more troubleshooting tips, see <docs/02-setup/troubleshooting.md>

๐Ÿค Contributing

Contributions are welcome! Please see <CONTRIBUTING.md> for guidelines.

How to Contribute

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-workshop)
  3. Commit your changes (git commit -m 'Add amazing workshop')
  4. Push to the branch (git push origin feature/amazing-workshop)
  5. Open a Pull Request

Development Workflow

# Clone your fork
git clone https://github.com/YOUR_USERNAME/learning-educates.git

# Add upstream remote
git remote add upstream https://github.com/vanHeemstraSystems/learning-educates.git

# Create feature branch
git checkout -b feature/my-feature

# Make changes and test
./scripts/workshop-tools/test-workshop.sh my-workshop

# Commit and push
git add .
git commit -m "Description of changes"
git push origin feature/my-feature

๐Ÿ“ License

This project is licensed under the Apache License 2.0 - see the file for details.

Educates is also licensed under Apache License 2.0 - see Educates License.

๐Ÿ™ Acknowledgments


๐Ÿ“ž Contact & Support

Repository Maintainer: Willem van Heemstra

Need Help?

  1. Check the documentation
  2. Review troubleshooting guide
  3. Open an issue
  4. Join the discussions

Note: This is a learning repository for understanding Educates and deploying it on Azure AKS. For production deployments, ensure you follow all security best practices and Azure Well-Architected Framework guidelines.

Started: January 2026
Status: Active Development

About

Learning Educates

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published