Skip to content
This repository was archived by the owner on May 12, 2021. It is now read-only.

Commit f43d4f6

Browse files
author
Sebastien Boeuf
authored
Merge pull request #17 from egernst/reqts
requirements: add initial document
2 parents 3bb70f6 + 3839bf4 commit f43d4f6

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed

design/kata-design-requirements.md

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
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

Comments
 (0)