Skip to content
/ deka Public

Apply Kubernetes manifests the dumb way.

Notifications You must be signed in to change notification settings

ndrpnt/deka

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

deka

Apply Kubernetes manifests the dumb way.

deka is a proof-of-concept CLI and library offering an alternative to kubectl apply.

When deploying Kubernetes manifests, tools traditionally rely on ordering API calls to handle dependencies, e.g. apply Namespaces first and then Pods. They are either "smart" (i.e. they enforce hard-coded priorities: Helm, Argo CD), "too dumb" (i.e. they leave that burden to the user: kubectl), or both (e.g. Kustomize). deka aims to be both simpler to reason about and more resilient by following a different, minimalist, approach: it applies manifests in an undefined order and retries automatically on errors.

Note that deka is suitable for experimental use only. It currently supports Server-Side Apply (SSA), and declarative deletion through the deka.ndrpnt.dev/action: delete annotation.

Usage

To install the CLI using cargo, run:

$ cargo install --git https://github.com/ndrpnt/deka

$ deka apply --help
Server-side apply manifests

Usage: deka apply [OPTIONS] --filename <FILENAME>

Options:
  -f, --filename <FILENAME>            The file that contains the configuration to apply
      --field-manager <FIELD_MANAGER>  Name of the manager used to track field ownership [default: deka]
      --kubeconfig <KUBECONFIG>        Path to the kubeconfig file to use for this CLI request
  -n, --namespace <NAMESPACE>          If present, the namespace scope for this CLI request
      --timeout <TIMEOUT>              The length of time to wait before giving up in seconds. 0 to wait indefinitely [default: 300]
  -v, --verbose...                     Increase logging verbosity
  -q, --quiet...                       Decrease logging verbosity
  -o, --output <OUTPUT>                Output format [default: plain] [possible values: json, logfmt, plain, pretty]
  -D, --debug                          Print internal debug info
  -p, --parallelism <PARALLELISM>      Limit the number of parallel requests. 0 to disable [default: 10]
  -h, --help                           Print help

Examples

See examples.