Skip to content

Outreach preflight checklist

James O. D. Hunt edited this page May 4, 2023 · 16 revisions

Kata Containers Outreach pre-flight checklist

Overview

This page lists the assumptions and requirements for a potential outreach project (aka "the stuff that needs to be in place before an outreach project starts").

Experience

The table below shows some of the skills that the students will need for a successful outreach project.

Category Type Task Notes
project preferred Familiarity with GitHub Forking a repo, issues, labels, PRs, projects, etc
tooling essential Familiarity a high quality text editor, ideally with LSP support Common examples are vim, emacs, and Visual Studio.
tooling essential Familiarity with the git version control system or a similar version control system
environment essential Familiarity with the Linux command line General concepts and the bash shell
skills essential Experience in at least one programming language C/C++, Java, Python, etc
hardware essential Permanent access to a Linux environment for development and testing VPS systems should have support for virtualisation (Linux kernel KVM support), and have sufficient RAM memory for all students to run Kata simultaneously ;)
learn helpful Familiarity with the markdown document format All Kata docs are written in the GitHub flavoured markdown variant
tooling recommended Understand the implications of copying text files between Linux and Windows / Mac system (hint: line endings) Only applies if you are not using a Linux environment for development
project recommended Familiarity with "containers" and differences to VMs (virtual machines) Have you used docker, containerd? QEMU, VirtualBox, VMware, Parallels, etc?
project required Read and agree to our code of conduct
project essential Read the Kata contributing guide Skim and refer back as necessary
copyright possibly required Check who owns the copyright for your contributions See the copyright section.

Notes:

  • If a student doesn't have some of these skills, the mentors will help, but if all the skills listed are new to a student, they may need to reconsider as there may not be sufficient time to learn the prerequisite skills before starting on the main project.

Work in small teams or as individuals

You will need to decide whether you want to work in small teams (if permitted by your organisation?) or as individuals.

See the Outreach-student-faq for some thoughts on this.

Copyright

All Kata Containers source files must contain a license header and a copyright header.

If you create any new source files where the language supports adding comments, you will need to specify the copyright header. The following are "rules of thumb" only: it is your responsibility to determine the correct copyright owner:

  • If you work for a company or organisation, they will generally require you to specify their name as the copyright holder.

  • If you are studying at an educational establishment, please check with your tutor to see who will own the copyright.

  • If you are an individual not associated with a company or organisation, you will generally specify your name(s) in the copyright header.

    The name(s) specified must be your actual name(s), not aliases, nick-names, GitHub usernames or social media usernames.

Note: If in doubt, ask someone for help!

Required equipment

  • Each student will need "permanent" access to a Linux environment (ideally Ubuntu or Fedora) for development and testing.

    Here, permanent means, "full, uninterrupted access for the duration of the outreach project".

  • Ideally, each student will have their own system, but sharing of server environments may be possible, with care.

  • If your personal system is not running Linux, although it is possible to run Kata Containers on Linux using virtualisation technologies on Microsoft Windows and Apple Mac systems, this will require additional setup and incur a performance overhead.

Important:

Students will need access to a suitable system before the outreach project starts.

Environment O/S Rating Notes
Dedicated mini server / desktop Linux Ideal
Linux laptop / desktop Linux Almost ideal Care needs to be taken if this is the students main system.
VPS environment Linux Good to ideal Must support nested virtualisation.
Windows or Mac system with virtualisation non-Linux variable/depends May require BIOS changes. Complex setup. Performance may be an issue.

Equipment details

The system must have virtualisation enabled to allow the creation of Virtual Machines (VMs). If the environment itself is virtualised, nested virtualisation must also be enabled.

Note:

If you are really not able to get access to a system that supports virtualisation (to allow you to run Kata Containers), you can still participate. However, you will be restricted to working on tasks that are not directly related to creating containers. For example, you may be able to make contributions to areas such as:

  • tooling
  • unit tests (these do not create virtual machines)
  • documentation

System specification

Note:

  • The figures in the table below are approximate minimum values, except for GitHub Codespace which shows actual values, correct at the time of writing.
  • The figures combine minimum values for rust development and the running of a Kata Container.
  • The Kata Containers configuration file does allow you to adjust some of the resources used to run a Kata Container.
System Usable for development? Can run Kata? Performance Virtualisation memory (RAM) Disk space CPU Notes
"Bare metal" Linux server (a physical computer) yes yes best [^1] 4G / user 3G / user 1 / user
Personal Linux system yes yes good [^1] 4G 3G 1
Personal non-Linux system yes maybe ok [^1]. Nested virtualisation performance overhead 4G 3G 1 Need to install Linux in a VM first
Linux VPS yes maybe varies May disallow VMs! [^2] 4G / user 3G / user 1 / user Depends on system spec & available CPU features
GitHub Codespace (a VPS) yes no [^3] ok [^3] 4G 16G 2 Figures are actual values

Key:

[^1]: You may need to enable virtualisation in the BIOS / setup menu.

[^2]: A VPS needs to allow virtualisation (and possibly nested virtualisation) to be usable. Not all cloud providers offer virtualisation support.

[^3]: Although the GitHub Codespace environment supports virtualisation, it appears that environment is a restricted Docker-based one that does not provide systemd. Although it is possible to install containerd and Kata Containers in this environment, it does not function as expected since:

  • containerd is unable to mount resources.
  • Kata Containers will not run with QEMU since the kmod tools (modprobe et al) are not available.

This means the vhost_vsock and vhost_net kernel modules cannot be loaded (required for QEMU). Although Kata could be made to work (by reconfiguring it to use Cloud Hypervisor which does not require kernel support for VSOCK), we cannot work around the issue with containerd.

Setup steps

  • Install Kata Containers

  • Check if the system is capable of running Kata Containers

    Notes:

    • Ironically, you need to install Kata to determine if your system is capable of running Kata! 😄
    • You may need to enable virtualisation in the BIOS / setup menu as it is sometimes disabled by default.
  • Install rust

  • Install standard development tools

    • For Debian/Ubuntu systems, run:

      $ sudo apt -y install build-essential
    • For Fedora/Redhat type systems, run:

      $ sudo dnf -y install @development-tools

Other considerations

If the team are all using a single system, you will need to increase the specification of the system (CPU, disk, memory). The table below summarises why:

Task Main resource used Notes
Run a Kata Container memory
Rust compiler CPU, memory, disk
Editor with LSP support CPU, memory, disk

Collaboration services

Each student will need an account with the following free services.

Category Type Task Notes
project required A GitHub account
project required A Slack account

Required reading

Appendices

Terminology

Term Description Notes
LSP Language Server Protocol System providing advanced capabilities in editors
VM Virtual Machine
VPS Virtual Private Server A "cloud system"

See also