Tweak README
This commit is contained in:
parent
62604243c9
commit
dc3fb453dd
2 changed files with 9 additions and 12 deletions
19
README.md
19
README.md
|
|
@ -17,7 +17,7 @@ Runboat has the following main components:
|
||||||
- A REST API to list builds and trigger new deployments as well as start, stop, redeploy
|
- A REST API to list builds and trigger new deployments as well as start, stop, redeploy
|
||||||
or undeploy builds.
|
or undeploy builds.
|
||||||
- A GitHub webhook to automatically trigger new builds on pushes to branches and pull
|
- A GitHub webhook to automatically trigger new builds on pushes to branches and pull
|
||||||
requests of supported repositories.
|
requests of supported repositories and branches (configured via regular expressions).
|
||||||
- A controller that performs the following tasks:
|
- A controller that performs the following tasks:
|
||||||
|
|
||||||
- monitor deployments in a kubernetes namespaces to maintain the in-memory database;
|
- monitor deployments in a kubernetes namespaces to maintain the in-memory database;
|
||||||
|
|
@ -25,17 +25,14 @@ Runboat has the following main components:
|
||||||
install dependencies, create the corresponding postgres database and install the
|
install dependencies, create the corresponding postgres database and install the
|
||||||
addons in it;
|
addons in it;
|
||||||
- initialization jobs are started concurrently up to a configured limit;
|
- initialization jobs are started concurrently up to a configured limit;
|
||||||
- when the initialization job succeeds, scale up the deployment, so it becomes
|
- when the initialization job succeeds, preserve the database, filestore, and virtual
|
||||||
accessible;
|
environment, so everything is ready for an almost instantaneous startup;
|
||||||
- when the initializaiton job fails, flag the deployment as failed;
|
- when the initialization job fails, flag the deployment as failed;
|
||||||
- when there are too many deployments started, stop the oldest started;
|
- when there are too many deployments started, stop the oldest started;
|
||||||
- when there are too many deployments, delete the oldest created;
|
- when there are too many deployments, delete the oldest created;
|
||||||
- when a deployment is deleted, run a cleanup job to drop the database and delete
|
- when a deployment is deleted, run a cleanup job to drop the database and delete
|
||||||
all kubernetes resources associated with the deployment.
|
all kubernetes resources associated with the deployment.
|
||||||
|
|
||||||
When a deployment is stopped, the corresponding postgres database and filesystem volume
|
|
||||||
remain present, so deployments can restart almost instantly.
|
|
||||||
|
|
||||||
This approach allows the deployment of a very large number of builds which consume no
|
This approach allows the deployment of a very large number of builds which consume no
|
||||||
memory nor CPU until they are started. The number of started deployment can also be
|
memory nor CPU until they are started. The number of started deployment can also be
|
||||||
high, by reserving limited CPU and memory resources for each, taking advantage of the
|
high, by reserving limited CPU and memory resources for each, taking advantage of the
|
||||||
|
|
@ -68,8 +65,8 @@ For running the controller (runboat itself):
|
||||||
- `kubectl`
|
- `kubectl`
|
||||||
- A `KUBECONFIG` or an in-cluster service account that provides access to the namespace
|
- A `KUBECONFIG` or an in-cluster service account that provides access to the namespace
|
||||||
where the builds are deployed, with permissions to create and delete Service, Job,
|
where the builds are deployed, with permissions to create and delete Service, Job,
|
||||||
Deployment, Ingress, Secret and ConfigMap resources as well as read and watch
|
Deployment, PersistentVolumeClaim, Ingress, Secret and ConfigMap resources as well as
|
||||||
Deployments and Jobs.
|
read and watch Deployments and Jobs.
|
||||||
- Some sort of reverse proxy to expose the REST API.
|
- Some sort of reverse proxy to expose the REST API.
|
||||||
|
|
||||||
The controller can be run outside the kubernetes cluster or deployed inside it, or even
|
The controller can be run outside the kubernetes cluster or deployed inside it, or even
|
||||||
|
|
@ -82,7 +79,8 @@ All resources to be deployed in kubernetes for a build are in
|
||||||
`kustomization.yaml` jinja template that leads to three possible resource groups
|
`kustomization.yaml` jinja template that leads to three possible resource groups
|
||||||
depending on a `mode` variable in the jinja rendering context:
|
depending on a `mode` variable in the jinja rendering context:
|
||||||
|
|
||||||
- `deployment` creates a kubernetes deployment with its associated service and ingress;
|
- `deployment` creates a kubernetes deployment with its associated resources (pvc,
|
||||||
|
service, ingress, ...);
|
||||||
- `initialization` creates a job that creates the database;
|
- `initialization` creates a job that creates the database;
|
||||||
- `cleanup` creates a job that drops the database;
|
- `cleanup` creates a job that drops the database;
|
||||||
|
|
||||||
|
|
@ -137,7 +135,6 @@ Gunicorn also necessary so SIGINT/SIGTERM shutdowns after a few seconds. Since w
|
||||||
`run_in_executor`, SIGINT/SIGTERM handling does not work very well, and gunicorn makes
|
`run_in_executor`, SIGINT/SIGTERM handling does not work very well, and gunicorn makes
|
||||||
it more robust. https://bugs.python.org/issue29309
|
it more robust. https://bugs.python.org/issue29309
|
||||||
|
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
See environment variables examples in [Dockerfile](./Dockerfile),
|
See environment variables examples in [Dockerfile](./Dockerfile),
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ class Controller:
|
||||||
return self.db.count_by_status(BuildStatus.undeploying)
|
return self.db.count_by_status(BuildStatus.undeploying)
|
||||||
|
|
||||||
async def deploy_commit(self, commit_info: CommitInfo) -> None:
|
async def deploy_commit(self, commit_info: CommitInfo) -> None:
|
||||||
"""Deploy build for a commit, or do nothing if biuld already exist."""
|
"""Deploy build for a commit, or do nothing if build already exist."""
|
||||||
build = self.db.get_for_commit(
|
build = self.db.get_for_commit(
|
||||||
repo=commit_info.repo,
|
repo=commit_info.repo,
|
||||||
target_branch=commit_info.target_branch,
|
target_branch=commit_info.target_branch,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue