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.
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
See examples.