Containerized Applications
Extremely brief intro
Version 2023-02-16 intro
This talk is all about containerized applications and the tools to create them.
Managing, deploying and scaling these present exciting prospects.
It does come with a bit of a learning curve.
Containers are a neat trick in which an operating system uses virtualization to create a set of isolated instances. They look like real computers to the programs running inside them.
Applications are setup in an image ready to be run in a standard way.
All required dependencies are carefully added to the container image, ensuring the application will run without any further tinkering.
Container images can be deployed in a number of environments and scenarios:
This kind of infrastructure makes horizontal scaling of applications much faster and less error-prone.
Automated monitoring in the infrastructure can re-route traffic to live containers, decommision failing containers and kick of new ones to replace them. This makes the application more resilient.
Since the infrastructure keeps track of running applications and automatically routes traffic to live instances, it's possible to kill of old instances and replace them with a new application version without down-time.
In their own words, Docker is the company driving the container movement.
Docker implements a high-level API to provide lightweight containers that run processes in isolation.
Building on top of facilities provided by the Linux kernel, a Docker container, unlike a virtual machine, does not require or include a separate operating system.
Software tools are available to create, maintain and run docker containers.
Home page is docker.com
The Open Container Initiative is an open governance structure for the express purpose of creating open industry standards around container formats and runtimes.
The OCI currently contains three specifications: the Runtime Specification (runtime-spec), the Image Specification (image-spec) and the Distribution Specification (distribution-spec).
The Runtime Specification outlines how to run a “filesystem bundle” that is unpacked on disk.
At a high-level an OCI implementation would download an OCI Image then unpack that image into an OCI Runtime filesystem bundle.
At this point the OCI Runtime Bundle would be run by an OCI Runtime.
Home page is opencontainers.org
All these specifications ensure that the way we compose runtime images and how we run them is standards based. This in turn gives us the largest degree of freedom and avoids vendor lock-in.
Kubernetes (k8s) is an open-source system for automating deployment, scaling and management of containerized applications that was originally designed by Google.
Kubernetes builds upon 15 years of experience of running production workloads at Google, combined with best-of-breed ideas and practices from the community.
It aims to provide a "platform for automating deployment, scaling, and operations of application containers across clusters of hosts". It works with a range of container tools, including Docker.
Home page is kubernetes.io
microk8s, created by Canonical is the smallest, fastest, fully-conformant Kubernetes that tracks upstream releases.
Lightweight upstream Kubernetes. No APIs added or removed
Perfect for micro clouds and edge computing.
Excellent for running a k8s cluster on private on-premise infrastructure.
Zero-ops infrastructure. Set it up and let it run.
Home page is microk8s.io
Note: microk8s uses containerd to run the images.