Design constraints / implications

The design of Dicot has constraints placed on it by a handful of initial requirements or assumptions:

From these points, and the goals described in the previous section, it is possible to rule out a number of technical directions

If accepted, all of the above directions would also have implications for the cloud administrator, requiring them to effectively maintain multiple distinct pieces of infrastructure for the same solution. Having distinct infrastructure required for storage / networking / etc would run counter to the goal of reducing the infrastructure burden on cloud administrators.

The above requirements all point towards a design where Dicot exists as a layer above Kubernetes / KubeVirt, acting simply as an API shim to map between the declarative OpenStack REST API and the imperative Kubernetes API. As mentioned earlier, this is a broadly equivalent strategy to that taken by the OpenStack project to build an Amazon EC2 compatible API.

Given this design approach, the question is which OpenStack services are required to be within the scope of Dicot. The core goal is to enable virtual machine management, so in scope is likely any service which is required in order to satisfy the Nova REST API functionality. Out of the large number of OpenStack services this largely boils down to

A number of other services in OpenStack are in turn delivered as layers above these services. Thus, if the Dicot implementation of these REST APIs is of high enough accuracy, it could be possible to run other OpenStack services above the Dicot REST API implementation, in much the same way as OpenStack clients will be supported. Anything that directly hooks into OpenStack infrastructure databases or message buses will be categorically unsupported though, because these concepts will not exist in the Kubernetes based architecture of Dicot.