Furan 2
Scale out Docker builds
Furan 2 is a scalable, Kubernetes-native Docker build microservice (API) that builds and pushes Docker images from a specified GitHub repository to a specified image repository.
Furan supports gRPC and JSON clients, and runs builds asynchronously using BuildKit in single-shot, rootless
Kubernetes Jobs.
Furan supports pushing build artifacts to the following image repository services:
(Both public and private image repositories are supported.)
Expressed in plain English, Furan handles build requests such as:
"Build the GitHub repository acme/foo at commit SHA xxx using the Dockerfile in the root, and push the resulting image to the image repository at quay.io/acme/foo:tagname."
Furan is a core part of the Dollar Shave Club software delivery pipeline and is used programmatically by services such as Acyl.
Architecture
Furan's only runtime dependencies are PostgreSQL and Kubernetes.
API
At a high level, the Furan API consists of the following RPCs:
- StartBuild (asynchronously begin a build/push job)
- MonitorBuild (get a realtime stream of build messages for a running job)
- GetBuildStatus (get the status of a running job)
- ListBuilds (get a list of build jobs according to a set of criteria)
- CancelBuild (abort an actively running job)
For more details, see the protobuf definition.
Differences between Furan 1 and 2
Furan 1 did not require Kubernetes, and executed builds in the same server process via an external Docker Engine. If running
in Kubernetes, this was a Docker-in-Docker (DinD) sidecar. To support the asynchronous API, Furan 1 had a large set
of dependencies including Kafka, Consul and Cassandra/ScyllaDB.
In contrast, Furan 2 has greatly decreased runtime dependencies, simplified deployment and more efficient use of compute
resources and now requires Kubernetes. Furan 2 uses BuildKit instead of Docker Engine and uses rootless build jobs by default. Furan 2 also now
supports build cache.
···