From 0b90d05a4796a2a02f0a20d60f79e0502c05aed2 Mon Sep 17 00:00:00 2001 From: Kush Upadhyay Date: Tue, 7 Oct 2025 23:52:49 +0000 Subject: [PATCH 1/4] feat: k8s:add idsPerPod setting --- Cargo.toml | 2 +- .../modeled-types/Cargo.toml | 2 +- .../modeled-types/src/kubernetes.rs | 48 +++++++++++++++++++ .../modeled-types/src/lib.rs | 3 ++ .../settings-extensions/kubernetes/src/lib.rs | 12 +++-- 5 files changed, 60 insertions(+), 7 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 8e3ad893..c1ef1d90 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -58,7 +58,7 @@ bottlerocket-template-helper = { path = "./bottlerocket-template-helper", versio # Settings Models bottlerocket-model-derive = { path = "./bottlerocket-settings-models/model-derive", version = "0.1" } -bottlerocket-modeled-types = { path = "./bottlerocket-settings-models/modeled-types", version = "0.12" } +bottlerocket-modeled-types = { path = "./bottlerocket-settings-models/modeled-types", version = "0.13" } bottlerocket-scalar = { path = "./bottlerocket-settings-models/scalar", version = "0.1" } bottlerocket-scalar-derive = { path = "./bottlerocket-settings-models/scalar-derive", version = "0.1" } bottlerocket-string-impls-for = { path = "./bottlerocket-settings-models/string-impls-for", version = "0.1" } diff --git a/bottlerocket-settings-models/modeled-types/Cargo.toml b/bottlerocket-settings-models/modeled-types/Cargo.toml index c9da5173..fdc02a62 100644 --- a/bottlerocket-settings-models/modeled-types/Cargo.toml +++ b/bottlerocket-settings-models/modeled-types/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bottlerocket-modeled-types" -version = "0.12.0" +version = "0.13.0" authors = [] license = "Apache-2.0 OR MIT" edition = "2021" diff --git a/bottlerocket-settings-models/modeled-types/src/kubernetes.rs b/bottlerocket-settings-models/modeled-types/src/kubernetes.rs index b347fefa..a000d7f3 100644 --- a/bottlerocket-settings-models/modeled-types/src/kubernetes.rs +++ b/bottlerocket-settings-models/modeled-types/src/kubernetes.rs @@ -1492,6 +1492,54 @@ mod test_kubernetes_memory_swap_behavior { // =^..^= =^..^= =^..^= =^..^= =^..^= =^..^= =^..^= =^..^= =^..^= +/// KubernetesIdsPerPodValue represents an integer that contains a valid Kubernetes idsPerPod value. +/// Must be a multiple of 65536 and less than 1<<32. +#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)] +#[serde(try_from = "i64", into = "i64")] +pub struct KubernetesIdsPerPodValue { + inner: i64, +} + +impl TryFrom for KubernetesIdsPerPodValue { + type Error = error::Error; + + fn try_from(input: i64) -> Result { + ensure!( + input % 65536 == 0 && input < (1i64 << 32), + error::InvalidKubernetesIdsPerPodValueSnafu { input } + ); + Ok(KubernetesIdsPerPodValue { inner: input }) + } +} + +impl From for i64 { + fn from(val: KubernetesIdsPerPodValue) -> Self { + val.inner + } +} + +#[cfg(test)] +mod test_kubernetes_ids_per_pod_value { + use super::KubernetesIdsPerPodValue; + use std::convert::TryFrom; + + #[test] + fn good_values() { + for ok in &[0, 65536, 131072, 196608, 4294901760] { + KubernetesIdsPerPodValue::try_from(*ok).unwrap(); + } + } + + #[test] + fn bad_values() { + for err in &[1, 65535, 65537, 4294967296] { + KubernetesIdsPerPodValue::try_from(*err).unwrap_err(); + } + } +} + +// =^..^= =^..^= =^..^= =^..^= =^..^= =^..^= =^..^= =^..^= =^..^= + /// NvidiaDevicePluginSettings contains the device sharing and partitioning related settings for Nvidia gpu. #[model(impl_default = true)] pub struct NvidiaDevicePluginSettings { diff --git a/bottlerocket-settings-models/modeled-types/src/lib.rs b/bottlerocket-settings-models/modeled-types/src/lib.rs index 7c822a4a..79e475b1 100644 --- a/bottlerocket-settings-models/modeled-types/src/lib.rs +++ b/bottlerocket-settings-models/modeled-types/src/lib.rs @@ -159,6 +159,9 @@ pub mod error { #[snafu(display("Invalid memory swap behavior value '{}'", input))] InvalidMemorySwapBehavior { input: String }, + + #[snafu(display("Invalid Kubernetes ids per pod value '{}'", input))] + InvalidKubernetesIdsPerPodValue { input: i64 }, } /// Creates a `ValidationError` with a consistent message for strings with regex validations diff --git a/bottlerocket-settings-models/settings-extensions/kubernetes/src/lib.rs b/bottlerocket-settings-models/settings-extensions/kubernetes/src/lib.rs index 35474f4a..7234221b 100644 --- a/bottlerocket-settings-models/settings-extensions/kubernetes/src/lib.rs +++ b/bottlerocket-settings-models/settings-extensions/kubernetes/src/lib.rs @@ -5,11 +5,11 @@ use bottlerocket_modeled_types::{ KubernetesAuthenticationMode, KubernetesBootstrapToken, KubernetesCPUManagerPolicyOption, KubernetesCloudProvider, KubernetesClusterDnsIp, KubernetesClusterName, KubernetesDurationValue, KubernetesEvictionKey, KubernetesHostnameOverrideSource, - KubernetesLabelKey, KubernetesLabelValue, KubernetesMemoryManagerPolicy, - KubernetesMemoryReservation, KubernetesMemorySwapBehavior, KubernetesQuantityValue, - KubernetesReservedResourceKey, KubernetesTaintValue, KubernetesThresholdValue, - NonNegativeInteger, SingleLineString, TopologyManagerPolicy, TopologyManagerScope, Url, - ValidBase64, ValidLinuxHostname, + KubernetesIdsPerPodValue, KubernetesLabelKey, KubernetesLabelValue, + KubernetesMemoryManagerPolicy, KubernetesMemoryReservation, KubernetesMemorySwapBehavior, + KubernetesQuantityValue, KubernetesReservedResourceKey, KubernetesTaintValue, + KubernetesThresholdValue, NonNegativeInteger, SingleLineString, TopologyManagerPolicy, + TopologyManagerScope, Url, ValidBase64, ValidLinuxHostname, }; use bottlerocket_settings_sdk::{GenerateResult, SettingsModel}; @@ -96,6 +96,7 @@ pub struct KubernetesSettingsV1 { node_ip: IpAddr, pod_infra_container_image: SingleLineString, hostname_override: ValidLinuxHostname, + ids_per_pod: KubernetesIdsPerPodValue, } type Result = std::result::Result; @@ -199,6 +200,7 @@ mod test { device_ownership_from_security_context: None, single_process_oom_kill: None, static_pods_enabled: None, + ids_per_pod: None, }) ); } From 5d269f5727bcfcdf1a5a8ba6a259ee988c421d9d Mon Sep 17 00:00:00 2001 From: Kush Upadhyay Date: Tue, 7 Oct 2025 23:55:53 +0000 Subject: [PATCH 2/4] feat: k8s:add maxParallelImagePulls setting --- .../settings-extensions/kubernetes/src/lib.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bottlerocket-settings-models/settings-extensions/kubernetes/src/lib.rs b/bottlerocket-settings-models/settings-extensions/kubernetes/src/lib.rs index 7234221b..befe158e 100644 --- a/bottlerocket-settings-models/settings-extensions/kubernetes/src/lib.rs +++ b/bottlerocket-settings-models/settings-extensions/kubernetes/src/lib.rs @@ -97,6 +97,7 @@ pub struct KubernetesSettingsV1 { pod_infra_container_image: SingleLineString, hostname_override: ValidLinuxHostname, ids_per_pod: KubernetesIdsPerPodValue, + max_parallel_image_pulls: i32, } type Result = std::result::Result; @@ -201,6 +202,7 @@ mod test { single_process_oom_kill: None, static_pods_enabled: None, ids_per_pod: None, + max_parallel_image_pulls: None, }) ); } From 094196c002bf20b908cf190fcc92de676516f3c8 Mon Sep 17 00:00:00 2001 From: Kush Upadhyay Date: Tue, 7 Oct 2025 23:57:25 +0000 Subject: [PATCH 3/4] chore: bump k8s settings-extensions to 0.6 --- Cargo.toml | 2 +- .../settings-extensions/kubernetes/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index c1ef1d90..4fa5e47e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -76,7 +76,7 @@ settings-extension-dns = { path = "./bottlerocket-settings-models/settings-exten settings-extension-ecs = { path = "./bottlerocket-settings-models/settings-extensions/ecs", version = "0.1" } settings-extension-host-containers = { path = "./bottlerocket-settings-models/settings-extensions/host-containers", version = "0.2" } settings-extension-kernel = { path = "./bottlerocket-settings-models/settings-extensions/kernel", version = "0.1" } -settings-extension-kubernetes = { path = "./bottlerocket-settings-models/settings-extensions/kubernetes", version = "0.5" } +settings-extension-kubernetes = { path = "./bottlerocket-settings-models/settings-extensions/kubernetes", version = "0.6" } settings-extension-kubelet-device-plugins = { path = "./bottlerocket-settings-models/settings-extensions/kubelet-device-plugins", version = "0.3" } settings-extension-metrics = { path = "./bottlerocket-settings-models/settings-extensions/metrics", version = "0.1" } settings-extension-motd = { path = "./bottlerocket-settings-models/settings-extensions/motd", version = "0.1" } diff --git a/bottlerocket-settings-models/settings-extensions/kubernetes/Cargo.toml b/bottlerocket-settings-models/settings-extensions/kubernetes/Cargo.toml index dcca0d27..7f684394 100644 --- a/bottlerocket-settings-models/settings-extensions/kubernetes/Cargo.toml +++ b/bottlerocket-settings-models/settings-extensions/kubernetes/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "settings-extension-kubernetes" -version = "0.5.0" +version = "0.6.0" authors = ["Sean P. Kelly "] license = "Apache-2.0 OR MIT" edition = "2021" From 01d647599b30324549a7f2322f3d270837fe2838 Mon Sep 17 00:00:00 2001 From: Kush Upadhyay Date: Thu, 9 Oct 2025 20:30:21 +0000 Subject: [PATCH 4/4] chore: bump settings-models to 0.17.0 Signed-off-by: Kush Upadhyay --- bottlerocket-settings-models/CHANGELOG.md | 16 +++++++++++++++- .../settings-models/Cargo.toml | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/bottlerocket-settings-models/CHANGELOG.md b/bottlerocket-settings-models/CHANGELOG.md index ed257c9f..b2f2e2af 100644 --- a/bottlerocket-settings-models/CHANGELOG.md +++ b/bottlerocket-settings-models/CHANGELOG.md @@ -9,7 +9,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - See [unreleased changes here] -[unreleased changes here]: https://github.com/bottlerocket-os/bottlerocket-settings-sdk/compare/bottlerocket-settings-models-v0.16.0...HEAD +[unreleased changes here]: https://github.com/bottlerocket-os/bottlerocket-settings-sdk/compare/bottlerocket-settings-models-v0.17.0...HEAD + +## [0.17.0] - 2025-10-10 + +## Model Changes + +### Added + +- Added `image-minimum-gc-age` and `image-maximum-gc-age` kubernetes settings ([#87]) - Thanks @parnniti! +- Added `ids-per-pod` and `max-parallel-image-pulls` kubernetes settings ([#104]) + +[#87]:https://github.com/bottlerocket-os/bottlerocket-settings-sdk/pull/87 +[#104]:https://github.com/bottlerocket-os/bottlerocket-settings-sdk/pull/104 + +[0.17.0]: https://github.com/bottlerocket-os/bottlerocket-settings-sdk/compare/bottlerocket-settings-models-v0.16.0...bottlerocket-settings-models-v0.17.0 ## [0.16.0] - 2025-09-19 diff --git a/bottlerocket-settings-models/settings-models/Cargo.toml b/bottlerocket-settings-models/settings-models/Cargo.toml index f868db55..d3dcf91b 100644 --- a/bottlerocket-settings-models/settings-models/Cargo.toml +++ b/bottlerocket-settings-models/settings-models/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bottlerocket-settings-models" -version = "0.16.0" +version = "0.17.0" authors = ["Tom Kirchner "] license = "Apache-2.0 OR MIT" edition = "2021"