What is Kubernetes? How is it important?
What is Kubernetes?
Kubernetes (or k8s or “kube” for short) is an open-source container orchestration platform that automates many of the manual processes involved in deploying, managing, and scaling containerized applications. In other words, you can assemble groups of hosts running on Linux containers and Kubernetes will help you manage those clusters easily and effectively. These clusters can expand the hosts on the public cloud, private cloud or hybrid cloud.
Kubernetes initially was developed and designed by Google engineers. And Google was one of the contributors in Linux container development and also talked publicly about how everything at Google runs in containers. (This is container orchestration for Google's cloud services). Google generates more than 2 billion container deployments per week - all powered by an internal platform: Borg. Borg was a precursor to Kubernetes, so the lessons learned from Borg's development over the years contribute to the Kubernetes technology.
Fun fact: Seven letters in the logo Kubernetes are referred to the name of the project "Project Seven of Nine".
Red Hat is one of the first companies cooperating with Google in the Kubernetes project before it was released and became the second sponsor from scratch. And Google donated the Kubernetes project for Cloud Native Computing Foundation (CNCF) established in 2015.
Why is Kubernetes necessary?
Those production apps span many containers. Those containers have to be deployed on multiple server hosts. Kubernetes provides orchestration and necessary management to deploy containers at scale for workloads. Kubernetes orchestration allows you to build services that span containers, schedule containers across a cluster, scale containers and manage containers over time.
Kubernetes also needs to integrate with networking, storage, security, telemetry and other services to provide a comprehensive container infrastructure.
However, this also depends on how you use those containers in your environment. A rudimentary application of Linux containers would treat them as fast and efficient virtual machines. When you scale to a production environment and apps, it’s clear that you need many, collocated containers working together to deliver these individual services. This also increases the number of containers in the environment so the complexity also increases.
Kubernetes can fix a lot of common issues relating to container proliferation by sorting containers together into a “pod”. Pods add an abstraction layer to groups of containers, which helps schedule for those workloads and provide necessary services such as networking and storage, for those containers.
Other parts of Kubernetes help balance loads across and ensure you have the right number of containers running to support workloads.
With the right deployment of Kubernetes and the help of other open-sources projects like Atomic Registry, Open vSwitch, heapster, OAuth and SELinux, you can operate all parts of container infrastructure comprehensively.
What can Kubernetes help you with?
The primary advantage of using Kubernetes, especially when optimizing app dev for cloud, is that it provides platforms to schedule and run those containers on the virtual or physical machine clusters. In general, technology helps you to deploy and operate on the container-based infrastructure in the production environment. Since Kubernetes is all about automation of operational tasks, you can do many of the same things as other application platforms or management systems.
With Kubernetes, you can:
- Orchestrate containers across multiple hosts.
- Make better use of hardware to maximize the necessary resources to run enterprise apps.
- Control and automate apps for deployments and updates.
- Mount and add storage to run the stateful app.
- Scale containerized apps and resources quickly.
- Manage services, ensure those apps run like what you intend them to run.
- Health-check and self-heal apps with auto-placement, auto-restart, auto replication, and autoscaling.
However, Kubernetes is based on other projects to fully provide services. With adding other open-sources projects, you can realize Kubernetes power. The necessary pieces include:
- The registry, through projects like Atomic Registry or Docker Registry.
- Networking, through projects like OpenvSwitch and intelligent edge routing.
- Telemetry, through projects like heapster, kibana, hawkular and elastic.
- Security, through projects like LDAP, SELinux, RBAC and OAUTH with multi-tenancy layers.
- Automation, with the addiction of Playbook Ansible for installation and cluster life-cycle management.
- Services, through a rich catalogue of popular app patterns.
Necessary and popular terminologies in Kubernetes
Master: Machines control Kubernetes nodes. This is the place where tasks are assigned.
Node: These machines perform the required tasks. Kubernetes master controls them.
Pod: A group includes one or many containers deploying to a single node. All containers in a pod share the same IP address, IPC, hostname, and other resources. Pods abstract network và storage from the underlying container. This allows you to move containers around the cluster more easily.
Replication controller: Replication controller controls how many identical copies of pods running somewhere on the cluster.
Service: decouples work definitions from pods. Kubernetes service proxies automatically get requests to the right pods — no matter where it moves in a cluster or even if it’s replaced.
Kubelet: This service runs on nodes, reads the container manifests and ensures the defined containers are started and running.
kubectl: The command-line configuration tool for Kubernetes.
How is Kubernetes suitable for your infrastructure?
Kubernetes runs on the operating system and interoperates with pods of containers running on nodes. Kubernetes master gets requests from an administrator (or groups of DevOps) and sends those command lines to dependency nodes. The orchestration operates on several services to automatically decide which nodes are the most suitable for the work. Then, it will allocate resources and assign groups within that node to complete the required work.
Therefore, from the infrastructure opinion, there has been little change in how you manage containers. Your control over those containers occurs on a higher level, giving you greater control without having to tamper with individual containers or nodes.
How about Docker?
Docker still performs its tasks. When Kubernetes schedules a pod to a node, kubelet on the node will instruct docker to launch specific containers. Then kubelets will continuously collect the status of those containers from dockers and aggregate that information in the control plane. Docker pulls containers onto that node and starts/stops those containers. The difference is that an automated system asks Docker to do those things instead of the admin doing so manually on all nodes for all containers.
1. Web application (.NET, JAVA, PHP, etc)
2. Framework (ASP, MVC, AngularJS, Angular6, Node JS, Vue JS)
3. Mobile application: IOS (Swift, Object C), Android (Kotlin, Android)
4. System applications (Cobol, ERP, etc),
5. New Technology (Blockchain, etc).
If you are interested in our service or looking for an IT outsourcing partner in Vietnam, do not hesitate to contact us at firstname.lastname@example.org