Overview
What is GitOps?
GitOps is a way of implementing Continuous Deployment for cloud native applications by having a Git repository that contains declarative descriptions of the desired infrastructure and applications and an automated process to reconcile the production environment with the desired state in the repository.
Why Navecd?
Traditional GitOps tools often rely on YAML for configuration, which can lead to verbosity and complexity. Navecd leverages CUE, a type safe configuration language with a more concise and expressive syntax and the benefits of general-purpose programming languages, making it easier to define and maintain your desired cluster state.
Navecd adheres to the GitOps Principles:
-
Declarative
Navecd integrates CUE natively - A type safe configuration language with the benefits of general-purpose programming languages
-
Versioned and Immutable
Git as the source of truth for defining the desired system state
-
Pulled Automatically
Navecd automatically pulls the desired state declarations, written as CUE values, from Git
-
Continuously Reconciled
Navecd is a Kubernetes Controller, which continuously observes actual system state and applies the desired state
Deploy anything
Deployments, StatefulSets, Pods, ConfigMaps, ..., anything you can deploy to Kubernetes can be deployed with Navecd. Just push to Git and let Navecd do the work from inside your Cluster! Got a Helm Chart? Deploy it with Navecd.
Basics of Navecd
Navecd does not enforce any kind of repository structure, but there is one constraint for the declaration of the cluster state. Every top-level CUE value in a package, which is not hidden and not a Definition, has to be what Navecd calls a Component. Navecd Components effectively describe the desired cluster state and currently exist in two forms: Manifests and HelmReleases. A Manifest is a typical Kubernetes Object, which you would normally describe in yaml format. A HelmRelease is an instance of a Helm Chart. All Components share the attribute to specify Dependencies to other Components. This helps Navecd to identify the correct order in which to apply all objects onto a Kubernetes cluster. See schema.
Next Steps
Get started with Navecd.