Skip to content

Commit 7a4d495

Browse files
github-actions[bot]StableReleaseSarthug99
authored
chore: Release v1.9.0 (#8938)
Co-authored-by: StableRelease <StableRelease@users.noreply.github.com> Co-authored-by: Sarthak Umarani <sarthnu@amazon.com>
1 parent e7e1327 commit 7a4d495

File tree

98 files changed

+48085
-32672
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

98 files changed

+48085
-32672
lines changed

charts/karpenter-crd/Chart.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ apiVersion: v2
22
name: karpenter-crd
33
description: A Helm chart for Karpenter Custom Resource Definitions (CRDs).
44
type: application
5-
version: 1.8.1
6-
appVersion: 1.8.1
5+
version: 1.9.0
6+
appVersion: 1.9.0
77
keywords:
88
- cluster
99
- node

charts/karpenter/Chart.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ apiVersion: v2
22
name: karpenter
33
description: A Helm chart for Karpenter, an open-source node provisioning project built for Kubernetes.
44
type: application
5-
version: 1.8.1
6-
appVersion: 1.8.1
5+
version: 1.9.0
6+
appVersion: 1.9.0
77
keywords:
88
- cluster
99
- node

charts/karpenter/README.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
A Helm chart for Karpenter, an open-source node provisioning project built for Kubernetes.
44

5-
![Version: 1.8.1](https://img.shields.io/badge/Version-1.8.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.8.1](https://img.shields.io/badge/AppVersion-1.8.1-informational?style=flat-square)
5+
![Version: 1.9.0](https://img.shields.io/badge/Version-1.9.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.9.0](https://img.shields.io/badge/AppVersion-1.9.0-informational?style=flat-square)
66

77
## Documentation
88

@@ -15,7 +15,7 @@ You can follow the detailed installation instruction in the [documentation](http
1515
```bash
1616
helm upgrade --install --namespace karpenter --create-namespace \
1717
karpenter oci://public.ecr.aws/karpenter/karpenter \
18-
--version 1.8.1 \
18+
--version 1.9.0 \
1919
--set "serviceAccount.annotations.eks\.amazonaws\.com/role-arn=${KARPENTER_IAM_ROLE_ARN}" \
2020
--set settings.clusterName=${CLUSTER_NAME} \
2121
--set settings.interruptionQueue=${CLUSTER_NAME} \
@@ -27,13 +27,13 @@ helm upgrade --install --namespace karpenter --create-namespace \
2727
As the OCI Helm chart is signed by [Cosign](https://github.com/sigstore/cosign) as part of the release process you can verify the chart before installing it by running the following command.
2828

2929
```shell
30-
cosign verify public.ecr.aws/karpenter/karpenter:1.8.1 \
30+
cosign verify public.ecr.aws/karpenter/karpenter:1.9.0 \
3131
--certificate-oidc-issuer=https://token.actions.githubusercontent.com \
3232
--certificate-identity-regexp='https://github\.com/aws/karpenter-provider-aws/\.github/workflows/release\.yaml@.+' \
3333
--certificate-github-workflow-repository=aws/karpenter-provider-aws \
3434
--certificate-github-workflow-name=Release \
35-
--certificate-github-workflow-ref=refs/tags/v1.8.1 \
36-
--annotations version=1.8.1
35+
--certificate-github-workflow-ref=refs/tags/v1.9.0 \
36+
--annotations version=1.9.0
3737
```
3838

3939
## Values
@@ -49,9 +49,9 @@ cosign verify public.ecr.aws/karpenter/karpenter:1.8.1 \
4949
| controller.envFrom | list | `[]` | |
5050
| controller.extraVolumeMounts | list | `[]` | Additional volumeMounts for the controller container. |
5151
| controller.healthProbe.port | int | `8081` | The container port to use for http health probe. |
52-
| controller.image.digest | string | `"sha256:41c28a606cbad86869384ff8ae8345203b63f81612b6fcfd2e136197dccc03ef"` | SHA256 digest of the controller image. |
52+
| controller.image.digest | string | `"sha256:30a506c64fbb1d8026cbfd9a1d662be3ab6e33a7999290a104085d78b49a69d7"` | SHA256 digest of the controller image. |
5353
| controller.image.repository | string | `"public.ecr.aws/karpenter/controller"` | Repository path to the controller image. |
54-
| controller.image.tag | string | `"1.8.1"` | Tag of the controller image. |
54+
| controller.image.tag | string | `"1.9.0"` | Tag of the controller image. |
5555
| controller.metrics.port | int | `8080` | The container port to use for metrics. |
5656
| controller.resources | object | `{}` | Resources for the controller container. |
5757
| controller.securityContext.appArmorProfile | object | `{}` | AppArmor profile for the controller container. |
@@ -90,7 +90,7 @@ cosign verify public.ecr.aws/karpenter/karpenter:1.8.1 \
9090
| serviceMonitor.endpointConfig | object | `{}` | Configuration on `http-metrics` endpoint for the ServiceMonitor. Not to be used to add additional endpoints. See the Prometheus operator documentation for configurable fields https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api-reference/api.md#endpoint |
9191
| serviceMonitor.metricRelabelings | list | `[]` | Metric relabelings for the `http-metrics` endpoint on the ServiceMonitor. For more details on metric relabelings, see: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs |
9292
| serviceMonitor.relabelings | list | `[]` | Relabelings for the `http-metrics` endpoint on the ServiceMonitor. For more details on relabelings, see: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config |
93-
| serviceMonitor.sampleLimit | int | `nil` | Set a sampleLimit on the ServiceMonitor. By default, no limit is set. For more information, see: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#configuration-file |
93+
| serviceMonitor.sampleLimit | string | `nil` | Specifies the sampleLimit for prometheus scrapes. Per-scrape limit on the number of scraped samples that will be accepted. If more than this number of samples are present after metric relabeling the entire scrape will be treated as failed. 0 means no limit. |
9494
| settings | object | `{"batchIdleDuration":"1s","batchMaxDuration":"10s","clusterCABundle":"","clusterEndpoint":"","clusterName":"","disableClusterStateObservability":false,"disableDryRun":false,"eksControlPlane":false,"featureGates":{"nodeOverlay":false,"nodeRepair":false,"reservedCapacity":true,"spotToSpotConsolidation":false,"staticCapacity":false},"ignoreDRARequests":true,"interruptionQueue":"","isolatedVPC":false,"minValuesPolicy":"Strict","preferencePolicy":"Respect","reservedENIs":"0","vmMemoryOverheadPercent":0.075}` | Global Settings to configure Karpenter |
9595
| settings.batchIdleDuration | string | `"1s"` | The maximum amount of time with no new ending pods that if exceeded ends the current batching window. If pods arrive faster than this time, the batching window will be extended up to the maxDuration. If they arrive slower, the pods will be batched separately. |
9696
| settings.batchMaxDuration | string | `"10s"` | The maximum length of a batch window. The longer this is, the more pods we can consider for provisioning at one time which usually results in fewer but larger nodes. |
@@ -101,7 +101,7 @@ cosign verify public.ecr.aws/karpenter/karpenter:1.8.1 \
101101
| settings.disableDryRun | bool | `false` | Disable dry run validation for EC2NodeClasses. |
102102
| settings.eksControlPlane | bool | `false` | Marking this true means that your cluster is running with an EKS control plane and Karpenter should attempt to discover cluster details from the DescribeCluster API. |
103103
| settings.featureGates | object | `{"nodeOverlay":false,"nodeRepair":false,"reservedCapacity":true,"spotToSpotConsolidation":false,"staticCapacity":false}` | Feature Gate configuration values. Feature Gates will follow the same graduation process and requirements as feature gates in Kubernetes. More information here https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/#feature-gates-for-alpha-or-beta-features. |
104-
| settings.featureGates.nodeOverlay | bool | `false` | nodeOverlay is ALPHA and is disabled by default. Setting this will allow the use of node overlay to impact scheduling decisions |
104+
| settings.featureGates.nodeOverlay | bool | `false` | nodeOverlay is ALPHA and is disabled by default. Setting this will allow the use of node overlay to impact scheduling decisions |
105105
| settings.featureGates.nodeRepair | bool | `false` | nodeRepair is ALPHA and is disabled by default. Setting this to true will enable node repair. |
106106
| settings.featureGates.reservedCapacity | bool | `true` | reservedCapacity is BETA and is enabled by default. Setting this will enable native on-demand capacity reservation support. |
107107
| settings.featureGates.spotToSpotConsolidation | bool | `false` | spotToSpotConsolidation is ALPHA and is disabled by default. Setting this to true will enable spot replacement consolidation for both single and multi-node consolidation. |

charts/karpenter/values.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,9 @@ controller:
126126
# -- Repository path to the controller image.
127127
repository: public.ecr.aws/karpenter/controller
128128
# -- Tag of the controller image.
129-
tag: 1.8.1
129+
tag: 1.9.0
130130
# -- SHA256 digest of the controller image.
131-
digest: sha256:41c28a606cbad86869384ff8ae8345203b63f81612b6fcfd2e136197dccc03ef
131+
digest: sha256:30a506c64fbb1d8026cbfd9a1d662be3ab6e33a7999290a104085d78b49a69d7
132132
# -- Additional environment variables for the controller pod.
133133
env: []
134134
# - name: AWS_REGION

hack/docs/compatibilitymatrix_gen/compatibility.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,7 @@ compatibility:
8181
- appVersion: 1.8.x
8282
minK8sVersion: 1.26
8383
maxK8sVersion: 1.34
84+
85+
- appVersion: 1.9.x
86+
minK8sVersion: 1.26
87+
maxK8sVersion: 1.35

website/content/en/docs/concepts/disruption.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,19 @@ Pod disruption budgets may be used to rate-limit application disruption.
173173
174174
### Expiration
175175
176-
A node is expired once it's lifetime exceeds the duration set on the owning NodeClaim's `spec.expireAfter` field.
176+
Expiration is a forceful disruption method that begins draining a node immediately once its lifetime exceeds the duration set on the owning NodeClaim's `spec.expireAfter` field.
177177
Changes to `spec.template.spec.expireAfter` on the owning NodePool will not update the field for existing NodeClaims - it will induce NodeClaim drift and the replacements will have the updated value.
178178
Expiration can be used, in conjunction with [`terminationGracePeriod`](#terminationgraceperiod), to enforce a maximum Node lifetime.
179179
By default, `expireAfter` is set to `720h` (30 days).
180180
181+
{{% alert title="Note" color="primary" %}}
182+
The `expireAfter` field defines the **maximum** node lifetime (upper bound), not a guaranteed minimum.
183+
Nodes can be disrupted earlier than the `expireAfter` duration by other disruption methods such as [Drift]({{<ref "#drift" >}}), [Consolidation]({{<ref "#consolidation" >}}), or [Emptiness]({{<ref "#consolidation" >}}) if their [disruption budgets]({{<ref "#nodepool-disruption-budgets" >}}) allow.
184+
For example, a NodePool with `expireAfter: 720h` (30 days) can still have nodes terminated earlier if the node becomes drifted due to an AMI update and the disruption budget permits drift-based disruptions.
185+
186+
To enforce a true maximum node lifetime that cannot be shortened by other disruption methods, use `expireAfter` in combination with carefully configured disruption budgets that limit or prevent other disruption reasons.
187+
{{% /alert %}}
188+
181189
{{% alert title="Warning" color="warning" %}}
182190
Misconfigured PDBs and pods with the `karpenter.sh/do-not-disrupt` annotation may block draining indefinitely.
183191
For this reason, it is not recommended to set `expireAfter` without also setting `terminationGracePeriod` **if** your cluster has pods with the `karpenter.sh/do-not-disrupt` annotation.

website/content/en/docs/concepts/nodeclasses.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,15 @@ max-pods = 110
527527
</powershell>
528528
```
529529

530+
### Windows2025
531+
532+
```powershell
533+
<powershell>
534+
[string]$EKSBootstrapScriptFile = "$env:ProgramFiles\Amazon\EKS\Start-EKSBootstrap.ps1"
535+
& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels="karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test" --max-pods=110' -DNSClusterIP '10.100.0.10'
536+
</powershell>
537+
```
538+
530539
### Custom
531540

532541
The `Custom` AMIFamily ships without any default userData to allow you to configure custom bootstrapping for control planes or images that don't support the default methods from the other families. For this AMIFamily, kubelet must add the taint `karpenter.sh/unregistered:NoExecute` via the `--register-with-taints` flag ([flags](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/#options)) or the KubeletConfiguration spec ([options](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1/#kubelet-config-k8s-io-v1-CredentialProviderConfig) and [docs](https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/)). Karpenter will fail to register nodes that do not have this taint.
@@ -744,6 +753,7 @@ An `alias` term can be used to select EKS-optimized AMIs. An `alias` is formatte
744753
* `bottlerocket`
745754
* `windows2019`
746755
* `windows2022`
756+
* `windows2025`
747757

748758
The version string can be set to `latest`, or pinned to a specific AMI using the format of that AMI's GitHub release tags.
749759
For example, AL2 and AL2023 use dates for their release, so they can be pinned as follows:
@@ -1055,7 +1065,7 @@ spec:
10551065
encrypted: true
10561066
```
10571067

1058-
### Windows2019/Windows2022
1068+
### Windows2019/Windows2022/Windows2025
10591069
```yaml
10601070
spec:
10611071
blockDeviceMappings:
@@ -1492,7 +1502,7 @@ This allows the container to take ownership of devices allocated to the pod via
14921502

14931503
This setting helps you enable Neuron workloads on Bottlerocket instances. See [Accelerators/GPU Resources]({{< ref "./scheduling#acceleratorsgpu-resources" >}}) for more details.
14941504

1495-
### Windows2019/Windows2022
1505+
### Windows2019/Windows2022/Windows2025
14961506

14971507
* Your UserData must be specified as PowerShell commands.
14981508
* The UserData specified will be prepended to a Karpenter managed section that will bootstrap the kubelet.

website/content/en/docs/concepts/nodeoverlays.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ spec:
3636
operator: In
3737
values: ["spot"]
3838
- key: karpenter.k8s.aws/instance-cpu
39-
operator: Gt
39+
operator: Gte
4040
values: ["32"]
4141

4242
# Price and priceAdjustment are mutually exclusive

0 commit comments

Comments
 (0)