Skip to content

Commit

Permalink
Improve explanations of what kpt is. (#3408)
Browse files Browse the repository at this point in the history
  • Loading branch information
bgrant0607 authored Jul 25, 2022
1 parent ff8c49d commit 75cc8ef
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 15 deletions.
22 changes: 19 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,28 @@
<img src="logo/KptLogoLarge.png" width="220">


# kpt
# kpt: Automate Kubernetes Configuration Editing

kpt is a package-centric toolchain that enables a WYSIWYG configuration
authoring, automation, and delivery experience, which simplifies managing
Kubernetes platforms and KRM-driven infrastructure at scale by manipulating
declarative Configuration as Data, separated from the code that transforms it.
Kubernetes platforms and KRM-driven infrastructure (e.g.,
[Config Connector](https://github.com/GoogleCloudPlatform/k8s-config-connector),
[Crossplane](https://crossplane.io)) at scale by manipulating
declarative [Configuration as Data](docs/design-docs/06-config-as-data.md).

*Configuration as Data* is an approach to management of configuration which:

* makes configuration data the source of truth, stored separately from the live
state
* uses a uniform, serializable data model to represent configuration
* separates code that acts on the configuration from the data and from packages
/ bundles of the data
* abstracts configuration file structure and storage from operations that act
upon the configuration data; clients manipulating configuration data don’t
need to directly interact with storage (git, container images).

See [the FAQ](https://kpt.dev/faq/) for more details about how kpt is different
from alternatives.

## Why kpt?

Expand Down
18 changes: 16 additions & 2 deletions site/book/02-concepts/00.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,22 @@
What is kpt?

> A package-centric toolchain that enables a WYSIWYG configuration authoring, automation, and delivery experience, which simplifies managing Kubernetes platforms and KRM-driven infrastructure at scale by manipulating declarative Configuration as Data, separated from the code that transforms it.
> kpt automates Kubernetes configuration editing.
kpt supports management of [Configuration as Data](https://github.com/GoogleContainerTools/kpt/blob/main/docs/design-docs/06-config-as-data.md), which enables WYSIWYG editing and interoperable automation on a declarative data model for Kubernetes and any infrastructure represented in the [Kubernetes Resource Model (KRM)](https://github.com/kubernetes/design-proposals-archive/blob/main/architecture/resource-management.md).
kpt supports management of [Configuration as Data](https://github.com/GoogleContainerTools/kpt/blob/main/docs/design-docs/06-config-as-data.md).

*Configuration as Data* is an approach to management of configuration which:

* makes configuration data the source of truth, stored separately from the live
state
* uses a uniform, serializable data model to represent configuration
* separates code that acts on the configuration from the data and from packages
/ bundles of the data
* abstracts configuration file structure and storage from operations that act
upon the configuration data; clients manipulating configuration data don’t
need to directly interact with storage (git, container images)

This enables machine manipulation of configuration for Kubernetes and any infrastructure represented
in the [Kubernetes Resource Model (KRM)](https://github.com/kubernetes/design-proposals-archive/blob/main/architecture/resource-management.md).

kpt manages KRM resources in bundles called **packages**.

Expand Down
6 changes: 1 addition & 5 deletions site/coverpage.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
# ![kpt logo](static/images/logo.png)

> kpt is a package-centric toolchain that
> enables a WYSIWYG configuration authoring, automation, and delivery experience,
> which simplifies managing Kubernetes platforms and KRM-driven infrastructure at scale
> by manipulating declarative Configuration as Data,
> separated from the code that transforms it.
> kpt: Automate Kubernetes Configuration Editing
<div class="container">
<iframe id="ytplayer" type="text/html" width="330" height="216" scrolling="auto" class="video"
src="https://www.youtube.com/embed/L_x7z4CXHDw" align="left" allowFullScreen="allowFullScreen"> </iframe>
Expand Down
26 changes: 22 additions & 4 deletions site/faq/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,31 @@ Please visit the [roadmap document] and the [kpt milestones].

### How is kpt different from other solutions?

Rather than expressing configuration as code that generates configuration,
kpt represents [Configuration as Data], in particular as YAML or JSON objects
adhering to [The Kubernetes Resource Model], and uses a transformation-based
approach to customization. This enables interoperability of a variety of generators,
Think of configuration as an API or data in a database. kpt can operate on configuration
in storage, git or OCI.

Rather than expressing configuration AS code or templates that generate configuration,
kpt represents [Configuration as Data]. In particular, it represents configuration
as YAML or JSON objects adhering to [The Kubernetes Resource Model], the same as the
live state in Kubernetes, which enables novel remedies to configuration drift.

kpt uses an in-place transformation approach to customization:
read configuration in, modify it, and write it back.

This enables interoperability of a variety of generators,
transformers, and validators. One doesn’t have to make all changes through a monolithic
generator implementation.

By storing the result of config generators and transformers, automated mutations can be separated in time
from use and other modifications. This enables generation via a UI, for example.
It also is one enabler of in-place edits rather than patches or other programmatic overrides.

Another ingredient in the secret sauce is the ability to upgrade from an upstream package
despite downstream modifications. Conceptually it's like deriving and applying patches automatically.

Combine these capabilities with the ability to operate on packages in bulk via APIs,
and new operational capabilities are enabled.

### What's the difference between kpt and kustomize?

While both kpt and kustomize support customization of KRM resources via a transformation-based approach,
Expand Down
2 changes: 1 addition & 1 deletion site/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<meta charset="UTF-8" />
<title>kpt - Home</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="description" content="A package-centric toolchain that enables a WYSIWYG configuration authoring, automation, and delivery experience and simplifies managing Kubernetes platforms and KRM-driven infrastructure at scale by manipulating declarative Configuration as Data, separated from the code that transforms it." />
<meta name="description" content="kpt: Automate Kubernetes Configuration Editing" />
<meta
name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"
Expand Down

0 comments on commit 75cc8ef

Please sign in to comment.