Cloud Blog: Simplify the developer experience on Kubernetes with KRO

Source URL: https://cloud.google.com/blog/products/containers-kubernetes/introducing-kube-resource-orchestrator/
Source: Cloud Blog
Title: Simplify the developer experience on Kubernetes with KRO

Feedly Summary: We are thrilled to announce the collaboration between Google Cloud, AWS, and Azure on Kube Resource Orchestrator, or kro (pronounced “crow”). kro introduces a Kubernetes-native, cloud-agnostic way to define groupings of Kubernetes resources. With kro, you can group your applications and their dependencies as a single resource that can be easily consumed by end users.
Challenges of Kubernetes resource orchestration
Platform and DevOps teams want to define standards for how application teams deploy their workloads, and they want to use Kubernetes as the platform for creating and enforcing these standards. Each service needs to handle everything from resource creation to security configurations, monitoring setup, defining the end-user interface, and more. There are client-side templating tools that can help with this (e.g., Helm, Kustomize), but Kubernetes lacks a native way for platform teams to create custom groupings of resources for consumption by end users. 
Before kro, platform teams needed to invest in custom solutions such as building custom Kubernetes controllers, or using packaging tools like Helm, which can’t leverage the benefits of Kubernetes CRDs. These approaches are costly to build, maintain, and troubleshoot, and complex for non-Kubernetes experts to consume. This is a problem many Kubernetes users face. Rather than developing vendor-specific solutions, we’ve partnered with Amazon and Microsoft on making K8s APIs simpler for all Kubernetes users.

