The cloud offers myriad benefits to the enterprise, including flexibility, agility, portability, and cost control. With these benefits, however, comes the complexity of managing the cloud and delivering the apps that live in it. Kubernetes is a container orchestration platform that can help ease those complexities.
Clusters provide the architectural foundation for Kubernetes. Think of clusters as building blocks that enable rapid, controlled cloud app delivery. A Kubernetes cluster is a set of connected machines that work together as a single unit. They consist of worker nodes, which represent a compute host on which one can deploy, run, and manage containerized apps. Worker nodes are managed by master nodes, which schedule containers onto the worker nodes by choosing where to deploy them based on available capacity and user-defined configuration.
Scripts specify container configuration and what resources are needed to run the app, such as persistent storage, services, and so on. In Kubernetes, pods are the smallest deployable units in a cluster, and they group containers that must be treated as a single unit. Kubernetes creates pods to host application instances. Pods hold one or more app containers and share resources, such as storage or networking information.
The evolution toward Kubernetes orchestration
The advent of containers helped simplify cloud computing. Containers package together code and all its dependencies, allowing a software stack to run no matter what environment it’s in. Though containers offered discrete packages, they also complicate management issues. The challenge was to find a way to make these efficient, lightweight packages work together. Orchestration was the next evolution in simplifying multicloud environments.
Kubernetes provides an open source platform for managing containerized workloads and microservices. This allows developers to overcome the differences in cloud providers by applying standards and consistency across the board for container-based applications. The platform is container-centric and orchestrates storage, networking, and compute in service of user workloads.
With Kubernetes, users can focus on what functionality they want from their cloud apps rather than building out platform-specific capabilities. The underlying Kubernetes architecture is what powers that capability.
For a closer look at the container orchestration capabilities of Kubernetes, see “Kubernetes vs. Docker: It’s Not an Either/Or Question”:
Kubernetes cluster architecture
Kubernetes clusters are the building blocks of Kubernetes, and they provide the architectural foundation for the platform. The modularity of this building block structure enables availability, scalability, and ease of deployment.
Today’s workloads demand high availability at both the application and infrastructure levels. By creating a layer of abstraction between apps and their underlying infrastructure, Kubernetes distributes workload efficiently across available resources. Kubernetes guards against app failure with constant node and container health checks. If a container goes down, self-healing and replication resolve the failure. Built-in load balancers distribute the workload over open resources to lessen the impact of traffic spikes, peaks, or outages.
This same efficient use of resources plays a role in scaling. Adding and removing new servers is simplified, allowing for seamless horizontal scaling. Automated auto-scaling increases running containers based on specified metrics. Replication controls terminate excess pods if too many are running or starts pods if there are too few.
For a deeper dive into the architecture of Kubernetes, check out the following video—”Kubernetes Explained”:
Speed is essential for developers. Kubernetes is designed to accommodate the rapid build, test, and release of software. New or updated versions are propagated through automated rollout. It also works well with canary releases, letting new version deployments run parallel to prior versions, verifying the dependability of the new version before rolling it into full production.
Kubernetes cluster monitoring via Prometheus
As containerized apps become more granular and independent, monitoring becomes a challenge. That challenge extends to Kubernetes cluster monitoring. Traditional monitoring indicates if a program, service, or tool is up (running) or down (not running). For microservices, the up/down approach is too stark since a single-function microservice might be down without causing a business impact. Modern monitoring tools must offer more refined distinctions and integrate better with diverse platforms and mutable apps.
Prometheus—an open-source logging, monitoring, and alerting tool—is designed for the portability and mutability of multicloud environments, and it overcomes traditional monitoring limitations. It derives rich metrics from Kubernetes clusters, worker nodes, and deployments. Prometheus uses key-value pairs, which work well with how Kubernetes organizes metadata. Prometheus regularly scrapes and auto-discovers data targets, making it a good match for ephemeral workloads.
Kubernetes Clusters and IBM
IBM Cloud Kubernetes Service is a managed container service for the rapid delivery of applications that can bind to advanced services like Watson and blockchain. IBM Cloud Kubernetes Service speeds app development for DevOps teams. With Kubernetes, developers quickly deploy highly available apps by accessing the flexibility and power of clusters. As a managed service, teams reduce time spent on environment setup. Containerization and automation eliminate software dependencies and remove conflicts from operating in changeable environments. Without the distraction of management, teams focus more fully on app function and delivery.
In this video, we’re going to be looking at virtualization from the 10,000-foot view. Even though it is a decades-old technology, it's still vital to understand the basic components of virtualization as it is a core pillar of cloud computing methodology in 2019.