Let’s start exploring Kubernetes.
Kubernetes (also known as k8s or “Kube”) is an open-source container orchestration tool that automates many of the manual processes involved in deploying, managing, and scaling containerized applications.
In other words, you can cluster together groups of hosts running Linux containers, and Kubernetes helps you easily and efficiently manage those clusters.
Kubernetes was originally developed by Google and then donated to Cloud Native Computing Foundation (CNCF)
With Kubernetes you can:
- Orchestrate containers across multiple hosts.
- Make better use of hardware to maximize the resources needed to run your enterprise apps.
- Control and automate application deployments and updates.
- Mount and add storage to run stateful apps.
- Scale containerized applications and their resources on the fly.
- Declaratively manage services that guarantee the deployed applications are always running the way you intended them to run.
- Health-check and self-heal your apps with auto-placement, auto-restart, auto-replication, and autoscaling.
Let’s start with Kubernetes (K8s) by understanding its features:
- Automatic Bin-Packing: This feature allows Kubernetes to automatically place containers based on their resource requirements like CPU and Memory(RAM) while not sacrificing availability.
- Service discovery and Load Balancing: Kubernetes gives Pods (set of containers) their own IP addresses and a single DNS name for a set of Pods, and can load-balance across them(Known as a service)
With this system, K8s have control over networking and communication between Pods and can load-balance across them.
3. Storage Orchestration: Containers running inside a Pod may need to store data. Pods can have storage volumes. Usually, a single volume is shared within all the containers in a Pod.
You can mount the storage system of your choice: Local, Cloud, Network (NFS)
4. Self-Healing: If the container fails, k8s restarts the containers. If a node dies, k8s replaces and reschedule containers on other nodes. If a container doesn’t respond to the k8s monitoring system or user-defined health checks, k8s kills the container.
All above operations are done using Replication controller(come under control management in Kubernetes, will see in Kubernetes architecture).
5. Automated Rollouts and Rollbacks: K8s ensures there is no downtime during rollout and rollback.
Rollouts: Deploy changes or configurations to the application
Rollbacks: Revert the changes and resolve them to the previous state.
6. Secret and Configuration management:
Secret: Secret is a K8s object that separates sensitive data like passwords, keys, tokens, etc. from Pods and Containers. This object is created outside Pods and Containers.
Config Map: It is a K8s object that separates configurations from Pods and Containers. Configuration of K8s is handled using Config Map.
secret and configurations are stored in “etcd”, which is a key-value datastore.
7. Batch-Execution: In k8s, run to completion jobs are primarily used for batch processing. Each job creates one or more Pods.
During job execution, if any container or Pod fails, Job controller will re-schedule the container, Pod on another node.
It can also run multiple Pods in parallel and can scale up if required.
8. Horizontal scaling: In K8s, we can scale up or scaledown the containers using commands, from the dashboards, automatically based on CPU usage.
Scale-up: To create more replicas(exact copy of the running Pods) if required.
Scale-Down: To kill containers if required.
See you in the next Chapter!