Kubernetes is an open-source container management platform that makes it easy to deploy and scale applications. It provides many benefits including shortened software CI/CD cycles, efficient resource utilization and high availability, seamless performance regardless of computing environment, and system self-healing by automatically restarting or replicating containers that fail or don’t respond to your user-defined health checks. It also offers a flexible, extensible architecture that makes it possible to add custom controllers to implement desired application behaviors.
A pod is a basic scheduling unit that encapsulates one or more closely related containers, storage resources, a unique network IP, and configurations on how to run a specific instance of your application. Pods are deployed on the same node to ensure that your application’s components are co-located, share the same network ports (avoiding port conflicts), and can be accessed by external clients. You describe the desired state of a pod through a declarative YAML or JSON object called a Pod Spec.
When you have multiple Pods running in your cluster, Kubernetes will create and destroy them on nodes as needed to conform to the desired state you specified through a Pod Spec. This is how kubernetes achieves its automation and agility. If your application has persistent state, Kubernetes will also create and manage StatefulSets to orchestrate the deployment of those pods.