From 47ff7ebc72e743471d7a451b6a462750eac28c15 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Fri, 24 Apr 2026 23:05:16 +0000 Subject: [PATCH 1/2] Add kubelet kubeReserved and hard eviction schema --- .../AgentPoolsCreate_CustomNodeConfig.json | 27 ++++++++++++ .../2026-03-02-preview/managedClusters.json | 42 +++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/specification/containerservice/resource-manager/Microsoft.ContainerService/aks/preview/2026-03-02-preview/examples/AgentPoolsCreate_CustomNodeConfig.json b/specification/containerservice/resource-manager/Microsoft.ContainerService/aks/preview/2026-03-02-preview/examples/AgentPoolsCreate_CustomNodeConfig.json index efa5b8645eb1..1f49e977b142 100644 --- a/specification/containerservice/resource-manager/Microsoft.ContainerService/aks/preview/2026-03-02-preview/examples/AgentPoolsCreate_CustomNodeConfig.json +++ b/specification/containerservice/resource-manager/Microsoft.ContainerService/aks/preview/2026-03-02-preview/examples/AgentPoolsCreate_CustomNodeConfig.json @@ -14,8 +14,17 @@ "cpuCfsQuotaPeriod": "200ms", "cpuManagerPolicy": "static", "failSwapOn": false, + "hardEvictionThreshold": { + "memoryAvailable": "500Mi", + "nodeFsAvailable": "15%", + "nodeFsInodesFree": "10%" + }, "imageGcHighThreshold": 90, "imageGcLowThreshold": 70, + "kubeReserved": { + "cpuMillicores": 200, + "memoryMB": 1024 + }, "topologyManagerPolicy": "best-effort" }, "linuxOSConfig": { @@ -56,8 +65,17 @@ "cpuCfsQuotaPeriod": "200ms", "cpuManagerPolicy": "static", "failSwapOn": false, + "hardEvictionThreshold": { + "memoryAvailable": "500Mi", + "nodeFsAvailable": "15%", + "nodeFsInodesFree": "10%" + }, "imageGcHighThreshold": 90, "imageGcLowThreshold": 70, + "kubeReserved": { + "cpuMillicores": 200, + "memoryMB": 1024 + }, "seccompDefault": "Unconfined", "topologyManagerPolicy": "best-effort" }, @@ -97,8 +115,17 @@ "cpuCfsQuotaPeriod": "200ms", "cpuManagerPolicy": "static", "failSwapOn": false, + "hardEvictionThreshold": { + "memoryAvailable": "500Mi", + "nodeFsAvailable": "15%", + "nodeFsInodesFree": "10%" + }, "imageGcHighThreshold": 90, "imageGcLowThreshold": 70, + "kubeReserved": { + "cpuMillicores": 200, + "memoryMB": 1024 + }, "podMaxPids": 100, "topologyManagerPolicy": "best-effort" }, diff --git a/specification/containerservice/resource-manager/Microsoft.ContainerService/aks/preview/2026-03-02-preview/managedClusters.json b/specification/containerservice/resource-manager/Microsoft.ContainerService/aks/preview/2026-03-02-preview/managedClusters.json index 1f7127bbe070..15208508e5ce 100644 --- a/specification/containerservice/resource-manager/Microsoft.ContainerService/aks/preview/2026-03-02-preview/managedClusters.json +++ b/specification/containerservice/resource-manager/Microsoft.ContainerService/aks/preview/2026-03-02-preview/managedClusters.json @@ -8836,6 +8836,48 @@ "seccompDefault": { "$ref": "#/definitions/SeccompDefault", "description": "Specifies the default seccomp profile applied to all workloads. If not specified, 'Unconfined' will be used by default." + }, + "kubeReserved": { + "$ref": "#/definitions/KubeReserved", + "description": "Custom kube-reserved values for kubelet. When a resource is not set, the system-computed default based on VM size is used." + }, + "hardEvictionThreshold": { + "$ref": "#/definitions/HardEvictionThreshold", + "description": "Custom hard eviction thresholds for kubelet. When a signal is not set, the system default is used." + } + } + }, + "KubeReserved": { + "type": "object", + "description": "Custom kube-reserved values for kubelet. When a resource is not set, the system-computed default based on VM size is used.", + "properties": { + "cpuMillicores": { + "type": "integer", + "format": "int32", + "description": "CPU reservation for kubelet in millicores." + }, + "memoryMB": { + "type": "integer", + "format": "int32", + "description": "Memory reservation for kubelet in megabytes." + } + } + }, + "HardEvictionThreshold": { + "type": "object", + "description": "Custom hard eviction thresholds for kubelet. When a signal is not set, the system default is used.", + "properties": { + "memoryAvailable": { + "type": "string", + "description": "Eviction threshold for available memory, for example '500Mi'." + }, + "nodeFsAvailable": { + "type": "string", + "description": "Eviction threshold for available node filesystem space, for example '10%'." + }, + "nodeFsInodesFree": { + "type": "string", + "description": "Eviction threshold for free node filesystem inodes, for example '5%'." } } }, From b84101bb08bea3bfd92216edd966195f3d34c60d Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Fri, 24 Apr 2026 23:20:39 +0000 Subject: [PATCH 2/2] Sync kubelet descriptions from private swagger --- .../2026-03-02-preview/managedClusters.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/specification/containerservice/resource-manager/Microsoft.ContainerService/aks/preview/2026-03-02-preview/managedClusters.json b/specification/containerservice/resource-manager/Microsoft.ContainerService/aks/preview/2026-03-02-preview/managedClusters.json index 15208508e5ce..92d6bd69104c 100644 --- a/specification/containerservice/resource-manager/Microsoft.ContainerService/aks/preview/2026-03-02-preview/managedClusters.json +++ b/specification/containerservice/resource-manager/Microsoft.ContainerService/aks/preview/2026-03-02-preview/managedClusters.json @@ -8839,45 +8839,45 @@ }, "kubeReserved": { "$ref": "#/definitions/KubeReserved", - "description": "Custom kube-reserved values for kubelet. When a resource is not set, the system-computed default based on VM size is used." + "description": "Kube-reserved values for kubelet. When a value is not set, the system-computed default based on VM size is used. See [AKS node resource reservations](https://aka.ms/aks/nodereservations) for details on computed defaults. Only applicable for Linux nodepools." }, "hardEvictionThreshold": { "$ref": "#/definitions/HardEvictionThreshold", - "description": "Custom hard eviction thresholds for kubelet. When a signal is not set, the system default is used." + "description": "Hard eviction thresholds for kubelet. When a threshold is not set, the system default is used. See [AKS node resource reservations](https://aka.ms/aks/nodereservations) for details on computed defaults. Only applicable for Linux nodepools." } } }, "KubeReserved": { "type": "object", - "description": "Custom kube-reserved values for kubelet. When a resource is not set, the system-computed default based on VM size is used.", + "description": "Kube-reserved values for kubelet. When a value is not set, the system-computed default based on VM size is used. See [AKS node resource reservations](https://aka.ms/aks/nodereservations) for details on computed defaults. Only applicable for Linux nodepools.", "properties": { "cpuMillicores": { "type": "integer", "format": "int32", - "description": "CPU reservation for kubelet in millicores." + "description": "The amount of CPU reserved for Kubernetes system daemons, in millicores. Must be greater than or equal to 140. For example, a value of 200 means 200m (0.2 CPU cores)." }, "memoryMB": { "type": "integer", "format": "int32", - "description": "Memory reservation for kubelet in megabytes." + "description": "The amount of memory reserved for Kubernetes system daemons, in MiB. Must be greater than or equal to 750. " } } }, "HardEvictionThreshold": { "type": "object", - "description": "Custom hard eviction thresholds for kubelet. When a signal is not set, the system default is used.", + "description": "Hard eviction thresholds for kubelet. These thresholds trigger pod eviction when node resources drop below the specified values. Values must be greater than or equal to the documented minimums for each signal. Supported formats are Ki, Mi, Gi, or percentages using %.", "properties": { "memoryAvailable": { "type": "string", - "description": "Eviction threshold for available memory, for example '500Mi'." + "description": "The threshold for available memory below which pod eviction is triggered. Accepts absolute values (e.g. '500Mi') or percentage values (e.g. '5%'). Absolute values must be greater than or equal to 100Mi. Percentage values must be greater than or equal to 2%. " }, "nodeFsAvailable": { "type": "string", - "description": "Eviction threshold for available node filesystem space, for example '10%'." + "description": "The threshold for available node filesystem space below which pod eviction is triggered. Accepts absolute values (e.g. '1Gi') or percentage values (e.g. '10%'). Must be greater than or equal to the system default of 10%." }, "nodeFsInodesFree": { "type": "string", - "description": "Eviction threshold for free node filesystem inodes, for example '5%'." + "description": "The threshold for available inodes on the node filesystem below which pod eviction is triggered. Accepts absolute inode counts (e.g. '100000') or percentage values (e.g. '5%'). Percentage values must be greater than or equal to the system default of 5%." } } },