- Docker is a tool designed to make it easier to create, deploy and run applications by using containers
- It’s a complimentary technology to hardware virtualization (Ex: VMware, Hyper-V)
- Docker is a bit like a virtual machine
- Container is a lightweight virtual machine that virtualize the host operating system
- A container contains and application, OS libraries, and configuration files except operating system kernel
- Container is a slicing the operating system
- Example: Docker, Podman
- Speed to Market the applications
- Portability across machines, Clouds and On-premise
- Version Control
- Component reuse ( Golden Image )
- Easily shippable
- Kubernetes support
- Could Native
- Docker daemon runs on a logical port and it’s a single point of failure
- Docker daemon owns all the child processes (the running containers). The docker host will terminate every container when the daemon fails
- Securing the docker daemon port in the corporate network is intrusive
- Docker CE is an Opensource tool with no technical support
- Podmn is a daemon less container engine for developing, managing, and running OCI (Open Container Initiative) containers on a Linux System.
- Containers can either be run as root or non-root
- Podman directly interacts with runc
- It can pull and run Docker Images without Docker Engine
- Native integration with Buildah, Skopeo and CRI-O
- Podman commands are the same as Docker
- Linux based
- No support for Windows OS based Containers
- No equivalent of Docker-Compose component
- New product with bugs and minimum features
- Compatibility issue with root Containers
- Orchestration is the automated configuration, coordination and management of Cloud resources and software.
- E.g Azure Resource Manager (ARM) templates, AWS Cloud Formation, Google Cloud Deployment Manager
Container orchestration is the automatic process of provisioning, managing, scheduling and monitoring the container workloads within highly available clusters. E.g Kubernetes
Kubernetes is an open source container orchestration platform that automates many of the manual processes involved in deploying, managing, and scaling containerized applications.
What are Kubernetes clusters?
You can cluster together groups of hosts running Linux containers, and Kubernetes helps you easily and efficiently manage those clusters.
Kubernetes clusters can span hosts across on-premise, public, private, or hybrid clouds. For this reason, Kubernetes is an ideal platform for hosting cloud-native applications that require rapid scaling, like real-time data streaming through Apache Kafka.
Container Orchestration with Kubernetes:
High Level Architecture:
Kubernetes Components – Control Plane (Master Nodes)
A kubernetes cluster consists of the components that represent the control plane ( Master Nodes ) and a set of machines called nodes ( Worker Nodes )
- The control plane hosts the components used to manage the Kubernetes cluster.
- Worker nodes can be virtual machines (VMs) or physical machines. A node hosts pods, which run one or more containers.
➢ The API server is the front end for the kubernetes control plane.
➢ A highly available key value store database used as Kubernetes backing store for all cluster data
➢ It watches for newly created pods with no assigned worker node, and selects a worker node for them to run on.
➢ Control Plane component that runs system controller processes. E.g Node Controller, Replication Controller
➢ It embeds cloud-specific control logic. It only runs controllers that are specific to a cloud provider.
➢ Not applicable for On-Premise Kubernetes.
Kubernetes Components – Cluster (Worker Nodes)
A Kubernetes cluster consists of a set of worker nodes that run containerized applications. Every cluster has at least one worker node.
➢ An agent that runs on each worker node in the cluster. It makes sure that containers are running in a Pod.
➢ It is a network proxy that runs on each node in the cluster.
➢ Kube-proxy maintains network rules on worker nodes.
➢ The container runtime is the software that is responsible for running containers.
➢ E.g. CRI-O, Docker
➢ Cluster DNS is a DNS server, which serves DNS records for kubernetes services
Container Resource Monitoring:
➢ Container Resource Monitoring records generic time-series metrics about containers in a central database, and provides as UI for browsing that data.
KUBECTL – Command Line Interface:
➢ Kubectl is a CLI (Command Line Interface) tool for managing kubernetes clusters.
➢ It is used
● to deploy and manage application on kubernetes
● for automating kubernetes operations
● for building higher-level frameworks
➢ A Pod is a group of one or more containers, with shared storage/network, and a specification for how to run the containers.
➔ Every Pod has an ephemeral IP address
➔ Resource Sharing and Consumption
➢ A Replicaset’s purpose is to maintain a stable set of replica pods running at any given time.
➢ It is often used to guarantee the availability of a specified number of identical pods
A Deployment is an object that manages ReplicaSet’s
➢ A Deployment can hold pointers to multiple ReplicaSet’s, (E.g,v1,v2,v3), and it can control the slow and safe migration from one ReplicaSet to another
➢ Deployments can also be scaled