From 5f9c892e48f4e0cc3fe2ff332046b583741c298c Mon Sep 17 00:00:00 2001 From: Jianyong Wu Date: Thu, 5 Jan 2023 14:15:52 +0800 Subject: [PATCH 1/2] kata-types: add single_container support For now, only pod_sandbox and pod_container are supported. It doesn't cover the case that container started by ctr which is a single_container defined in kata 2.0. port the single_container kata type from kata 2.0 to kata 3.0. Fixes: #6006 Signed-off-by: Jianyong Wu --- src/libs/kata-sys-util/src/spec.rs | 2 +- src/libs/kata-types/src/container.rs | 5 +++++ src/libs/kata-types/src/k8s.rs | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/libs/kata-sys-util/src/spec.rs b/src/libs/kata-sys-util/src/spec.rs index b606d1194db5..24bcf16e91b2 100644 --- a/src/libs/kata-sys-util/src/spec.rs +++ b/src/libs/kata-sys-util/src/spec.rs @@ -68,7 +68,7 @@ pub fn get_container_type(spec: &oci::Spec) -> Result { pub fn get_shim_id_info() -> Result { let spec = load_oci_spec()?; match get_container_type(&spec)? { - ContainerType::PodSandbox => Ok(ShimIdInfo::Sandbox), + ContainerType::PodSandbox | ContainerType::SingleContainer => Ok(ShimIdInfo::Sandbox), ContainerType::PodContainer => { for k in CRI_SANDBOX_ID_KEY_LIST { if let Some(sandbox_id) = spec.annotations.get(*k) { diff --git a/src/libs/kata-types/src/container.rs b/src/libs/kata-types/src/container.rs index 3a64a4dd7fae..31e729ab855c 100644 --- a/src/libs/kata-types/src/container.rs +++ b/src/libs/kata-types/src/container.rs @@ -19,6 +19,8 @@ pub(crate) const SANDBOX: &str = "sandbox"; // docker: a sandbox sandbox container pub(crate) const PODSANDBOX: &str = "podsandbox"; +pub(crate) const SINGLE_CONTAINER: &str = "single_container"; + const STATE_READY: &str = "ready"; const STATE_RUNNING: &str = "running"; const STATE_STOPPED: &str = "stopped"; @@ -45,6 +47,8 @@ pub enum ContainerType { PodContainer, /// A pod sandbox. PodSandbox, + /// A single container. + SingleContainer, } impl ContainerType { @@ -64,6 +68,7 @@ impl Display for ContainerType { match self { ContainerType::PodContainer => write!(f, "{}", POD_CONTAINER), ContainerType::PodSandbox => write!(f, "{}", POD_SANDBOX), + ContainerType::SingleContainer => write!(f, "{}", SINGLE_CONTAINER), } } } diff --git a/src/libs/kata-types/src/k8s.rs b/src/libs/kata-types/src/k8s.rs index ee392a94a8d6..2b5971ccc10a 100644 --- a/src/libs/kata-types/src/k8s.rs +++ b/src/libs/kata-types/src/k8s.rs @@ -69,7 +69,7 @@ pub fn container_type(spec: &oci::Spec) -> ContainerType { } } - ContainerType::PodSandbox + ContainerType::SingleContainer } /// Determine the k8s sandbox ID from OCI annotations. @@ -269,7 +269,7 @@ mod tests { // default assert_eq!( container_type_with_id(&spec), - (ContainerType::PodSandbox, None) + (ContainerType::SingleContainer, None) ); // crio sandbox From 464d4c94de989a9f48f56ec832ce9244f25b11f6 Mon Sep 17 00:00:00 2001 From: Jianyong Wu Date: Thu, 5 Jan 2023 14:32:14 +0800 Subject: [PATCH 2/2] runtime-rs: process single_container Process single_container like pod_sandbox when create container but like pod_container when get the size info of memory/cpu from oci/spec. Fixes: #6006 Signed-off-by: Jianyong Wu --- src/runtime-rs/crates/shim/src/shim_start.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime-rs/crates/shim/src/shim_start.rs b/src/runtime-rs/crates/shim/src/shim_start.rs index 0759891710a5..67fa8c5be873 100644 --- a/src/runtime-rs/crates/shim/src/shim_start.rs +++ b/src/runtime-rs/crates/shim/src/shim_start.rs @@ -38,7 +38,7 @@ impl ShimExecutor { let (container_type, id) = k8s::container_type_with_id(&spec); match container_type { - ContainerType::PodSandbox => { + ContainerType::PodSandbox | ContainerType::SingleContainer => { let address = self.socket_address(&self.args.id)?; let socket = new_listener(&address)?; let child_pid = self.create_shim_process(socket)?;