Skip to content

Commit

Permalink
Merge pull request #2986 from stmcginnis/cpu-policy-options
Browse files Browse the repository at this point in the history
kubelet: Enable setting cpuManagerPolicyOptions
  • Loading branch information
stmcginnis authored Apr 24, 2023
2 parents 3e6bbf0 + 8cb2651 commit b1f7b44
Show file tree
Hide file tree
Showing 13 changed files with 115 additions and 1 deletion.
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,18 @@ The following settings are optional and allow you to further configure your clus
* `settings.kubernetes.container-log-max-files`: The maximum number of container log files that can be present for a container.
* `settings.kubernetes.container-log-max-size`: The maximum size of container log file before it is rotated.
* `settings.kubernetes.cpu-manager-policy`: Specifies the CPU manager policy. Possible values are `static` and `none`. Defaults to `none`. If you want to allow pods with certain resource characteristics to be granted increased CPU affinity and exclusivity on the node, you can set this setting to `static`. You should reboot if you change this setting after startup - try `apiclient reboot`.
* `settings.kubernetes.cpu-manager-policy-options`: Policy options to apply when `cpu-manager-policy` is set to `static`. Currently `full-pcpus-only` is the only option.

For example:

```toml
[settings.kubernetes]
cpu-manager-policy = "static"
cpu-manager-policy-options = [
"full-pcpus-only"
]
```

