github.com/SamarSidharth/kpt@v0.0.0-20231122062228-c7d747ae3ace/README.md (about)

     1  <img src="logo/KptLogoLarge.png" width="220">
     2  
     3  
     4  # kpt: Automate Kubernetes Configuration Editing
     5  
     6  kpt is a package-centric toolchain that enables a WYSIWYG configuration 
     7  authoring, automation, and delivery experience, which simplifies managing
     8  Kubernetes platforms and KRM-driven infrastructure (e.g.,
     9  [Config Connector](https://github.com/GoogleCloudPlatform/k8s-config-connector),
    10  [Crossplane](https://crossplane.io)) at scale by manipulating
    11  declarative [Configuration as Data](docs/design-docs/06-config-as-data.md).
    12  
    13  *Configuration as Data* is an approach to management of configuration which:
    14  
    15  * makes configuration data the source of truth, stored separately from the live
    16    state
    17  * uses a uniform, serializable data model to represent configuration
    18  * separates code that acts on the configuration from the data and from packages
    19    / bundles of the data
    20  * abstracts configuration file structure and storage from operations that act
    21    upon the configuration data; clients manipulating configuration data don’t
    22    need to directly interact with storage (git, container images).
    23  
    24  See [the FAQ](https://kpt.dev/faq/) for more details about how kpt is different
    25  from alternatives.
    26  
    27  ## Why kpt?
    28  
    29  kpt enables WYSIWYG editing and interoperable automation applied to declarative
    30  configuration data, similar to how the live state can be modified with imperative
    31  tools. 
    32  
    33  See [the rationale](https://kpt.dev/guides/rationale) for more background.
    34  
    35  The best place to get started and learn about specific features of kpt is 
    36  to visit the [kpt website](https://kpt.dev/).
    37  
    38  ## Install kpt
    39  
    40  kpt installation instructions can be found on 
    41  [kpt.dev/installation](https://kpt.dev/installation/)
    42  
    43  ## kpt components
    44  
    45  The kpt toolchain includes the following components:
    46  
    47  - **kpt CLI**: The [kpt CLI](https://kpt.dev/reference/cli/) supports package and function operations, and also
    48    deployment, via either direct apply or GitOps. By keeping an inventory of deployed resources, kpt enables resource pruning,
    49    aggregated status and observability, and an improved preview experience.
    50  
    51  - **Function SDKs**: Any general-purpose or domain-specific language can be used to create functions to transform and/or validate
    52    the YAML KRM input/output format, but we provide SDKs to simplify the function authoring process, in 
    53    [Go](https://kpt.dev/book/05-developing-functions/02-developing-in-Go), 
    54    [Typescript](https://kpt.dev/book/05-developing-functions/03-developing-in-Typescript), and 
    55    [Starlark](https://kpt.dev/book/05-developing-functions/04-developing-in-Starlark), a Python-like embedded language.
    56  
    57  - **Function catalog**: A [catalog](https://catalog.kpt.dev/) of off-the-shelf, tested functions. kpt makes configuration
    58    easy to create and transform, via reusable functions. Because they are expected to be used for in-place transformation,
    59    the functions need to be idempotent.
    60  
    61  - **Package orchestrator**: 
    62    The [package orchestrator](https://github.com/GoogleContainerTools/kpt/blob/main/docs/design-docs/07-package-orchestration.md)
    63    enables the magic behind the unique WYSIWYG experience. It provides a control plane for creating,
    64    modifying, updating, and deleting packages, and evaluating functions on package data. This enables operations on packaged resources
    65    similar to operations directly on the live state through the Kubernetes API.
    66  
    67  - **Config Sync**: While the package orchestrator
    68    can be used with any GitOps tool, [Config Sync](https://github.com/GoogleContainerTools/kpt-config-sync) provides a reference GitOps implementation to complete the WYSIWYG management
    69    experience and enable end-to-end development of new features, such as 
    70    [OCI-based packages](https://github.com/GoogleContainerTools/kpt/issues/2300). Config Sync is also helping to drive improvements
    71    in upstream Kubernetes. For instance, Config Sync is built on top of [git-sync](https://github.com/kubernetes/git-sync) and
    72    leverages [Kustomize](https://kustomize.io) to automatically render manifests on the fly when needed. It uses the same apply
    73    logic as the kpt CLI.
    74  
    75  - **Backstage UI plugin**: We've created a proof-of-concept UI in the form of a [Backstage UI plugin](https://github.com/GoogleContainerTools/kpt-backstage-plugins) to demonstrate the WYSIWYG experience that's possible on top of the
    76    package orchestrator. More scenarios can be supported by implementing form-based editors for additional Kubernetes resource types.
    77  
    78  ## Roadmap
    79  
    80  You can read about the big upcoming features in the 
    81  [roadmap doc](/docs/ROADMAP.md).
    82  
    83  ## Contributing
    84  
    85  If you are interested in contributing please start with 
    86  [contribution guidelines](CONTRIBUTING.md).
    87  
    88  ## Contact
    89  
    90  We would love to keep in touch:
    91  
    92  1. Join our [Slack channel](https://kubernetes.slack.com/channels/kpt). You'll
    93     need to join [Kubernetes on Slack](https://slack.k8s.io/) first.
    94  1. Join our [email list](https://groups.google.com/forum/?oldui=1#!forum/kpt-users)