github.com/wmuizelaar/kpt@v0.0.0-20221018115725-bd564717b2ed/site/book/02-concepts/00.md (about)

     1  What is kpt?
     2  
     3  > kpt automates Kubernetes configuration editing. 
     4  
     5  kpt supports management of [Configuration as Data](https://github.com/GoogleContainerTools/kpt/blob/main/docs/design-docs/06-config-as-data.md).
     6  
     7  *Configuration as Data* is an approach to management of configuration which:
     8  
     9  * makes configuration data the source of truth, stored separately from the live
    10    state
    11  * uses a uniform, serializable data model to represent configuration
    12  * separates code that acts on the configuration from the data and from packages
    13    / bundles of the data
    14  * abstracts configuration file structure and storage from operations that act
    15    upon the configuration data; clients manipulating configuration data don’t
    16    need to directly interact with storage (git, container images)
    17  
    18  This enables machine manipulation of configuration for Kubernetes and any infrastructure represented
    19  in the [Kubernetes Resource Model (KRM)](https://github.com/kubernetes/design-proposals-archive/blob/main/architecture/resource-management.md).
    20  
    21  kpt manages KRM resources in bundles called **packages**.
    22  
    23  Off-the-shelf packages are rarely deployed without any customization. Like [kustomize](https://kustomize.io), kpt applies transformation **functions**, using the same [KRM function specification](https://github.com/kubernetes-sigs/kustomize/blob/master/cmd/config/docs/api-conventions/functions-spec.md), but optimizes for in-place configuration transformation rather than out-of-place transformation. 
    24  
    25  Validation goes hand-in-hand with customization and kpt functions can be used to automate both mutation and validation of resources, similar to [Kubernetes admission control](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/). 
    26  
    27  The kpt toolchain includes the following components:
    28  
    29  - [**kpt CLI**](https://kpt.dev/reference/cli/): The kpt CLI supports package and function operations, and also
    30    deployment, via either direct apply or GitOps. By keeping an inventory of deployed resources, kpt enables resource pruning,
    31    aggregated status and observability, and an improved preview experience.
    32  
    33  - **Function SDKs**: Any general-purpose or domain-specific language can be used to create functions to transform and/or validate
    34    the YAML KRM input/output format, but we provide SDKs to simplify the function authoring process, in 
    35    [Go](https://kpt.dev/book/05-developing-functions/02-developing-in-Go), 
    36    [Typescript](https://kpt.dev/book/05-developing-functions/03-developing-in-Typescript), and 
    37    [Starlark](https://kpt.dev/book/05-developing-functions/04-developing-in-Starlark), a Python-like embedded language.
    38  
    39  - [**Function catalog**](https://catalog.kpt.dev/): A catalog of off-the-shelf, tested functions. kpt makes configuration
    40    easy to create and transform, via reusable functions. Because they are expected to be used for in-place transformation,
    41    the functions need to be idempotent.
    42  
    43  - [**Package orchestrator**](https://github.com/GoogleContainerTools/kpt/blob/main/docs/design-docs/07-package-orchestration.md): 
    44    The package orchestrator enables the magic behind the unique WYSIWYG experience. It provides a control plane for creating,
    45    modifying, updating, and deleting packages, and evaluating functions on package data. This enables operations on packaged resources
    46    similar to operations directly on the live state through the Kubernetes API.
    47  
    48  - [**Config Sync**](https://cloud.google.com/anthos-config-management/docs/config-sync-overview): While the package orchestrator
    49    can be used with any GitOps tool, Config Sync provides a reference GitOps implementation to complete the WYSIWYG management
    50    experience and enable end-to-end development of new features, such as 
    51    [OCI-based packages](https://github.com/GoogleContainerTools/kpt/issues/2300). Config Sync is also helping to drive improvements
    52    in upstream Kubernetes. For instance, Config Sync is built on top of [git-sync](https://github.com/kubernetes/git-sync) and
    53    leverages [Kustomize](https://kustomize.io) to automatically render manifests on the fly when needed. It uses the same apply
    54    logic as the kpt CLI.
    55  
    56  - **Backstage UI plugin**: We've created a proof-of-concept UI to demonstrate the WYSIWYG experience that's possible on top of the
    57    package orchestrator. More scenarios can be supported by implementing form-based editors for additional Kubernetes resource types.
    58