Project: Kapitan (Provisioning / Automation & Configuration)
File: kapitan_overview.md

Kapitan is a powerful configuration management tool designed to help engineers manage complex systems through code. It centralizes and simplifies the management of configurations with a structured approach that revolves around a few core concepts. ??? note "Kapitan diagram" ```mermaid %%{ init: { securityLevel: 'loose'} }%% graph LR classDef pink fill:#f9f,stroke:#333,stroke-width:4px,color:#000,font-weight: bold; classDef blue fill:#00FFFF,stroke:#333,stroke-width:4px,color:#000,font-weight: bold; TARGET1 --> KAPITAN TARGET2 --> KAPITAN TARGETN --> KAPITAN KAPITAN --> EXTERNAL KAPITAN --> GENERATORS KAPITAN --> HELM KAPITAN --> JINJA KAPITAN --> JSONNET KAPITAN --> KADET EXTERNAL --> OUTPUT GENERATORS --> OUTPUT JINJA --> OUTPUT JSONNET --> OUTPUT KADET --> OUTPUT HELM --> OUTPUT GKMS --> REFERENCES AWSKMS --> REFERENCES VAULT --> REFERENCES OTHER --> REFERENCES PLAIN --> REFERENCES OUTPUT --> TARGETN_OUTPUT OUTPUT --> TARGET1_OUTPUT OUTPUT --> TARGET2_OUTPUT REFERENCES --> KAPITAN TARGET1_OUTPUT --> DOCUMENTATION TARGET1_OUTPUT --> KUBERNETES TARGET1_OUTPUT --> SCRIPTS TARGET1_OUTPUT --> TERRAFORM CLASSES --> TARGET1 CLASSES --> TARGET2 CLASSES --> TARGETN subgraph "Inventory" CLASSES[classes] TARGET1(["target 1"]):::pink TARGET2(["target 2"]) TARGETN(["target N"]) end subgraph "references" direction TB GKMS["GCP KMS"] AWSKMS["AWS KMS"] VAULT["Hashicorp Vault"] OTHER["others"] PLAIN["plain"] REFERENCES["references"] end KAPITAN(("<img src='/images/kapitan_logo.png'; width='80'/>")):::blue click EXTERNAL "/compile#external" subgraph "Input Types" EXTERNAL["external"] GENERATORS["generators"] HELM["helm"] JINJA["jinja"] JSONNET["jsonnet"] KADET["kadet"] end OUTPUT{{"compiled output"}}:::blue subgraph " " TARGET1_OUTPUT([target1]):::pink DOCUMENTATION["docs"] KUBERNETES["manifests"] SCRIPTS["scripts"] TERRAFORM["terraform"] end TARGET2_OUTPUT(["target 2"]) TARGETN_OUTPUT(["target N"]) ``` Let's explore these concepts in a way that's accessible to new users: At the core of Kapitan lies the Inventory, a structured database of variables meticulously organized in YAML files. This hierarchical setup serves as the single source of truth (SSOT) for your system's configurations, making it easier to manage and reference the essential components of your infrastructure. Whether you're dealing with Kubernetes configurations, Terraform resources, or even business logic, the Inventory allows you to define and store these elements efficiently. This central repository then feeds into Kapitan's templating engines, enabling seamless reuse across various applications and services. <iframe width="560" height="315" src="https://www.youtube.com/embed/M81qU94FCLQ?si=SGlQG-gP2mmA1n9b" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> Kapitan takes the information stored in the Inventory and brings it to life through its templating engines upon compilation. This process transforms static data into dynamic configurations, capable of generating a wide array of outputs like Kubernetes manifests, Terraform plans, documentation, and scripts. It's about making your configurations work for you, tailored to the specific needs of your projects. See for more offer a straightforward entry point into using Kapitan, requiring minimal to no coding experience. These are essentially pre-made templates that allow you to generate common configuration files, such as Kubernetes manifests, directly from your Inventory data. Kapitan provides a wealth of resources, including the GitHub repository and various blog posts, to help users get up and running with generators. For those looking to leverage the full power of Kapitan, introduces a method to define and reuse complex configurations through Python. This internal library facilitates the creation of JSON and YAML manifests programmatically, offering a higher degree of customization and reuse. empowers users to craft intricate configurations with the simplicity and flexibility of Python. Kapitan provide a secure way to store passwords, settings, and other essential data within your project. Think of them as special code placeholders. Flexibility*: Update a password once, and Kapitan updates it everywhere automatically. Organization*: References tidy up your project, especially when you're juggling multiple settings or environments (dev, staging, production). Security: Protect sensitive information like passwords with encryption !!! tip Use , our Kubernetes Admission Controller, to complete your integration with Kubernetes for secure secret decryption on-the-fly.