We're currently hitting a race condition on the Cloud Hypervisor's driver code when quickly removing and adding a block device. This happens because the device removal is an asynchronous operation, and we currently do *not* monitor events coming from Cloud Hypervisor to know when the device was actually removed. Together with this, the sandbox code doesn't know about that and when a new device is attached it'll quickly assign what may be the very same ID to the new device, leading to the Cloud Hypervisor's driver trying to hotplug a device with the very same ID of the device that was not yet removed. This is, in a nutshell, why the tests with Cloud Hypervisor and devmapper have been failing every now and then. The workaround taken to solve the issue is basically *not* passing down the device ID to Cloud Hypervisor and simply letting Cloud Hypervisor itself generate those, as Cloud Hypervisor does it in a manner that avoids such conflicts. With this addition we have then to keep a map of the device ID and the Cloud Hypervisor's generated ID, so we can properly remove the device. This workaround will probably stay for a while, at least till someone has enough cycles to implement a way to watch the device removal event and then properly act on that. Spoiler alert, this will be a complex change that may not even be worth it considering the race can be avoided with this commit. Fixes: #4176 Signed-off-by: Fabiano Fidêncio <fabiano.fidencio@intel.com>
Runtime
Binary names
This repository contains the following components:
Binary name | Description |
---|---|
containerd-shim-kata-v2 |
The shimv2 runtime |
kata-runtime |
utility program |
kata-monitor |
metrics collector daemon |
For details of the other Kata Containers repositories, see the repository summary.
Introduction
The containerd-shim-kata-v2
binary is the Kata
Containers shimv2 runtime. It leverages the
virtcontainers
package to provide a high-performance standards-compliant runtime that creates
hardware-virtualized Linux containers running on Linux hosts.
The runtime is OCI-compatible, CRI-O-compatible, and Containerd-compatible, allowing it to work seamlessly with both Docker and Kubernetes respectively.
Download and install
See the installation guides available for various operating systems.
Architecture overview
See the architecture overview for details on the Kata Containers design.
Configuration
The runtime uses a TOML format configuration file called configuration.toml
.
The file is divided into sections for settings related to various
parts of the system including the runtime itself, the agent and
the hypervisor.
Each option has a comment explaining its use.
Note:
The initial values in the configuration file provide a good default configuration. You may need to modify this file to optimise or tailor your system, or if you have specific requirements.
Configuration file location
Runtime configuration file location
The shimv2 runtime looks for its configuration in the following places (in order):
-
The
io.data containers.config.config_path
annotation specified in the OCI configuration file (config.json
file) used to create the pod sandbox. -
The containerd shimv2 options passed to the runtime.
-
The value of the
KATA_CONF_FILE
environment variable.
Utility program configuration file location
The kata-runtime
utility program looks for its configuration in the
following locations (in order):
-
The path specified by the
--config
command-line option. -
The value of the
KATA_CONF_FILE
environment variable.
Note: For both binaries, the first path that exists will be used.
Hypervisor specific configuration
Kata Containers supports multiple hypervisors so your configuration.toml
configuration file may be a symbolic link to a hypervisor-specific
configuration file. See
the hypervisors document for further details.
Stateless systems
Since the runtime supports a
stateless system,
it checks for this configuration file in multiple locations, two of which are
built in to the runtime. The default location is
/usr/share/defaults/kata-containers/configuration.toml
for a standard
system. However, if /etc/kata-containers/configuration.toml
exists, this
takes priority.
The below command lists the full paths to the configuration files that the runtime attempts to load. The first path that exists will be used:
$ kata-runtime --show-default-config-paths
The runtime will log the full path to the configuration file it is using. See the logging section for further details.
To see details of your systems runtime environment (including the location of the configuration file being used), run:
$ kata-runtime env
Logging
For detailed information and analysis on obtaining logs for other system
components, see the documentation for the
kata-log-parser
tool.
Kata containerd shimv2
The Kata containerd shimv2 runtime logs through containerd
, and its logs will be sent
to wherever the containerd
logs are directed. However, the
shimv2 runtime also always logs to the system log (syslog
or journald
) using the kata
identifier.
Note: Kata logging requires containerd debug to be enabled.
To view the shimv2
runtime logs:
$ sudo journalctl -t kata
Debugging
See the debugging section of the developer guide.
Limitations
See the limitations file for further details.
Community
Contact
See how to reach the community.
Further information
See the project table of contents and the documentation repository.
Additional packages
For details of the other packages contained in this repository, see the package documentation.