Core concepts

Most of Deploys.app boils down to a small set of concepts. Knowing them up front makes the rest of the docs much shorter.

The shape of the platform#

Everything is organized around a project. A project owns its deployments, its domains and routes, its disks, its slice of the registry, and its roles, service accounts, and workload identities. Deployments inside a project run in a location — a managed Kubernetes cluster in a particular region.

Costs flow upward: usage in a project gets billed to its billing account, which can span multiple projects.

Entities at a glance#

ConceptWhat it isLives in
ProjectA workspace that owns all your resources
LocationA managed cluster you can deploy to (e.g. gke.cluster-rcf2)
DeploymentA running workload — web service, worker, cron job, or TCP serviceProject + Location
RevisionA historical snapshot of a deployment, kept for rollbacksDeployment
DomainA custom hostname attached to your projectProject + Location
RouteA (domain, path) → deployment mappingProject + Location
DiskA persistent volume you can mount into a deploymentProject + Location
RepositoryA namespace inside registry.deploys.app storing image tagsProject
Pull secretCredentials for pulling images from a private third-party registryProject + Location
Workload identityA binding from a deployment to a Google Cloud service accountProject + Location
Service accountA non-human identity with API credentialsProject
RoleA named bundle of permissions you bind to users or service accountsProject
Audit log entryWho did what, whenProject
Billing accountThe cost center invoices roll up to

How they fit together#

A deployment is the heart of the model. To put traffic on it from a custom hostname, you create a domain, then a route that maps (domain, path) to the deployment. To persist data across restarts, you create a disk and attach it. To pull a private image, you reference a pull secret. To talk to Google Cloud from inside the deployment, you bind a workload identity.

Every deploy creates a new revision. Revisions are immutable, so rollbacks are just “start serving an older revision again.”

Naming and addressing#

  • A project has a short string ID (e.g. acme) that appears in every API call and CLI flag (--project acme).
  • A deployment is uniquely identified by (project, location, name). Names must be DNS-safe — they end up in your public hostname.
  • A location has a stable ID like gke.cluster-rcf2 and a domain suffix like rcf2.deploys.app. Web services get a managed hostname of the form <deployment>.<project>.<suffix>.
TipPick the location closest to your users when you deploy — the hostname suffix is tied to it, and you can’t move a deployment between locations after the fact (you re-deploy it in the new location and update DNS).

Identity and access#

People sign in with OAuth; machines authenticate as service accounts with a token or a key pair. Either way, the platform answers one question on every call: is this principal allowed to do this action in this project? The answer comes from a role bound to the principal.

Everything chargeable is metered in real time and rolls up to the project’s billing account. The billing report gives you the dollar view.