* `settings.kubernetes.cpu-manager-reconcile-period`: Specifies the CPU manager reconcile period, which controls how often updated CPU assignments are written to cgroupfs. The value is a duration like `30s` for 30 seconds or `1h5m` for 1 hour and 5 minutes.
* `settings.kubernetes.credential-providers`: Contains a collection of Kubelet image credential provider settings.
Each name under `credential-providers` is the name of the plugin to configure.
Expand Down
3 changes: 2 additions & 1 deletion Release.toml
Original file line number Diff line number Diff line change
Expand Up @@ -201,5 +201,6 @@ version = "1.14.0"
"migrate_v1.13.4_add-hostname-override-metadata.lz4",
]
"(1.13.4, 1.14.0)" = [
"migrate_v1.14.0_kubernetes-gc-percent-type-change.lz4"
"migrate_v1.14.0_kubernetes-gc-percent-type-change.lz4",
"migrate_v1.14.0_kubernetes-config-settings.lz4",
]
6 changes: 6 additions & 0 deletions packages/kubernetes-1.22/kubelet-config
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,12 @@ cpuManagerPolicy: {{default "none" settings.kubernetes.cpu-manager-policy}}
{{#if settings.kubernetes.cpu-manager-reconcile-period}}
cpuManagerReconcilePeriod: {{settings.kubernetes.cpu-manager-reconcile-period}}
{{/if}}
{{#if settings.kubernetes.cpu-manager-policy-options}}
cpuManagerPolicyOptions:
{{#each settings.kubernetes.cpu-manager-policy-options}}
{{this}}: "true"
{{/each}}
{{/if}}
{{#if settings.kubernetes.topology-manager-scope}}
topologyManagerScope: {{settings.kubernetes.topology-manager-scope}}
{{/if}}
Expand Down
6 changes: 6 additions & 0 deletions packages/kubernetes-1.23/kubelet-config
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,12 @@ cpuManagerPolicy: {{default "none" settings.kubernetes.cpu-manager-policy}}
{{#if settings.kubernetes.cpu-manager-reconcile-period}}
cpuManagerReconcilePeriod: {{settings.kubernetes.cpu-manager-reconcile-period}}
{{/if}}
{{#if settings.kubernetes.cpu-manager-policy-options}}
cpuManagerPolicyOptions:
{{#each settings.kubernetes.cpu-manager-policy-options}}
{{this}}: "true"
{{/each}}
{{/if}}
{{#if settings.kubernetes.topology-manager-scope}}
topologyManagerScope: {{settings.kubernetes.topology-manager-scope}}
{{/if}}
Expand Down
6 changes: 6 additions & 0 deletions packages/kubernetes-1.24/kubelet-config
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,12 @@ cpuManagerPolicy: {{default "none" settings.kubernetes.cpu-manager-policy}}
{{#if settings.kubernetes.cpu-manager-reconcile-period}}
cpuManagerReconcilePeriod: {{settings.kubernetes.cpu-manager-reconcile-period}}
{{/if}}
{{#if settings.kubernetes.cpu-manager-policy-options}}
cpuManagerPolicyOptions:
{{#each settings.kubernetes.cpu-manager-policy-options}}
{{this}}: "true"
{{/each}}
{{/if}}
{{#if settings.kubernetes.topology-manager-scope}}
topologyManagerScope: {{settings.kubernetes.topology-manager-scope}}
{{/if}}
Expand Down
6 changes: 6 additions & 0 deletions packages/kubernetes-1.25/kubelet-config
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,12 @@ cpuManagerPolicy: {{default "none" settings.kubernetes.cpu-manager-policy}}
{{#if settings.kubernetes.cpu-manager-reconcile-period}}
cpuManagerReconcilePeriod: {{settings.kubernetes.cpu-manager-reconcile-period}}
{{/if}}
{{#if settings.kubernetes.cpu-manager-policy-options}}
cpuManagerPolicyOptions:
{{#each settings.kubernetes.cpu-manager-policy-options}}
{{this}}: "true"
{{/each}}
{{/if}}
{{#if settings.kubernetes.topology-manager-scope}}
topologyManagerScope: {{settings.kubernetes.topology-manager-scope}}
{{/if}}
Expand Down
6 changes: 6 additions & 0 deletions packages/kubernetes-1.26/kubelet-config
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,12 @@ cpuManagerPolicy: {{default "none" settings.kubernetes.cpu-manager-policy}}
{{#if settings.kubernetes.cpu-manager-reconcile-period}}
cpuManagerReconcilePeriod: {{settings.kubernetes.cpu-manager-reconcile-period}}
{{/if}}
{{#if settings.kubernetes.cpu-manager-policy-options}}
cpuManagerPolicyOptions:
{{#each settings.kubernetes.cpu-manager-policy-options}}
{{this}}: "true"
{{/each}}
{{/if}}
{{#if settings.kubernetes.topology-manager-scope}}
topologyManagerScope: {{settings.kubernetes.topology-manager-scope}}
{{/if}}
Expand Down
7 changes: 7 additions & 0 deletions sources/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions sources/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ members = [
"api/migration/migrations/v1.13.4/add-hostname-override",
"api/migration/migrations/v1.13.4/add-hostname-override-metadata",
"api/migration/migrations/v1.14.0/kubernetes-gc-percent-type-change",
"api/migration/migrations/v1.14.0/kubelet-config-settings",

"bottlerocket-release",

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[package]
name = "kubelet-config-settings"
version = "0.1.0"
authors = ["Sean McGinnis <[email protected]>"]
license = "Apache-2.0 OR MIT"
edition = "2021"
publish = false
# Don't rebuild crate just because of changes to README.
exclude = ["README.md"]

[dependencies]
migration-helpers = { path = "../../../migration-helpers", version = "0.1.0"}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
use migration_helpers::{common_migrations::AddSettingsMigration, migrate, Result};
use std::process;

/// Additional `settings.kubernetes` options for this release.
fn run() -> Result<()> {
migrate(AddSettingsMigration(&[
"settings.kubernetes.cpu-manager-policy-options",
]))
}

// Returning a Result from main makes it print a Debug representation of the error, but with Snafu
// we have nice Display representations of the error, so we wrap "main" (run) and print any error.
// https://github.com/shepmaster/snafu/issues/110
fn main() {
if let Err(e) = run() {
eprintln!("{}", e);
process::exit(1);
}
}
2 changes: 2 additions & 0 deletions sources/models/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@ mod variant;
// The "de" module contains custom deserialization trait implementation for models.
mod de;

use modeled_types::KubernetesCPUManagerPolicyOption;
pub use variant::*;

// Types used to communicate between client and server for 'apiclient exec'.
Expand Down Expand Up @@ -243,6 +244,7 @@ struct KubernetesSettings {
container_log_max_files: i32,
cpu_manager_policy: CpuManagerPolicy,
cpu_manager_reconcile_period: KubernetesDurationValue,
cpu_manager_policy_options: Vec<KubernetesCPUManagerPolicyOption>,
topology_manager_scope: TopologyManagerScope,
topology_manager_policy: TopologyManagerPolicy,
pod_pids_limit: i64,
Expand Down
30 changes: 30 additions & 0 deletions sources/models/src/modeled_types/kubernetes.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use lazy_static::lazy_static;
use regex::Regex;
use scalar_derive::Scalar;
use serde::{Deserialize, Deserializer, Serialize, Serializer};
// Just need serde's Error in scope to get its trait methods
use super::error;
Expand Down Expand Up @@ -1328,3 +1329,32 @@ pub struct CredentialProvider {
cache_duration: Option<KubernetesDurationValue>,
environment: Option<EnvVarMap>,
}

// =^..^= =^..^= =^..^= =^..^= =^..^= =^..^= =^..^= =^..^= =^..^=

/// KubernetesCPUManagerPolicyOption values are the possible option names for the cpuManagerPolicyOptions.
#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, Deserialize, Scalar)]
pub enum KubernetesCPUManagerPolicyOption {
#[serde(rename = "full-pcpus-only")]
FullPCPUsOnly,
}

#[cfg(test)]
mod test_kubernetes_cpu_manager_policy_option {
use super::KubernetesCPUManagerPolicyOption;
use std::convert::TryFrom;

#[test]
fn good_cpu_manager_policy_option() {
for ok in &["full-pcpus-only"] {
KubernetesCPUManagerPolicyOption::try_from(*ok).unwrap();
}
}

#[test]
fn bad_cpu_manager_policy_option() {
for err in &["fullPCPUSOnly", "", "align-by-socket"] {
KubernetesCPUManagerPolicyOption::try_from(*err).unwrap_err();
}
}
}

0 comments on commit b1f7b44

Please sign in to comment.