Platform Training Program
This document includes a very rough syllabus for what would have to be covered by this program to join the platform team at CSESoc. This is very much still subject to change, and feedback is encouraged.
- 1 Summary
- 1.1 Week 0: Introduction to Software Architecture
- 1.1.1 Weekly Objectives
- 1.2 Week 1: Introduction to Containers
- 1.2.1 Weekly Objectives
- 1.3 Week 2: Understanding Docker
- 1.3.1 Weekly Objectives
- 1.4 Week 3: Introduction to CI/CD
- 1.4.1 Weekly Objectives
- 1.5 Week 4: Introduction to Docker Compose
- 1.5.1 Weekly Objectives
- 1.6 Week 5: Introduction to Kubernetes
- 1.6.1 Weekly Objectives
- 1.7 Week 6: Extended Kubernetes Concepts Part 1
- 1.7.1 Weekly Objectives
- 1.8 Week 7: Extended Kubernetes Concepts Part 2
- 1.8.1 Weekly Objectives
- 1.9 Week 8: Infrastructure as Code (IaC)
- 1.9.1 Weekly Objectives
- 1.10 Week 9: Monitoring and Logging
- 1.10.1 Weekly Objectives:
- 1.1 Week 0: Introduction to Software Architecture
Summary
This course aims to provide a comprehensive introduction to containerisation and Kubernetes. Starting with a basic understanding of software architecture, the course will cover the fundamentals of containerisation, including Docker and other container technologies. Students will gain hands-on experience working with containers, including building and deploying images, and using Docker Compose to manage multi-container applications.
The course will then cover Kubernetes, the leading container orchestration platform, including its architecture and components, and how to deploy and manage containers on a Kubernetes cluster. Students will also learn about advanced Kubernetes concepts such as service meshes, ingress, volumes, and operators.
The course will also cover Infrastructure as Code (IaC) using Terraform and Github Actions, allowing students to automate the provisioning, configuration, and management of infrastructure.
The course will also dive into monitoring and logging, covering core observability concepts, Prometheus, and Grafana, including how to set up monitoring, logging and tracing in a Kubernetes cluster.
Throughout the course, students will gain hands-on experience working with real-world tools and technologies, and will have the opportunity to apply their knowledge to real-world scenarios. By the end of the course, students will have a solid understanding of containerisation and Kubernetes, and will be well-prepared to work with these technologies in a production environment.
Week 0: Introduction to Software Architecture
Introduction to software architecture concepts: Explain the different types of software architecture such as monoliths and microservices and the pros and cons of each.
Understanding the benefits of microservices architecture: Discuss the benefits of using a microservices architecture such as scalability, maintainability, and flexibility.
Introduction to containerisation in the context of software architecture: Explain how containerisation can be used in the context of a microservices architecture to improve portability, isolation and scalability.
Hands-on exercise: Analysing a simple application architecture and identifying its components that could benefit from being containerised.
Weekly Objectives
Introduction to software architecture: Students will be able to explain different types of software architecture and understand the benefits of microservices architecture.
Introduction to containerisation: Students will be able to understand how containerisation can be used to improve the portability, isolation and scalability of microservices.
Analysing a simple application architecture: Students will be able to identify the different components of an application and understand how they could benefit from being containerised.
Week 1: Introduction to Containers
Overview of containerisation: Review the concept of containerisation and its benefits from the previous week and provide a more in-depth explanation of how containers work.
Introduction to Containerisation tools: Explain the different technologies available for containerisation (Docker, Podman, etc.) and the advantages and disadvantages of each one.
Understanding of Docker Images and Containers: Discuss the difference between Docker images and containers, the types of images, how they work and how to create and manage them using the Docker command line interface or other alternatives such as Podman.
Hands-on exercise: Installing and running a basic container using Docker or Podman: Provide instructions on how to install and use both Docker and Podman, on different platforms (Windows, MacOS, Linux) and how to run a basic container using the command line interface of either Docker or Podman.
Weekly Objectives
Understanding of containerisation: Students will be able to explain how containers work and the benefits of containerisation.
Introduction to Containerisation tools: Students will be able to understand the different technologies available for containerisation and the advantages and disadvantages of each one.
Understanding of Docker Images and Containers: Students will be able to discuss the difference between Docker images and containers and how to create and manage them using different tools.
Hands-on experience: Students will be able to install and run a basic container using both Docker and Podman
By the end of week 1, students will have a basic understanding of how containers work and how different tools such as Docker and Podman can be used to work with containers. The hands-on exercise will give students practical experience of working with different containerisation tools, and this will be a great foundation for the following weeks where we will delve deeper into containerisation technologies and practices. By the end of the week, students will have a good understanding of the different options they have to work with containers and they will be able to pick the one that best fits their needs and requirements.
Week 2: Understanding Docker
Introduction to Docker and its components: Explain what Docker is, its main components such as the Docker daemon, Docker client and how they work together.
Understanding Docker images: Discuss the different types of Docker images (base, snapshot, etc.) and how to create and manage them using the Docker command line interface or other alternatives.
Hands-on exercise: Creating and managing Docker images using the Docker client or alternative tools: Provide instructions on how to create a Docker image from a container, how to push and pull images to/from a Docker registry or other alternatives, and how to manage images (tagging, deleting, etc.).
Weekly Objectives
Introduction to Docker: Students will be able to understand what Docker is and its main components.
Understanding Docker images: Students will be able to discuss the different types of Docker images and how to create and manage them.
Hands-on experience: Students will be able to create and manage Docker images using the Docker client or alternative tools.
By the end of week 2, students will have a good understanding of how to work with Docker images and how to manage them. They will also be able to use alternative tools to manage images as well. The hands-on exercise will give them practical experience working with images and preparing them to move on to next weeks where they will learn how to run and manage multiple containers with Docker.
Week 3: Introduction to CI/CD
Overview of the continuous integration and continuous deployment process: Explain what CI/CD is, why it is important, and how it fits into the overall software development process.
Understanding the role of CI/CD in modern software development: Discuss the benefits of using CI/CD, such as faster release cycles, increased quality, and improved collaboration.
Hands-on exercise: Setting up a basic CI pipeline using GitHub Actions or other alternatives: Provide instructions on how to set up a basic CI pipeline using GitHub Actions or other alternatives, including creating a workflow file, configuring actions, and triggering the pipeline for a simple application.
Weekly Objectives
Understanding of the continuous integration and continuous deployment process: Students will be able to explain what CI/CD is and its importance in modern software development.
Understanding the role of CI/CD: Students will be able to discuss the benefits of using CI/CD and understand how it fits into the software development process.
Hands-on experience: Students will be able to set up a basic CI pipeline using GitHub Actions or other alternatives.
By the end of week 3, students will have a good understanding of CI/CD and its importance in modern software development. They will also be able to understand the benefits of using CI/CD and how it fits into the software development process. The hands-on exercise will give them practical experience working with a CI pipeline, and this will prepare them for next weeks where they will learn how to use containers in the context of CI/CD.
Week 4: Introduction to Docker Compose
Understanding the concept of multi-container applications: Explain what multi-container applications are, the benefits of using them, and the challenges they may present.
Introduction to Docker Compose and its features: Introduce Docker Compose, its features and how it can be used to simplify the deployment of multi-container applications.
Hands-on exercise: Creating and deploying a multi-container application using Docker Compose: Provide instructions on how to create a multi-container application using Docker Compose, including configuring services, networks, and volumes, and how to deploy the application to a local environment.
Weekly Objectives
Understanding of multi-container applications: Students will be able to explain what multi-container applications are, the benefits of using them and the challenges they may present.
Introduction to Docker Compose: Students will be able to understand what Docker Compose is and its features and how it can be used to simplify the deployment of multi-container applications.
Hands-on experience: Students will be able to create and deploy a multi-container application using Docker Compose.
By the end of week 4, students will have a good understanding of how to work with multi-container applications and how to simplify their deployment using Docker Compose. The hands-on exercise will give them practical experience working with multi-container applications, and this will prepare them for next weeks where they will learn how to use orchestration tools like Kubernetes to manage the deployment of multi-container applications at scale.
Week 5: Introduction to Kubernetes
Overview of Kubernetes and its components: Explain what Kubernetes is, its main components such as Pods, Services, Replication Controllers, etc. and how they work together.
Understanding the role of Kubernetes in container orchestration: Discuss the benefits of using Kubernetes, such as scaling, failover, and service discovery.
Hands-on exercise: Deploying a multi-container application to a Kubernetes cluster: Provide instructions on how to deploy a multi-container application to a Kubernetes cluster using manifests, including creating pods, services, and deployments, and how to configure and access the application.
Weekly Objectives
Introduction to Kubernetes: Students will be able to understand what Kubernetes is and its main components.
Understanding the role of Kubernetes: Students will be able to discuss the benefits of using Kubernetes in container orchestration.
Hands-on experience: Students will be able to deploy a multi-container application to a Kubernetes cluster.
By the end of week 5, students will have a good understanding of how to use Kubernetes for container orchestration, its components and how it works. The hands-on exercise will give them practical experience working with Kubernetes and deploying multi-container applications, this will prepare them for next weeks where they will learn how to use infrastructure as code tools to deploy and manage Kubernetes clusters.
Week 6: Extended Kubernetes Concepts Part 1
Introduction to Service Mesh: Explain what a Service Mesh is, its main components, and its role in improving service communication and security in a Kubernetes cluster.
Understanding Ingress and Kubernetes Services: Discuss the role of Ingress and Kubernetes Services in routing traffic to pods within a cluster, and how to configure and use them.
Understanding Volumes and VolumeMounts: Explain the role of Volumes and VolumeMounts in providing persistent storage for pods, and how to configure and use them.
Introduction to Operators and Service Accounts: Explain what Operators and Service Accounts are, and how they can be used to automate and manage complex applications and to provide specific permissions and access controls to pods.
Introduction to Helm: Explain what Helm is and how it can be used as a package manager for Kubernetes to manage, install, and upgrade applications and resources.
Weekly Objectives
Introduction to Service Mesh: Students will be able to understand what a Service Mesh is, its main components, and its role in improving service communication and security in a Kubernetes cluster.
Understanding Ingress and Kubernetes Services: Students will be able to understand the role of Ingress and Kubernetes Services in routing traffic to pods within a cluster, and how to configure and use them.
Understanding Volumes and VolumeMounts: Students will be able to understand the role of Volumes and VolumeMounts in providing persistent storage for pods, and how to configure and use them.
Introduction to Operators and Service Accounts: Students will be able to understand what Operators and Service Accounts are, and how they can be used to automate and manage complex applications and to provide specific permissions and access controls to pods.
Introduction to Helm: Students will be able to understand what Helm is and how it can be used as a package manager for Kubernetes to manage, install, and upgrade applications and resources.
By the end of week 6, students will have a good understanding of advanced Kubernetes concepts, including Service Mesh, Ingress, Kubernetes Services, Volumes and VolumeMounts, Operators, Service Accounts, and Helm. The hands-on exercise will give them practical experience working with these concepts and will prepare them for next weeks where they will continue the advanced Kubernetes Concepts.
Week 7: Extended Kubernetes Concepts Part 2
Introduction to mTLS and Role-Based Access Control (RBAC): Explain the importance of mutual Transport Layer Security (mTLS) in securing communication between pods and services, and how to configure it. Understand the Role-Based Access Control (RBAC) in securing access to a Kubernetes cluster and how to configure it.
Introduction to the Open Policy Agent (OPA): Explain what the Open Policy Agent is, its role in providing fine-grained policy enforcement in a Kubernetes cluster, and how to use it to define and enforce policies.
Introduction to Container Network Interface (CNI): Explain what the CNI is, its role in providing network connectivity to pods, and how to configure and use it in a Kubernetes cluster.
Hands-on exercise: Securing a Kubernetes cluster with mTLS and RBAC, Enforcing policies with OPA, and Configuring network connectivity with CNI.
Weekly Objectives
Introduction to mTLS and Role-Based Access Control (RBAC): Students will be able to understand the importance of mutual Transport Layer Security (mTLS) in securing communication between pods and services, and how to configure it. They will also be able to understand the Role-Based Access Control (RBAC) in securing access to a Kubernetes cluster and how to configure it.
Introduction to the Open Policy Agent (OPA): Students will be able to understand what the Open Policy Agent is, its role in providing fine-grained policy enforcement in a Kubernetes cluster, and how to use it to define and enforce policies.
Introduction to Container Network Interface (CNI): Students will be able to understand what the CNI is, its role in providing network connectivity to pods, and how to configure and use it in a Kubernetes cluster.
Hands-on experience: Students will be able to secure a Kubernetes cluster with mTLS and RBAC, enforce policies with OPA, and configure network connectivity with CNI.
By the end of week 7, students will have a good understanding of advanced Kubernetes concepts, including mTLS, RBAC, the Open Policy Agent, and the Container Network Interface. The hands-on exercise will give them practical experience working with these concepts and provide a comprehensive understanding of how to secure and manage a Kubernetes cluster in a production environment. This knowledge will be beneficial in the next weeks where they will learn how to use infrastructure as code tools to deploy and manage Kubernetes clusters at scale.
Week 8: Infrastructure as Code (IaC)
Introduction to Infrastructure as Code (IaC): Explain what IaC is, its benefits, and how it can be used to automate the provisioning, configuration, and management of infrastructure.
Introduction to Terraform: Introduce Terraform, its features and how it can be used to define, provision and manage infrastructure as code.
Hands-on exercise: Creating and deploying a Kubernetes cluster using Terraform: Provide instructions on how to create and deploy a Kubernetes cluster using Terraform, including configuring and provisioning resources such as VMs, Load Balancers, and DNS, and how to manage and update the cluster over time.
Hands-on exercise: Creating a CI/CD pipeline using Github Actions: Provide instructions on how to create a CI/CD pipeline using Github Actions, including building, testing, and deploying code changes to the Kubernetes cluster provisioned using Terraform.
Weekly Objectives
Introduction to IaC: Students will be able to understand what IaC is, its benefits, and how it can be used to automate the provisioning, configuration, and management of infrastructure.
Introduction to Terraform: Students will be able to understand what Terraform is, its features and how it can be used to define, provision, and manage infrastructure as code.
Hands-on experience: Students will be able to create and deploy a Kubernetes cluster using Terraform.
Hands-on experience: Students will be able to create a CI/CD pipeline using Github Actions, including building, testing, and deploying code changes to the Kubernetes cluster provisioned using Terraform.
By the end of week 8, students will have a good understanding of Infrastructure as Code, Terraform, and Github Actions, how they can be used to automate the provisioning, configuration, and management of infrastructure, as well as automate the CI/CD pipeline. The hands-on exercises will give them practical experience working with Terraform and Github Actions, and provide a comprehensive understanding of how to deploy and manage Kubernetes clusters at scale using these tools. This knowledge will be beneficial in real-world scenarios where they will have to deploy and manage Kubernetes clusters in a production environment using IaC.
Week 9: Monitoring and Logging
Introduction to Kubernetes monitoring: Explain the importance of monitoring in a Kubernetes cluster and discuss the different types of monitoring such as resource, application, and system monitoring.
Introduction to Core Observability concepts: Explain the key observability concepts, such as metrics, logging, and tracing, and how they can be used to understand the behavior and performance of a system.
Introduction to Prometheus: Introduce Prometheus, its features and how it can be used to monitor Kubernetes clusters.
Hands-on exercise: Setting up Prometheus monitoring for a Kubernetes cluster: Provide instructions on how to set up Prometheus monitoring for a Kubernetes cluster, including how to scrape metrics, create alerts, and visualise data.
Introduction to Kubernetes logging: Explain the importance of logging in a Kubernetes cluster and discuss different types of logging such as application and system logging.
Introduction to Grafana: Introduce Grafana, its features, and how it can be used to visualise and alert on metrics, traces and logs in a Kubernetes cluster.
Hands-on exercise: Setting up Grafana for monitoring, logging and tracing in a Kubernetes cluster: Provide instructions on how to set up Grafana to collect and visualise metrics, traces and logs from a Kubernetes cluster.
Weekly Objectives:
Introduction to Kubernetes monitoring: Students will be able to understand the importance of monitoring in a Kubernetes cluster and the different types of monitoring such as resource, application, and system monitoring.
Introduction to Core Observability concepts: Students will be able to understand the key observability concepts, such as metrics, logging, and tracing, and how they can be used to understand the behavior and performance of a system.
Introduction to Prometheus: Students will be able to understand what Prometheus is, its features, and how it can be used to monitor Kubernetes clusters.
Hands-on experience: Students will be able to set up Prometheus monitoring for a Kubernetes cluster.
Introduction to Kubernetes logging: Students will be able to understand the importance of logging in a Kubernetes cluster and different types of logging.
Introduction to Grafana: Students will be able to understand what Grafana is, its features, and how it can be used to visualise and alert on metrics, traces and logs in a Kubernetes cluster.
Hands-on experience: Students will be able to set up Grafana for monitoring, logging and tracing in a Kubernetes cluster, they will be able to collect and visualise metrics, traces and logs from a Kubernetes cluster.
By the end of week 9, students will have a good understanding of monitoring and logging concepts in a Kubernetes cluster, including Prometheus and Grafana for monitoring, Core observability concepts, and how to collect, analyse, and visualise metrics, traces and logs in a Kubernetes cluster. The hands-on exercises will give them practical experience working with these concepts and provide a comprehensive understanding of how to monitor and debug a Kubernetes cluster in a production environment.