aside_block
), (‘btn_text’, ‘Start building for free’), (‘href’, ‘http://console.cloud.google.com/freetrial?redirectpath=/marketplace/product/google/container.googleapis.com’), (‘image’, None)])]>

How kro simplifies the developer experience
kro is a Kubernetes-native framework that lets you create reusable APIs to deploy multiple resources as a single unit. You can use it to encapsulate a Kubernetes deployment and its dependencies into a single API that your application teams can use, even if they aren’t familiar with Kubernetes. You can use kro to create custom end-user interfaces that expose only the parameters an end user should see, hiding the complexity of Kubernetes and cloud-provider APIs.
kro does this by introducing the concept of a ResourceGraphDefinition, which specifies how a standard Kubernetes Custom Resource Definition (CRD) should be expanded into a set of Kubernetes resources. End users define a single resource, which kro then expands into the custom resources defined in the CRD.
kro can be used to group and manage any Kubernetes resources. Tools like ACK, KCC, or ASO define CRDs to manage cloud provider resources from Kubernetes (these tools enable cloud provider resources, like storage buckets, to be created and managed as Kubernetes resources). kro can also be used to group resources from these tools, along with any other Kubernetes resources, to define an entire application deployment and the cloud provider resources it depends on.

Example use cases
Below, you’ll find some examples of kro being used with Google Cloud. You can find additional examples on the kro website. 
Example 1: GKE cluster definition
Imagine that a platform administrator wants to give end users in their organization self-service access to create GKE clusters. The platform administrator creates a kro ResourceGraphDefinition called GKEclusterRGD that defines the required Kubernetes resources and a CRD called GKEcluster that exposes only the options they want to be configurable by end users. In addition to creating a cluster, the platform team also wants clusters to deploy administrative workloads such as policies, agents, etc. The ResourceGraphDefinition defines the following resources, using KCC to provide the mappings from K8s CRDs to Google Cloud APIs:

GKE cluster, Container Node Pools, IAM ServiceAccount, IAM PolicyMember, Services, Policies

The platform administrator would then define the end-user interface so that they can create a new cluster by creating an instance of the CRD that defines:

Cluster name, Nodepool name, Max nodes, Location (e.g. us-east1), Networks (optional)

Everything related to policy, service accounts, and service activation (and how these resources relate to each other) is hidden from the end user, simplifying their experience.

Example 2: Web application definition
In this example, a DevOps Engineer wants to create a reusable definition of a web application and its dependencies. They create a ResourceGraphDefinition called WebAppRGD, which defines a new Kubernetes CRD called WebApp. This new resource encapsulates all the necessary resources for a web application environment, including:

Deployments, service, service accounts, monitoring agents, and cloud resources like object storage buckets. 

The WebAppRGD ResourceGraphDefinition can set a default configuration, and also define which parameters can be set by the end user at deployment time (kro gives you the flexibility to decide what is immutable, and what an end user is able to configure). A developer then creates an instance of the WebApp CRD, inputting any user-facing parameters. kro then deploys the desired Kubernetes resource.

Key benefits of kro
We believe kro is a big step forward for platform engineering teams, delivering a number of advantages:

Kubernetes-native: kro leverages Kubernetes Custom Resource Definitions (CRDs) to extend Kubernetes, so it works with any Kubernetes resource and integrates with existing Kubernetes tools and workflows.

Lets you create a simplified end user experience: kro makes it easy to define end-user interfaces for complex groups of Kubernetes resources, making it easy for people who are not Kubernetes experts to consume services built on Kubernetes. 

Enables standardized services for application teams: kro templates can be reused across different projects and environments, promoting consistency and reducing duplication of effort.

Get started with kro
kro is available as an open-source project on GitHub. The GitHub organization is currently jointly owned by teams from Google, AWS, and Microsoft, and we welcome contributions from the community. We also have a website with documentation on installing and using kro, including example use cases. As an early-stage project, kro is not yet ready for production use, but we still encourage you to test it out in your own Kubernetes development environments!

AI Summary and Description: Yes

Summary: The text discusses the collaboration between Google Cloud, AWS, and Azure to introduce Kube Resource Orchestrator (kro), a Kubernetes-native, cloud-agnostic framework designed to simplify resource orchestration for Kubernetes users. It addresses challenges faced by platform teams and developers when deploying applications in Kubernetes, emphasizing kro’s capability to streamline the creation and management of Kubernetes resources.

Detailed Description:
The announcement of the Kube Resource Orchestrator (kro) represents a significant advancement in the Kubernetes ecosystem, aiming to simplify the complexities associated with resource orchestration. This text addresses the needs of platform and DevOps teams seeking efficient methods for managing Kubernetes deployments without requiring deep expertise from all end users.

Key Aspects of kro and Its Functionality:

– **Collaboration**: The project is a joint effort by major cloud providers (Google Cloud, AWS, and Azure) to establish a unified framework for Kubernetes resource management.

– **Cloud-Agnostic and Kubernetes-Native**: kro allows users to define groupings of Kubernetes resources in a cloud-agnostic manner, improving interoperability across various cloud services.

– **Resource Grouping**: It enables developers to encapsulate a complete Kubernetes deployment and its dependencies under a single API, thereby simplifying user interaction with complex Kubernetes structures.

– **ResourceGraphDefinition**: This concept defines how a standard Kubernetes Custom Resource Definition (CRD) can be expanded into various resources, allowing end users to interact with the system without needing extensive Kubernetes knowledge.

– **Use Cases**: Two primary examples illustrate kro’s application:
– **GKE Cluster Definition**: A platform administrator can create a simplified interface for users to generate GKE clusters, managing related resources automatically without exposing technical complexity.
– **Web Application Definition**: DevOps engineers can create standardized definitions for web applications, fostering reusability and consistency across different environments.

– **Key Benefits**:
– Enhances the developer experience by allowing non-experts to deploy resources with ease.
– Promotes standardized processes for application teams, which reduces operational overhead and duplication of efforts.

– **Open Source**: kro is positioned as an open-source project on GitHub, encouraging community contributions and feedback, although it is stated that it may not yet be suitable for production use.

In summary, kro is set to transform how Kubernetes resources are orchestrated and consumed, appealing particularly to organizations that leverage Kubernetes across various platforms. This advancement highlights the ongoing need for and relevance of cloud-native solutions in modern application development and infrastructure management.