Before proceeding to the CNCF Landscape, let us first understand what is cloud computing, cloud-native, and Cloud Native computing foundation and why we care.
Cloud Computing
Cloud computing in simplest terms can be said to outsource the hosting of your applications or outsourcing the hosting of the physical servers which is renting space and renting time on someone else's computer. This model is based on a pay-as-you-go basis. you can watch Cloud Computing - CS50's Computer Science for Business Professionals 2017 for better understanding.
Cloud Native
Cloud-native is the software approach of building, deploying, and managing modern applications in cloud computing environments. Modern companies want to build highly scalable, flexible, and resilient applications that they can update quickly to meet customer demands. To do so, they use modern tools and techniques that inherently support application development on cloud infrastructure.
Cloud-native applications: cloud-native applications as computer programs that are super flexible and can live on the internet, making them easy to use and share with others like Gmail, twitter, etc.
CNCF(Cloud Native Computing Foundation)
CNCF is an open-source foundation part of a nonprofit Linux foundation that helps organizations kick-start their cloud-native journey. The Cloud Native Computing Foundation seeks to drive the adoption of cloud-native by fostering and sustaining an ecosystem of open-source, vendor-neutral projects. To learn more about it you can visit https://www.cncf.io/.
CNCF Projects:
cloud native projects hosted by CNCF are designed to provide tools, frameworks, and best practices for developing, deploying, and managing cloud-native applications and infrastructure. Each CNCF project is typically focused on a specific aspect of cloud-native computing and is developed collaboratively by the open-source community.
There are a total of 164 projects at the time of writing this blog which is the reason why we need a CNCF Landscape.
Before Navigating let's understand the types of projects that are present in the landscape categorized by CNCF.
Graduated
Incubating
sandbox
Graduated: After a project gets a large number of contributors contributing to it, rise in the stability of the project, and the project is moved to the Graduated category. For eg. Kubernetes, Prometheus, Containerd, etc.
Incubating: These projects are considered stable and are used in production. The projects listed under the Incubated category have come from the Sandbox category after being reviewed by certain specific tags like technical advisory groups and fulfilling certain conditions.
Sandbox: The CNCF Sandbox is the entry point for early-stage projects. These Open Source projects are under experimentation and are not preferred to use in production.
Let's learn about CNCF Landscape now.
CNCF Landscape
CNCF Landscape is like a helpful guide that organizes and recommends tools for working with cloud technology, making it easier for people to choose the right tools for their projects.
Navigating the CNCF Landscape
If you look at the landscape it looks very complex and scary but let me tell you it's not. If you break it down and analyze it one at a time it's not that complex and everything here makes sense.
Let us learn about the distinctions in the landscape
Projects in large boxes are CNCF-hosted open-source projects. Some are still in the incubation phase (light blue/purple frame), while others are graduated projects (dark blue frame).
Projects in small white boxes are open-source projects.
Products in grey boxes are proprietary products.
Skeleton of Landscape
If you look closely CNCF Landscape contains projects in layers and columns where each layer and column has a specific purpose. This can be understood with the help of a skeleton diagram of the Landscape.
The whole guide is divided into layers and columns and further, all the layers are divided into categories.
Layers:
There are a total of 4 layers in the landscape as you can see in the skeleton image.
Let's discuss each layer respectively:
- Provisioning:
Provisioning refers to the process of setting up and managing the resources required for running cloud-native applications, it contains tools to automatically configure, create, and manage the infrastructure, as well as for scanning, signing, and storing container images.
Further, it is divided into four categories:
Automation and configuration
Container Registry
Security and Compliance
Key management
You can read more about each category here.
Runtime
The runtime layer provides all the tools containers need to run in a cloud-native environment:
Categories of the runtime layer are as follows:
Cloud-native storage gives apps easy and fast access to data needed to run reliably
The container runtime which creates and starts containers executing application code
Cloud-native networking provides connectivity for containerized apps to communicate.
You can read more about it here.
- Orchestration and Management
Container orchestration is the automation of much of the operational effort required to run containerized workloads and services. After you're done with picking a cloud and defining your own infrastructure, it's time for you to pick a container orchestrator.
The orchestration and management layer provides all the tools to handle running and connecting cloud-native applications and containers.
categories of orchestration and management layers are as follows:
scheduling and orchestration provide the ability to manage containers running across different machines.
coordination and service discovery: Coordination is the process of ensuring that different parts of a distributed system work together harmoniously, while service discovery is the mechanism that helps components locate and connect to services in a networked environment.
Remote procedure call is a particular technique enabling applications to talk to each other. It's one way of structuring app communication.
A service proxy is a tool that intercepts traffic to or from a given service, applies some logic to it, then forwards that traffic to another service and acts a go-between.
API gateway is a centralized server or service that acts as an entry point for multiple microservices or backend services, providing functions such as routing, authentication, rate limiting, and monitoring to simplify and secure API access for clients.
Service Mesh is a networking infrastructure layer that provides essential communication and management capabilities for microservices in a distributed application.
You can read more about it here.
App Definition and Development
Application definition and development is the top layer of the landscape and focuses on the tools that enable engineers to build apps.
Following are the categories of App definition and Development.
Database allows you to store data, ensure only authorized users access it, and enable users to retrieve it via specialized requests
Streaming and messaging Streaming and messaging tools enable service-to-service communication by transporting messages (i.e. events) between systems.
Application definition and image build: Application definition and image build is a broad category that can be broken down into two main subgroups. First, developer-focused tools that help build application code into containers and/or Kubernetes. And second, operations-focused tools that deploy apps in a standardized way.
Continuous integration and Delivery CI automates code changes by immediately building and testing the code, ensuring it produces a deployable artifact. CD goes one step further and pushes the artifact through the deployment phases.
You can read more about it here
Let's talk about the columns in the landscape
Columns
Observability and analysis
Observability and analysis are interrelated concepts observability refers to the ability to monitor and understand a system's behavior through its observable characteristics, while analysis involves the process of extracting insights and making informed decisions based on the observed data or information.
Tools in this category are broken down into logging, monitoring, tracing, and chaos engineering.
Logging: All logging tools aim at helping organizations gain control over their log messages and log messages capture various events happening in the system such as failed or successful actions, audit information, or health events
Monitoring is the continuous observation and collection of data to track the performance, status, or behavior of a system, process, or entity. Monitoring allows you to know if an application is working correctly, securely, cost-effectively, and only accessed by authorized users, as well as any other characteristic you may be tracking.
Tracing: Tracing is a method of tracking and recording the flow of requests or transactions across a distributed system to analyze performance and troubleshoot issues.
Chaos Engineering: Chaos engineering refers to the practice of intentionally introducing faults into a system in order to test its resilience and ensure applications and engineering teams are able to withstand turbulent and unexpected events.
You can read more about it here
Platform
The platform category includes complete solutions that package cloud-native technology into a form the company can readily use. Instead of building cloud-native applications yourself based on open-source projects, you can use a complete solution that addresses multiple aspects of the application. Types of tools in this category include:
Certified Kubernetes—Distribution—a special distribution of Kubernetes created by a vendor. A notable tool in this category is Red Hat OpenShift.
Certified Kubernetes—Hosted—managed Kubernetes platform that takes the pain out of installing and managing Kubernetes clusters. Notable tools are Google Kubernetes Engine, Amazon Elastic Kubernetes Services, and Azure Kubernetes Service.
Certified Kubernetes—Installer—tools that automate installation and configuration of Kubernetes, either on your own infrastructure or managed infrastructure.
PaaS/Container Service—a fully managed service used to run container applications, typically including container orchestration. A notable example is Heroku.
You can read more about it here.
I hope you enjoyed reading the blog and if you want to get started with contributing to CNCF projects you can read the Getting Started blog by CNCF.
You can connect with me on Twitter as satyampsoni