Simple continuous deployment that syncs git repositories to Kubernetes. Built with Kro for minimal, declarative CD pipelines.
- Kro on the cluster
- Clones a git repository and continuously syncs it to your Kubernetes cluster
- Runs
kubectl deleteandkubectl applyon a configurable schedule - Handles SSH authentication for private repositories
- Creates all necessary Kubernetes resources automatically
-
Install the QretaDeploy CRD:
kubectl apply -f manifests/QretaDeploy.yaml # or kubectl apply -f https://raw.githubusercontent.com/qretaio/qretadeploy/main/manifests/QretaDeploy.yaml -
Create a deployment secret (for private repos):
kubectl create secret generic gh-deploy-key \ --from-file=id_ed25519=~/.ssh/id_ed25519 \ --namespace=qretadeployFor public repositories, you can create an empty secret:
kubectl create secret generic empty-ssh-keys \ --from-literal=id_ed25519="" \ --namespace=qretadeploy -
Deploy your app:
kubectl apply -f examples/deploy.yaml # or create your own QretaDeploy resource: kubectl apply -f - <<EOF apiVersion: kro.run/v1alpha1 kind: QretaDeploy metadata: name: my-app-cd namespace: qretadeploy spec: repoUrl: git@github.com:your-org/your-repo.git branch: main apply: manifests # Folder containing Kubernetes manifests to apply delete: old-manifests # Optional: Folder containing manifests to delete before apply interval: "30" # Sync interval in seconds sshKeys: gh-deploy-key # Secret name (required, use empty-ssh-keys for public repos) EOF
See examples for more details.
- Kubernetes cluster
- Kro installed
kubectlaccess to your cluster
QretaDeploy creates a lightweight deployment that:
- Clones your repository using SSH or HTTPS
- Runs in a loop, fetching the latest changes
- Deletes resources from the
deletefolder (if specified) - Applies resources from the
applyfolder (if specified) - Restarts automatically when ConfigMaps change (via Reloader annotation)
MIT or Apache 2