Roadmap
What convoy implements today, what is planned, and what convoy does not try to do.
This page lists the state of convoy v0.9.0. The planned items have no order and no dates. A feature with the “Not built” badge in the other pages is on this list.
Implemented#
| Area | What works | Read more |
|---|---|---|
| API | An aggregated API server with Release, Cluster, ReleaseInventory, three source kinds and two health rule set kinds. RBAC per subresource. | API Reference |
| Sources | GitRepository (branch, tag, commit), HelmRegistry, OCIRegistry (Helm charts). Auth basic and token for all three, and sshKey for Git. | Sources |
| Rendering | Helm (in-process, vendored dependencies), kustomize, plain manifests. Ordered Helm values layers. | Rendering |
| Mutations | jsonPatch, strategicMergePatch, goTemplate, celTransform, syncWave, with cluster metadata as context. | Mutations |
| Apply | Server-side apply dry run, Server-Side Apply, prune with CRD and Namespace protection, a durable inventory. | Apply and prune |
| Sync policy | Automatic and manual mode, /sync, forced sync, retry backoff. | Sync policy |
| Drift | Drift detection with server-side dry run, and self-heal in automatic mode. | Drift |
| Health | CEL health rules, per-resource states with a deadline, the Healthy condition. | Health assessment |
| Ordering | Sync waves in a Release, and wave order of Releases on one cluster. | Sync waves |
| Hooks | preSync, postSync, syncFailed, preDelete and postDelete hooks with Job or Pod. | Lifecycle hooks |
| History | A render store on S3, GCS, Azure Blob or a file system. History, retention and pins to earlier renders. | Pin and history |
| Rollout | Progressive rollout with a deadline, and automatic rollback to the last healthy render. | Progressive rollout |
| Deletion | Deletion policies and finalizers for Releases and Clusters. | Deletion |
| Scale | Sharding by target cluster for high availability and scale, shard-scoped caches. | Scaling and high availability |
| CLI | The kubectl convoy plugin. | kubectl convoy |
Planned#
Sources and content#
- Pull non-chart OCI artifacts (plain manifests and kustomize) from an
OCIRegistry. - Render
jsonnetcontent. - Helm
dependencyMode: resolve, which downloads chart dependencies at render time. - Git
semverrefs. - Custom CA certificates with
tls.caPublicCertRef. - More auth types:
githubApp,oidcandcloudIdentityfor Git.oidcandcloudIdentityfor Helm.dockerConfig,oidcandcloudIdentityfor OCI. - Push triggers from source webhooks. The
webhookfield exists, but no receiver.
Delivery and observation#
- Drift checks that start from watches on the target cluster, not only from the periodic reconcile.
- Reports of objects on the cluster that convoy applied before and does not render now.
- Translation of Helm hooks (
helm.sh/hook) into lifecycle hooks. - Garbage collection of old lifecycle hook workloads.
Clusters#
- Agent (pull) mode for clusters that the control plane cannot reach.
- More Cluster auth types:
token,clientCert,execPluginandoidc.
Fleets#
ReleaseTemplateandFleet: generate one Release for each template and cluster pair. See Fleet design.- Rollout strategies across clusters.
helm.ignoreMissingValuesFiles, to skip values files that do not exist for a cluster.
Security and operations#
- Cross-namespace references with a
ReferenceGrantobject. See ReferenceGrant. - A least-privilege identity for each target cluster, used for the apply and the dry run.
- Metrics of the controller-manager and the observer.
- A production install bundle and released
kubectl-convoybinaries.
Later#
- Notifications (Slack, webhooks, PagerDuty).
- A web dashboard.
Non-goals#
- Secret management. Use a secret manager, for example External Secrets or Vault.
- Traffic shifting. convoy has health-gated rollouts and automatic rollback. Canary and blue-green traffic control stay with other tools.
- Workloads outside Kubernetes. convoy deploys only to Kubernetes clusters.
- Fleet design
The design of ReleaseTemplate and Fleet, two planned kinds that generate one Release for each cluster.
- ReferenceGrant
The decided model for references across namespaces. It is not designed yet.