Kubernetes is a series of open source projects for automating the
deployment, scaling, and management of containerized applications. Find
out why the ecosystem matters, how to use it, and more.
Image: iStock/123dartist
As containers
have become more important to businesses across the globe, it was
necessary to create a system that would allow containers to scale out to
meet the needs of enterprise-level deployments. That's where Kubernetes comes into play.
Unlike Docker,
Kubernetes is a very robust ecosystem. Instead of deploying a single
container, Kubernetes enables you to deploy multiple containers to
multiple hosts, making it ideal for larger deployments and load
balancing.
This smart person's guide is an easy way to get up to
speed on Kubernetes. We'll update this guide periodically when news
about Kubernetes is released.
Executive summary
What is Kubernetes? Kubernetes is an open source project that enables the management of large-scale container deployment.
Why does Kubernetes matter? Containerized
applications are one of the hottest technologies on the market today.
If you're looking to roll out large-scale, highly-available,
load-balanced clusters of containers, Kubernetes might be the right tool
for you.
Who does Kubernetes affect?
Kubernetes affects companies that want to roll out massive containerized
applications, as well as clients, customers, consumers...anyone that
would benefit from highly-available services. Kubernetes also helps
developers build distributed applications and makes it much easier for
IT operators to manage scalable infrastructure for applications.
When is Kubernetes happening? Kubernetes was first announced in mid-2014 and was first released on July 21, 2015.
How do I start using Kubernetes? Install the system on a supported platform such as Red Hat, SUSE, CentOS, Fedora Server, Ubuntu Server, etc., and you'll have access to kubernetes, kubernetes-client, kubernetes-master, kubernetes-node, and more.
Kubernetes is an open source system that allows you to run docker
and other containers across multiple hosts, effectively offering the
co-location of containers, service discovery, and replication control.
It was originally called K8s and was designed by Google and donated to
the Cloud Native Computing Foundation.
The primary functions of Kubernetes are:
schedule, start, manage, and scale containers across multiple hosts; and
add a higher-level API to define how containers are logically grouped to define container pools and handle load balancing.
Its features include the following.
Deploy containers and manage rollout control:
With this complex system you can describe your containers and define
how many you want in a single deployment. Kubernetes will not only
manage the running of those containers (even across multiple hosts), but
it will also handle deploying changes (e.g., updating images, changing
variables, etc.) to your containers.
Resource Bin packing allows you to declare minimum and maximum computer resources (CPU and memory) for all containers.
Built-in service discovery: Automatic exposure of containers to the internet or other containers in the Kubernetes cluster.
Autoscaling: Kubernetes automatically load balances traffic across matching containers.
Heterogeneous clusters:
Kubernetes allows you to build a cluster with a mixture of virtual
machines, on-premises servers, or bare metal in your company data
center.
Kubernetes, at its
minimum, can schedule and run containerized applications on clusters of
physical machines or virtual machines or a combination of physical and
virtual machines; this allows developers to leave behind the traditional
method of working with physical and virtual machines. Although this can
be achieved with the simpler Docker Swarm,
Kubernetes allows the deployment of much larger clusters, which can
include docker containers. In other words, create your docker containers
and then deploy them over a massive, load balanced cluster with
Kubernetes.
Kubernetes consists of the following components.
Pods: Containers are placed into pods to be managed by Kubernetes.
Labels and selectors: Key-value pairs used to identify and group resources within Kubernetes.
Controllers: A reconciliation loop that drives actual cluster state toward the desired cluster state.
Services: A way to identify elements used by applications (name-resolution, caching, etc.).
Kubernetes control plane: Main controlling unit of the cluster that manages workload and directs communication across the system.
etcd: Persistent, lightweight, distributed key-value data store.
API server: Serves the Kubernetes API using JSON over HTTP.
Scheduler: Pluggable component that selects which node a pod should run on based on resource availability.
Controller manager: The process that runs the Kubernetes controllers such as DaemonSet and Replication.
Kublet: Responsible for the running state of each node (starting, stopping, and maintaining application containers).
Kube-proxy: The implementation of a network proxy and load balancer that supports the service abstraction.
cAdvisor: An agent that monitors and gathers resource usage.
Containers are a powerful and flexible way to safely and reliably
deploy applications and microservices to extend and expand your
company's services. When the need grows beyond a standard Docker
deployment or you need to deploy/manage multiple containerized
applications from different systems (such as Docker), you need a way to
deploy and control such systems.
With the help of Docker Swarm,
you can deploy containerized applications over a cluster, but you're
limited to Docker-only containers and to only using the architecture
security, registry of Docker, Inc. With Kubernetes, those containers can
come from a number of sources (Docker, Windows Server Containers,
etc.), making Kubernetes incredibly flexible and significantly more
complex. Additional resources
Kubernetes affects any company that needs to deploy massive rollouts
of containerized applications and services; this means anyone involved
with the deployment should be familiar with the Kubernetes tools and
Docker. And considering Kubernetes is a rather complex system,
administrators will need to do a fair amount of homework in order to
successfully implement the technology.
The effect of Kubernetes
goes well beyond those that administer the system—customers, clients,
staff, and consumers...no one is immune to the effect of containerized
applications. When we're talking about business and enterprise-level
deployments, Kubernetes takes center stage.
Developers are also
affected by Kubernetes. As of April 7, 2017 Kubernetes had 1,137
contributors from across varying industries, with over 31 branches and
46,332 commits on GitHub. Kubernetes also has more developers working on it than Docker Swarm, Mesos, and Cloud Foundry Diego combined. Additional resources
Kubernetes was created by Joe Beda, Brendan Burns, and Craig McLuckie,
who were soon joined by other Google engineers, and was first announced
by Google in mid-2014. The original name for Kubernetes was Seven Of
Nine (from Star Trek Borg fame). Once the Google lawyers swayed the
original developers away from the original name, they agreed upon the
name Kubernetes.
Kubernetes v1.0 was released July 21, 2015 and
very quickly wound up in the top 0.01% in stars and number 1 in terms of
activity on GitHub. That translates to significant development on the project. Additional resources
For a full list of vendors/platforms supporting Kubernetes deployment, check out this spreadsheet.
You will need to set up:
Kubernetes Master: This
is where you direct API calls to services that control the activities
of the pods, replications controllers, services, nodes, and other
components of the cluster.
Kubernetes Node(s): This system provides the run-time environments for the containers.
The Master and Node can be on the same system, but traditionally they will be separated.
You will also need your containers. The most widely used containers
deployed by Kubernetes are from Docker, which makes sense considering
docker containers are the most widely used on the planet. Kubernetes
must be installed on the Master and all hosts. If you're working with
Red Hat, you can install Kubernetes with the command:
No comments:
Post a Comment