mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-09-17 06:48:51 +00:00
Merge pull request #10312 from sidneychang/configurable-build-dragonball
runtime-rs: Add Configurable Compilation for Dragonball in Runtime-rs
This commit is contained in:
@@ -83,6 +83,23 @@ $ make && sudo make install
|
|||||||
```
|
```
|
||||||
After running the command above, the default config file `configuration.toml` will be installed under `/usr/share/defaults/kata-containers/`, the binary file `containerd-shim-kata-v2` will be installed under `/usr/local/bin/` .
|
After running the command above, the default config file `configuration.toml` will be installed under `/usr/share/defaults/kata-containers/`, the binary file `containerd-shim-kata-v2` will be installed under `/usr/local/bin/` .
|
||||||
|
|
||||||
|
### Install Shim Without Builtin Dragonball VMM
|
||||||
|
|
||||||
|
By default, runtime-rs includes the `Dragonball` VMM. To build without the built-in `Dragonball` hypervisor, use `make USE_BUILDIN_DB=false`:
|
||||||
|
```bash
|
||||||
|
$ cd kata-containers/src/runtime-rs
|
||||||
|
$ make USE_BUILDIN_DB=false
|
||||||
|
```
|
||||||
|
After building, specify the desired hypervisor during installation using `HYPERVISOR`. For example, to use `qemu` or `cloud-hypervisor`:
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo make install HYPERVISOR=qemu
|
||||||
|
```
|
||||||
|
or
|
||||||
|
```
|
||||||
|
sudo make install HYPERVISOR=cloud-hypervisor
|
||||||
|
```
|
||||||
|
|
||||||
### Build Kata Containers Kernel
|
### Build Kata Containers Kernel
|
||||||
Follow the [Kernel installation guide](/tools/packaging/kernel/README.md).
|
Follow the [Kernel installation guide](/tools/packaging/kernel/README.md).
|
||||||
|
|
||||||
|
@@ -87,8 +87,10 @@ HYPERVISOR_FC = firecracker
|
|||||||
HYPERVISOR_QEMU = qemu
|
HYPERVISOR_QEMU = qemu
|
||||||
HYPERVISOR_CLH = cloud-hypervisor
|
HYPERVISOR_CLH = cloud-hypervisor
|
||||||
|
|
||||||
|
# When set to true, builds the built-in Dragonball hypervisor
|
||||||
|
USE_BUILDIN_DB := true
|
||||||
|
|
||||||
DEFAULT_HYPERVISOR ?= $(HYPERVISOR_DB)
|
HYPERVISOR ?= $(HYPERVISOR_DB)
|
||||||
|
|
||||||
##VAR HYPERVISOR=<hypervisor_name> List of hypervisors this build system can generate configuration for.
|
##VAR HYPERVISOR=<hypervisor_name> List of hypervisors this build system can generate configuration for.
|
||||||
HYPERVISORS := $(HYPERVISOR_DB) $(HYPERVISOR_FC) $(HYPERVISOR_QEMU) $(HYPERVISOR_CLH)
|
HYPERVISORS := $(HYPERVISOR_DB) $(HYPERVISOR_FC) $(HYPERVISOR_QEMU) $(HYPERVISOR_CLH)
|
||||||
@@ -186,8 +188,6 @@ CONFIG_PATHS =
|
|||||||
SYSCONFIG_PATHS =
|
SYSCONFIG_PATHS =
|
||||||
# List of hypervisors known for the current architecture
|
# List of hypervisors known for the current architecture
|
||||||
KNOWN_HYPERVISORS =
|
KNOWN_HYPERVISORS =
|
||||||
# List of hypervisors known for the current architecture
|
|
||||||
KNOWN_HYPERVISORS =
|
|
||||||
|
|
||||||
CONFDIR := $(DEFAULTSDIR)/$(PROJECT_DIR)/runtime-rs
|
CONFDIR := $(DEFAULTSDIR)/$(PROJECT_DIR)/runtime-rs
|
||||||
SYSCONFDIR := $(SYSCONFDIR)/$(PROJECT_DIR)
|
SYSCONFDIR := $(SYSCONFDIR)/$(PROJECT_DIR)
|
||||||
@@ -317,14 +317,14 @@ ifneq (,$(FCCMD))
|
|||||||
DEFSTATICRESOURCEMGMT_FC := true
|
DEFSTATICRESOURCEMGMT_FC := true
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(DEFAULT_HYPERVISOR),$(HYPERVISOR_DB))
|
ifeq ($(HYPERVISOR),$(HYPERVISOR_DB))
|
||||||
DEFAULT_HYPERVISOR_CONFIG = $(CONFIG_FILE_DB)
|
DEFAULT_HYPERVISOR_CONFIG = $(CONFIG_FILE_DB)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(DEFAULT_HYPERVISOR),$(HYPERVISOR_QEMU))
|
ifeq ($(HYPERVISOR),$(HYPERVISOR_QEMU))
|
||||||
DEFAULT_HYPERVISOR_CONFIG = $(CONFIG_FILE_QEMU)
|
DEFAULT_HYPERVISOR_CONFIG = $(CONFIG_FILE_QEMU)
|
||||||
endif
|
endif
|
||||||
ifeq ($(DEFAULT_HYPERVISOR),$(HYPERVISOR_FC))
|
ifeq ($(HYPERVISOR),$(HYPERVISOR_FC))
|
||||||
DEFAULT_HYPERVISOR_CONFIG = $(CONFIG_FILE_FC)
|
DEFAULT_HYPERVISOR_CONFIG = $(CONFIG_FILE_FC)
|
||||||
endif
|
endif
|
||||||
# list of variables the user may wish to override
|
# list of variables the user may wish to override
|
||||||
@@ -335,7 +335,8 @@ USER_VARS += CONFIG_FC_IN
|
|||||||
USER_VARS += CONFIG_PATH
|
USER_VARS += CONFIG_PATH
|
||||||
USER_VARS += CONFIG_QEMU_IN
|
USER_VARS += CONFIG_QEMU_IN
|
||||||
USER_VARS += DESTDIR
|
USER_VARS += DESTDIR
|
||||||
USER_VARS += DEFAULT_HYPERVISOR
|
USER_VARS += HYPERVISOR
|
||||||
|
USER_VARS += USE_BUILDIN_DB
|
||||||
USER_VARS += DBCMD
|
USER_VARS += DBCMD
|
||||||
USER_VARS += DBCTLCMD
|
USER_VARS += DBCTLCMD
|
||||||
USER_VARS += FCCTLCMD
|
USER_VARS += FCCTLCMD
|
||||||
@@ -473,6 +474,11 @@ COMMIT_MSG = $(if $(COMMIT),$(COMMIT),unknown)
|
|||||||
|
|
||||||
EXTRA_RUSTFEATURES :=
|
EXTRA_RUSTFEATURES :=
|
||||||
|
|
||||||
|
# if use dragonball hypervisor, add the feature to build dragonball in runtime
|
||||||
|
ifeq ($(USE_BUILDIN_DB),true)
|
||||||
|
EXTRA_RUSTFEATURES += dragonball
|
||||||
|
endif
|
||||||
|
|
||||||
ifneq ($(EXTRA_RUSTFEATURES),)
|
ifneq ($(EXTRA_RUSTFEATURES),)
|
||||||
override EXTRA_RUSTFEATURES := --features $(EXTRA_RUSTFEATURES)
|
override EXTRA_RUSTFEATURES := --features $(EXTRA_RUSTFEATURES)
|
||||||
endif
|
endif
|
||||||
@@ -612,7 +618,7 @@ show-summary: show-header
|
|||||||
@printf " %s\n" "$(call get_toolchain_version)"
|
@printf " %s\n" "$(call get_toolchain_version)"
|
||||||
@printf "\n"
|
@printf "\n"
|
||||||
@printf "• Hypervisors:\n"
|
@printf "• Hypervisors:\n"
|
||||||
@printf "\tDefault: $(DEFAULT_HYPERVISOR)\n"
|
@printf "\tDefault: $(HYPERVISOR)\n"
|
||||||
@printf "\tKnown: $(sort $(HYPERVISORS))\n"
|
@printf "\tKnown: $(sort $(HYPERVISORS))\n"
|
||||||
@printf "\tAvailable for this architecture: $(sort $(KNOWN_HYPERVISORS))\n"
|
@printf "\tAvailable for this architecture: $(sort $(KNOWN_HYPERVISORS))\n"
|
||||||
@printf "\n"
|
@printf "\n"
|
||||||
@@ -632,7 +638,7 @@ show-summary: show-header
|
|||||||
@printf "\talternate config paths (SYSCONFIG_PATHS) : %s\n"
|
@printf "\talternate config paths (SYSCONFIG_PATHS) : %s\n"
|
||||||
@printf \
|
@printf \
|
||||||
"$(foreach c,$(sort $(SYSCONFIG_PATHS)),$(shell printf "\\t - $(c)\\\n"))"
|
"$(foreach c,$(sort $(SYSCONFIG_PATHS)),$(shell printf "\\t - $(c)\\\n"))"
|
||||||
@printf "\tdefault install path for $(DEFAULT_HYPERVISOR) (CONFIG_PATH) : %s\n" $(abspath $(CONFIG_PATH))
|
@printf "\tdefault install path for $(HYPERVISOR) (CONFIG_PATH) : %s\n" $(abspath $(CONFIG_PATH))
|
||||||
@printf "\tdefault alternate config path (SYSCONFIG) : %s\n" $(abspath $(SYSCONFIG))
|
@printf "\tdefault alternate config path (SYSCONFIG) : %s\n" $(abspath $(SYSCONFIG))
|
||||||
ifneq (,$(findstring $(HYPERVISOR_QEMU),$(KNOWN_HYPERVISORS)))
|
ifneq (,$(findstring $(HYPERVISOR_QEMU),$(KNOWN_HYPERVISORS)))
|
||||||
@printf "\t$(HYPERVISOR_QEMU) hypervisor path (QEMUPATH) : %s\n" $(abspath $(QEMUPATH))
|
@printf "\t$(HYPERVISOR_QEMU) hypervisor path (QEMUPATH) : %s\n" $(abspath $(QEMUPATH))
|
||||||
|
@@ -47,7 +47,7 @@ qapi-spec = "0.3.1"
|
|||||||
qapi-qmp = "0.14.0"
|
qapi-qmp = "0.14.0"
|
||||||
|
|
||||||
[target.'cfg(not(target_arch = "s390x"))'.dependencies]
|
[target.'cfg(not(target_arch = "s390x"))'.dependencies]
|
||||||
dragonball = { path = "../../../dragonball", features = ["atomic-guest-memory", "virtio-vsock", "hotplug", "virtio-blk", "virtio-net", "virtio-fs", "vhost-net", "dbs-upcall", "virtio-mem", "virtio-balloon", "vhost-user-net", "host-device"] }
|
dragonball = { path = "../../../dragonball", features = ["atomic-guest-memory", "virtio-vsock", "hotplug", "virtio-blk", "virtio-net", "virtio-fs", "vhost-net", "dbs-upcall", "virtio-mem", "virtio-balloon", "vhost-user-net", "host-device"], optional = true }
|
||||||
dbs-utils = { path = "../../../dragonball/src/dbs_utils" }
|
dbs-utils = { path = "../../../dragonball/src/dbs_utils" }
|
||||||
hyperlocal = "0.8.0"
|
hyperlocal = "0.8.0"
|
||||||
hyper = {version = "0.14.18", features = ["client"]}
|
hyper = {version = "0.14.18", features = ["client"]}
|
||||||
@@ -55,6 +55,7 @@ hyper = {version = "0.14.18", features = ["client"]}
|
|||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
|
|
||||||
|
dragonball = ["dep:dragonball"]
|
||||||
# Feature is not yet complete, so not enabled by default.
|
# Feature is not yet complete, so not enabled by default.
|
||||||
# See https://github.com/kata-containers/kata-containers/issues/6264.
|
# See https://github.com/kata-containers/kata-containers/issues/6264.
|
||||||
cloud-hypervisor = ["ch-config"]
|
cloud-hypervisor = ["ch-config"]
|
||||||
|
@@ -13,7 +13,7 @@ pub mod device;
|
|||||||
pub mod hypervisor_persist;
|
pub mod hypervisor_persist;
|
||||||
pub use device::driver::*;
|
pub use device::driver::*;
|
||||||
use device::DeviceType;
|
use device::DeviceType;
|
||||||
#[cfg(not(target_arch = "s390x"))]
|
#[cfg(all(feature = "dragonball", not(target_arch = "s390x")))]
|
||||||
pub mod dragonball;
|
pub mod dragonball;
|
||||||
#[cfg(not(target_arch = "s390x"))]
|
#[cfg(not(target_arch = "s390x"))]
|
||||||
pub mod firecracker;
|
pub mod firecracker;
|
||||||
@@ -53,12 +53,14 @@ const VM_ROOTFS_FILESYSTEM_EROFS: &str = "erofs";
|
|||||||
// /dev/hugepages will be the mount point
|
// /dev/hugepages will be the mount point
|
||||||
// mkdir -p /dev/hugepages
|
// mkdir -p /dev/hugepages
|
||||||
// mount -t hugetlbfs none /dev/hugepages
|
// mount -t hugetlbfs none /dev/hugepages
|
||||||
#[cfg(not(target_arch = "s390x"))]
|
|
||||||
const DEV_HUGEPAGES: &str = "/dev/hugepages";
|
|
||||||
pub const HUGETLBFS: &str = "hugetlbfs";
|
pub const HUGETLBFS: &str = "hugetlbfs";
|
||||||
#[cfg(not(target_arch = "s390x"))]
|
// Constants required for Dragonball VMM when enabled and not on s390x.
|
||||||
|
// Not needed when the built-in VMM is not used.
|
||||||
|
#[cfg(all(feature = "dragonball", not(target_arch = "s390x")))]
|
||||||
|
const DEV_HUGEPAGES: &str = "/dev/hugepages";
|
||||||
|
#[cfg(all(feature = "dragonball", not(target_arch = "s390x")))]
|
||||||
const SHMEM: &str = "shmem";
|
const SHMEM: &str = "shmem";
|
||||||
#[cfg(not(target_arch = "s390x"))]
|
#[cfg(all(feature = "dragonball", not(target_arch = "s390x")))]
|
||||||
const HUGE_SHMEM: &str = "hugeshmem";
|
const HUGE_SHMEM: &str = "hugeshmem";
|
||||||
|
|
||||||
pub const HYPERVISOR_DRAGONBALL: &str = "dragonball";
|
pub const HYPERVISOR_DRAGONBALL: &str = "dragonball";
|
||||||
|
@@ -43,3 +43,6 @@ default = ["cloud-hypervisor"]
|
|||||||
|
|
||||||
# Enable the Cloud Hypervisor driver
|
# Enable the Cloud Hypervisor driver
|
||||||
cloud-hypervisor = []
|
cloud-hypervisor = []
|
||||||
|
|
||||||
|
# Enable the build-in VMM Dragtonball
|
||||||
|
dragonball = []
|
@@ -21,12 +21,12 @@ use anyhow::{anyhow, Context, Result};
|
|||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use common::{message::Message, types::SandboxConfig, RuntimeHandler, RuntimeInstance};
|
use common::{message::Message, types::SandboxConfig, RuntimeHandler, RuntimeInstance};
|
||||||
use hypervisor::Hypervisor;
|
use hypervisor::Hypervisor;
|
||||||
#[cfg(not(target_arch = "s390x"))]
|
#[cfg(all(feature = "dragonball", not(target_arch = "s390x")))]
|
||||||
use hypervisor::{dragonball::Dragonball, HYPERVISOR_DRAGONBALL};
|
use hypervisor::{dragonball::Dragonball, HYPERVISOR_DRAGONBALL};
|
||||||
#[cfg(not(target_arch = "s390x"))]
|
#[cfg(not(target_arch = "s390x"))]
|
||||||
use hypervisor::{firecracker::Firecracker, HYPERVISOR_FIRECRACKER};
|
use hypervisor::{firecracker::Firecracker, HYPERVISOR_FIRECRACKER};
|
||||||
use hypervisor::{qemu::Qemu, HYPERVISOR_QEMU};
|
use hypervisor::{qemu::Qemu, HYPERVISOR_QEMU};
|
||||||
#[cfg(not(target_arch = "s390x"))]
|
#[cfg(all(feature = "dragonball", not(target_arch = "s390x")))]
|
||||||
use kata_types::config::DragonballConfig;
|
use kata_types::config::DragonballConfig;
|
||||||
#[cfg(not(target_arch = "s390x"))]
|
#[cfg(not(target_arch = "s390x"))]
|
||||||
use kata_types::config::FirecrackerConfig;
|
use kata_types::config::FirecrackerConfig;
|
||||||
@@ -57,7 +57,9 @@ impl RuntimeHandler for VirtContainer {
|
|||||||
// register
|
// register
|
||||||
#[cfg(not(target_arch = "s390x"))]
|
#[cfg(not(target_arch = "s390x"))]
|
||||||
{
|
{
|
||||||
|
#[cfg(feature = "dragonball")]
|
||||||
let dragonball_config = Arc::new(DragonballConfig::new());
|
let dragonball_config = Arc::new(DragonballConfig::new());
|
||||||
|
#[cfg(feature = "dragonball")]
|
||||||
register_hypervisor_plugin("dragonball", dragonball_config);
|
register_hypervisor_plugin("dragonball", dragonball_config);
|
||||||
|
|
||||||
let firecracker_config = Arc::new(FirecrackerConfig::new());
|
let firecracker_config = Arc::new(FirecrackerConfig::new());
|
||||||
@@ -149,7 +151,7 @@ async fn new_hypervisor(toml_config: &TomlConfig) -> Result<Arc<dyn Hypervisor>>
|
|||||||
// TODO: support other hypervisor
|
// TODO: support other hypervisor
|
||||||
// issue: https://github.com/kata-containers/kata-containers/issues/4634
|
// issue: https://github.com/kata-containers/kata-containers/issues/4634
|
||||||
match hypervisor_name.as_str() {
|
match hypervisor_name.as_str() {
|
||||||
#[cfg(not(target_arch = "s390x"))]
|
#[cfg(all(feature = "dragonball", not(target_arch = "s390x")))]
|
||||||
HYPERVISOR_DRAGONBALL => {
|
HYPERVISOR_DRAGONBALL => {
|
||||||
let mut hypervisor = Dragonball::new();
|
let mut hypervisor = Dragonball::new();
|
||||||
hypervisor
|
hypervisor
|
||||||
|
@@ -18,7 +18,9 @@ use common::{types::SandboxConfig, ContainerManager, Sandbox, SandboxNetworkEnv}
|
|||||||
use containerd_shim_protos::events::task::{TaskExit, TaskOOM};
|
use containerd_shim_protos::events::task::{TaskExit, TaskOOM};
|
||||||
use hypervisor::VsockConfig;
|
use hypervisor::VsockConfig;
|
||||||
#[cfg(not(target_arch = "s390x"))]
|
#[cfg(not(target_arch = "s390x"))]
|
||||||
use hypervisor::{dragonball::Dragonball, HYPERVISOR_DRAGONBALL, HYPERVISOR_FIRECRACKER};
|
use hypervisor::HYPERVISOR_FIRECRACKER;
|
||||||
|
#[cfg(all(feature = "dragonball", not(target_arch = "s390x")))]
|
||||||
|
use hypervisor::{dragonball::Dragonball, HYPERVISOR_DRAGONBALL};
|
||||||
use hypervisor::{qemu::Qemu, HYPERVISOR_QEMU};
|
use hypervisor::{qemu::Qemu, HYPERVISOR_QEMU};
|
||||||
use hypervisor::{utils::get_hvsock_path, HybridVsockConfig, DEFAULT_GUEST_VSOCK_CID};
|
use hypervisor::{utils::get_hvsock_path, HybridVsockConfig, DEFAULT_GUEST_VSOCK_CID};
|
||||||
use hypervisor::{BlockConfig, Hypervisor};
|
use hypervisor::{BlockConfig, Hypervisor};
|
||||||
@@ -640,7 +642,7 @@ impl Persist for VirtSandbox {
|
|||||||
resource: Some(self.resource_manager.save().await?),
|
resource: Some(self.resource_manager.save().await?),
|
||||||
hypervisor: match hypervisor_state.hypervisor_type.as_str() {
|
hypervisor: match hypervisor_state.hypervisor_type.as_str() {
|
||||||
// TODO support other hypervisors
|
// TODO support other hypervisors
|
||||||
#[cfg(not(target_arch = "s390x"))]
|
#[cfg(all(feature = "dragonball", not(target_arch = "s390x")))]
|
||||||
HYPERVISOR_DRAGONBALL => Ok(Some(hypervisor_state)),
|
HYPERVISOR_DRAGONBALL => Ok(Some(hypervisor_state)),
|
||||||
#[cfg(not(target_arch = "s390x"))]
|
#[cfg(not(target_arch = "s390x"))]
|
||||||
HYPERVISOR_NAME_CH => Ok(Some(hypervisor_state)),
|
HYPERVISOR_NAME_CH => Ok(Some(hypervisor_state)),
|
||||||
@@ -679,7 +681,7 @@ impl Persist for VirtSandbox {
|
|||||||
let h = sandbox_state.hypervisor.unwrap_or_default();
|
let h = sandbox_state.hypervisor.unwrap_or_default();
|
||||||
let hypervisor = match h.hypervisor_type.as_str() {
|
let hypervisor = match h.hypervisor_type.as_str() {
|
||||||
// TODO support other hypervisors
|
// TODO support other hypervisors
|
||||||
#[cfg(not(target_arch = "s390x"))]
|
#[cfg(all(feature = "dragonball", not(target_arch = "s390x")))]
|
||||||
HYPERVISOR_DRAGONBALL => {
|
HYPERVISOR_DRAGONBALL => {
|
||||||
let hypervisor = Arc::new(Dragonball::restore((), h).await?) as Arc<dyn Hypervisor>;
|
let hypervisor = Arc::new(Dragonball::restore((), h).await?) as Arc<dyn Hypervisor>;
|
||||||
Ok(hypervisor)
|
Ok(hypervisor)
|
||||||
|
Reference in New Issue
Block a user