|
| 1 | +## Design requirements |
| 2 | + |
| 3 | +The Kata Containers runtime **MUST** fulfill all of the following requirements: |
| 4 | + |
| 5 | +### OCI compatibility |
| 6 | +The Kata Containers runtime **MUST** implement the [OCI runtime specification](https://github.com/opencontainers/runtime-spec) and support all |
| 7 | +the OCI runtime operations. |
| 8 | + |
| 9 | +### [`runc`](https://github.com/opencontainers/runc) CLI compatibility |
| 10 | +In theory, being OCI compatible should be enough. In practice, the Kata Containers runtime |
| 11 | +should comply with the latest *stable* `runc` CLI. In particular, it **MUST** implement the |
| 12 | +following `runc` commands: |
| 13 | + |
| 14 | +* `create` |
| 15 | +* `delete` |
| 16 | +* `exec` |
| 17 | +* `kill` |
| 18 | +* `list` |
| 19 | +* `pause` |
| 20 | +* `ps` |
| 21 | +* `start` |
| 22 | +* `state` |
| 23 | +* `version` |
| 24 | + |
| 25 | +The Kata Containers runtime **MUST** implement the following command line options: |
| 26 | +* `--console-socket` |
| 27 | +* `--pid-file` |
| 28 | + |
| 29 | +### [CRI](http://blog.kubernetes.io/2016/12/container-runtime-interface-cri-in-kubernetes.html) and [Kubernetes](https://kubernetes.io) support |
| 30 | +The Kata Containers project **MUST** provide two interfaces for CRI shims to manage hardware |
| 31 | +virtualization based Kubernetes pods and containers: |
| 32 | +- An OCI and `runc` compatible command line interface, as decribed in the previous section. |
| 33 | +This interface is used by implementations such as [`CRI-O`](http://cri-o.io) and [`cri-containerd`](https://github.com/containerd/cri-containerd), for example. |
| 34 | +- A hardware virtualization runtime library API for CRI shims to consume and provide a more |
| 35 | +CRI native implementation. The [`frakti`](https://github.com/kubernetes/frakti) CRI shim is an example of such a consumer. |
| 36 | + |
| 37 | +### Multiple hardware architectures support |
| 38 | +The Kata Containers runtime **MUST NOT** be architecture-specific. It should be able to support |
| 39 | +multiple hardware architectures and provide a modular and flexible design for adding support |
| 40 | +for additional ones. |
| 41 | + |
| 42 | +### Multiple hypervisor support |
| 43 | +The Kata Containers runtime **MUST NOT** be tied to any specific hardware virtualization technology, |
| 44 | +hypervisor, or virtual machine monitor implementation. |
| 45 | +It should support multiple hypervisors and provide a pluggable and flexible design to add support |
| 46 | +for additional ones. |
| 47 | + |
| 48 | +#### Nesting |
| 49 | +The Kata Containers runtime **MUST** support nested virtualization environments. |
| 50 | + |
| 51 | +### Networking |
| 52 | + |
| 53 | +* The Kata Containers runtime **MUST** support CNI plugin. |
| 54 | +* The Kata Containers runtime **MUST** support both legacy and IPv6 networks. |
| 55 | + |
| 56 | +### I/O |
| 57 | + |
| 58 | +#### Devices direct assignment |
| 59 | +In order for containers to directly consume host hardware resources, the Kata Containers runtime |
| 60 | +**MUST** provide containers with secure pass through for generic devices such as GPUs, SRIOV, |
| 61 | +RDMA, QAT, by leveraging I/O virtualization technologies (IOMMU, interrupt remapping). |
| 62 | + |
| 63 | +#### Acceleration |
| 64 | +The Kata Containers runtime **MUST** support accelerated and user-space-based I/O operations |
| 65 | +for networking (e.g. DPDK) as well as storage through `vhost-user` sockets. |
| 66 | + |
| 67 | +#### Scalability |
| 68 | +The Kata Containers runtime **MUST** support scalable I/O through the SRIOV technology. |
| 69 | + |
| 70 | + |
| 71 | +### Virtualization overhead reduction |
| 72 | +A compelling aspect of containers is their minimal overhead compared to bare metal applications. |
| 73 | +A container runtime should keep the overhead to a minimum in order to provide the expected user |
| 74 | +experience. |
| 75 | +The Kata Containers runtime implementation **SHOULD** be optimized for: |
| 76 | + |
| 77 | +* Minimal workload boot and shutdown times |
| 78 | +* Minimal workload memory footprint |
| 79 | +* Maximal networking throughput |
| 80 | +* Minimal networking latency |
| 81 | + |
| 82 | +### Testing and debugging |
| 83 | + |
| 84 | +#### Continuous Integration |
| 85 | +Each Kata Containers runtime pull request **MUST** pass at least the following set of container-related |
| 86 | +tests: |
| 87 | + |
| 88 | +* Unit tests: runtime unit tests coverage >75% |
| 89 | +* Functional tests: the entire runtime CLI and APIs |
| 90 | +* Integration tests: Docker and Kubernetes |
| 91 | + |
| 92 | +#### Debugging |
| 93 | + |
| 94 | +The Kata Containers runtime implementation **MUST** use structured logging in order to namespace |
| 95 | +log messages to facilitate debugging. |
0 commit comments