Learning Objectives

  • Define Kubernetes.
  • Explain the reasons for using Kubernetes.
  • Discuss the features of Kubernetes.
  • Discuss the evolution of Kubernetes from Borg.
  • Explain the role of the Cloud Native Computing Foundation.

What is Kubernetes?

According to the Kubernetes website

"Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications."

Kubernetes is highly inspired by googles Borg system, (the whitepaper) which is Google's long-rumored internal container-oriented cluster-management system. Google has been running containerized workloads in production for more than a decade.

Kubernetes was also started by google and, with its release v1.0 in July 2015, Google donated it to the Cloud Native Computing Foundation.

Some of the features and the lessons learned from it can be traced back to Borg, these features consists of API servers, Pods, IP-per-Pod, Services, Labels.

Features of Kubernetes

  • Automatic bin packing
    Kubernetes automatically schedules containers based on resource needs and constraints, to maximize utilization without sacrificing availability.
  • Self-healing
    Kubernetes automatically replaces and reschedules containers from failed nodes. It kills and restarts containers unresponsive to health checks, based on existing rules/policy. It also prevents traffic from being routed to unresponsive containers.
  • Horizontal scaling
    With Kubernetes applications are scaled manually or automatically based on CPU or custom metrics utilization.
  • Service discovery and Load balancing
    Containers receive their own IP addresses from Kubernetes, while it assigns a single Domain Name System (DNS) name to a set of containers to aid in load-balancing requests across the containers of the set.
  • Automated rollouts and rollbacks
    Kubernetes seamlessly rolls out and rolls back application updates and configuration changes, constantly monitoring the application's health to prevent any downtime.
  • Secret and configuration management
    Kubernetes manages sensitive data and configuration details for an application separately from the container image, in order to avoid a re-build of the respective image. Secrets consist of sensitive/confidential information passed to the application without revealing the sensitive content to the stack configuration, like on GitHub.
  • Storage orchestration
    Kubernetes automatically mounts software-defined storage (SDS) solutions to containers from local storage, external cloud providers, distributed storage, or network storage systems.
  • Batch execution
    Kubernetes supports batch execution, long-running jobs, and replaces failed containers.
  • Continues development
    There are many additional features currently in alpha or beta phase. They will add great value to any Kubernetes deployment once they become stable features. For example, support for role-based access control (RBAC) is stable only as of the Kubernetes 1.8 release.

Why Use Kubernetes?

In addition to the listed features, Kubernetes is also portable and extensible. It supports every cloud setup possible as well as many environments such as local or remote Virtual Machines or even bare metal, read for example part-1 and part-2 of creating a Raspberry Pi cluster running Kubernetes.

Kubernetes is modular, pluggable, and extensible, there is lots of room for customization. As many highly extensible architectures this might follow with difficulties in resolving errors, and and overhead in Configuration. As we have seen in the Borg Paper. This architecture idea origin from Google's cluster-management which is one of the hugest management of containerized systems there is.

The Kubernetes Community is also pretty large, that way it is guaranteed to find any solution for every need. The training gives us another example of the https://kubernetes.io/case-studies/, where we will find many big companies who are using Kubernetes in production.

The Role of the Cloud Native Computing Foundation

The Cloud Native Computing Foundation (CNCF) is one of the projects hosted by the Linux Foundation. CNCF aims to accelerate the adoption of containers, microservices, and cloud-native applications.

CNCF hosts a multitude of projects, with more to be added in the future. I will not go through every project there.

CNCF Projects are categorized based on achieved status: Sandbox, Incubating and Graduated

CNFC achieved status of the Projects, Sandbox, Incubating and Graduated

We can see projects like containerd, which originated in docker as well as CoreDNS, CRI-O, etcd and gRPC. All these technologies are widespread in cloud native application these days. There's also an archived project place.

These projects cover the entire life cycle of a cloud-native application, from its execution using container runtimes, to its monitoring and logging.

That's it for Chapter 3! Thanks for reading friends, see you soon.