Skip to content

Commit

Permalink
chore: Release v0.30.0 (#4524)
Browse files Browse the repository at this point in the history
Co-authored-by: StableRelease <StableRelease@users.noreply.github.com>
  • Loading branch information
github-actions[bot] and StableRelease committed Aug 31, 2023
1 parent 637a642 commit c7f16da
Show file tree
Hide file tree
Showing 86 changed files with 9,011 additions and 5,064 deletions.
4 changes: 2 additions & 2 deletions charts/karpenter-crd/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ apiVersion: v2
name: karpenter-crd
description: A Helm chart for Karpenter Custom Resource Definitions (CRDs)
type: application
version: 0.30.0-rc.0
appVersion: 0.30.0-rc.0
version: 0.30.0
appVersion: 0.30.0
keywords:
- cluster
- node
Expand Down
4 changes: 2 additions & 2 deletions charts/karpenter/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ apiVersion: v2
name: karpenter
description: A Helm chart for Karpenter, an open-source node provisioning project built for Kubernetes.
type: application
version: 0.30.0-rc.0
appVersion: 0.30.0-rc.0
version: 0.30.0
appVersion: 0.30.0
keywords:
- cluster
- node
Expand Down
8 changes: 4 additions & 4 deletions charts/karpenter/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

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

![Version: 0.30.0-rc.0](https://img.shields.io/badge/Version-0.30.0--rc.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.30.0-rc.0](https://img.shields.io/badge/AppVersion-0.30.0--rc.0-informational?style=flat-square)
![Version: 0.30.0](https://img.shields.io/badge/Version-0.30.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.30.0](https://img.shields.io/badge/AppVersion-0.30.0-informational?style=flat-square)

## Documentation

Expand All @@ -15,7 +15,7 @@ You can follow the detailed installation instruction in the [documentation](http
```bash
helm upgrade --install --namespace karpenter --create-namespace \
karpenter oci://public.ecr.aws/karpenter/karpenter \
--version v0.30.0-rc.0 \
--version v0.30.0 \
--set serviceAccount.annotations.eks\.amazonaws\.com/role-arn=${KARPENTER_IAM_ROLE_ARN} \
--set settings.aws.clusterName=${CLUSTER_NAME} \
--set settings.aws.clusterEndpoint=${CLUSTER_ENDPOINT} \
Expand All @@ -37,9 +37,9 @@ helm upgrade --install --namespace karpenter --create-namespace \
| controller.errorOutputPaths | list | `["stderr"]` | Controller errorOutputPaths - default to stderr only |
| controller.extraVolumeMounts | list | `[]` | Additional volumeMounts for the controller pod. |
| controller.healthProbe.port | int | `8081` | The container port to use for http health probe. |
| controller.image.digest | string | `"sha256:06f08a2c9b5125a2da57936a5ccfb54e5796677e247fb0bb960e70e79242a147"` | SHA256 digest of the controller image. |
| controller.image.digest | string | `"sha256:3d436ece23d17263edbaa2314281f3ac1c2b0d3fb9dfa531cb30509659d8a7c3"` | SHA256 digest of the controller image. |
| controller.image.repository | string | `"public.ecr.aws/karpenter/controller"` | Repository path to the controller image. |
| controller.image.tag | string | `"v0.30.0-rc.0"` | Tag of the controller image. |
| controller.image.tag | string | `"v0.30.0"` | Tag of the controller image. |
| controller.logEncoding | string | `""` | Controller log encoding, defaults to the global log encoding |
| controller.logLevel | string | `""` | Controller log level, defaults to the global log level |
| controller.metrics.port | int | `8000` | The container port to use for metrics. |
Expand Down
4 changes: 2 additions & 2 deletions charts/karpenter/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,9 @@ controller:
# -- Repository path to the controller image.
repository: public.ecr.aws/karpenter/controller
# -- Tag of the controller image.
tag: v0.30.0-rc.0
tag: v0.30.0
# -- SHA256 digest of the controller image.
digest: sha256:06f08a2c9b5125a2da57936a5ccfb54e5796677e247fb0bb960e70e79242a147
digest: sha256:3d436ece23d17263edbaa2314281f3ac1c2b0d3fb9dfa531cb30509659d8a7c3
# -- Additional environment variables for the controller pod.
env: []
# - name: AWS_REGION
Expand Down
4 changes: 2 additions & 2 deletions website/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,12 @@ params:
url: 'https://slack.k8s.io/'
icon: fab fa-slack
desc: 'Chat with us on Slack in the #aws-provider channel'
latest_release_version: v0.29.2
latest_release_version: v0.30.0
versions:
- v0.30
- v0.29
- v0.28
- v0.27
- v0.30.0-rc
- preview
menu:
main:
Expand Down
80 changes: 41 additions & 39 deletions website/content/en/docs/concepts/deprovisioning.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ There are both automated and manual ways of deprovisioning nodes provisioned by
* **Consolidation**: Karpenter works to actively reduce cluster cost by identifying when:
* Nodes can be removed as their workloads will run on other nodes in the cluster.
* Nodes can be replaced with cheaper variants due to a change in the workloads.
* **Drift**: Karpenter will annotate nodes as drifted and deprovision nodes that have drifted from their desired specification. See [Drift]({{<ref "./deprovisioning/#drift" >}}) to see which fields are considered.
* **Drift**: Karpenter will annotate nodes as drifted and deprovision nodes that have drifted from their desired specification. See [Drift]({{<ref "./deprovisioning/#drift" >}}) to see which fields are considered.
* **Interruption**: If enabled, Karpenter will watch for upcoming involuntary interruption events that could affect your nodes (health events, spot interruption, etc.) and will cordon, drain, and terminate the node(s) ahead of the event to reduce workload disruption.

{{% alert title="Note" color="primary" %}}
Expand Down Expand Up @@ -142,44 +142,46 @@ data:

## Drift

Karpenter Drift will classify each CRD field as a (1) Static, (2) Dynamic, or (3) Behavioral field and will treat them differently. Static Drift will be a one-way reconciliation, triggered only by CRD changes. Dynamic Drift will be a two-way reconciliation, triggered by machine/node/instance changes and Provisioner or AWSNodetemplate changes.

1. For Static Fields, values in the CRDs are reflected in the machine in the same way that they’re set. A machine will be detected as drifted if the values in the CRDs do not match the values in the machine.

2. Dynamic Fields can correspond to multiple values and must be handled differently. Dynamic fields can create cases where drift occurs without changes to CRDs, or where CRD changes do not result in drift. For example, if a machine has `node.kubernetes.io/instance-type: m5.large`, and requirements change from `node.kubernetes.io/instance-type In [m5.large]` to `node.kubernetes.io/instance-type In [m5.large, m5.2xlarge]`, the machine will not be drifted because it's value is still compatible with the new requirements. Conversely, for an AWS Installation, if a machine is using a machine image `ami: ami-abc`, but a new image is published, Karpenter's `AWSNodeTemplate.amiSelector` will discover that the new correct value is `ami: ami-xyz`, and detect the machine as drifted.

3. Behavioral Fields are treated as over-arching settings on the Provisioner to dictate how Karpenter behaves. These fields don’t correspond to settings on the machine or instance. They’re set by the user to control Karpenter’s Provisioning and Deprovisioning logic. Since these don’t map to a desired state of machines, these fields will not be considered for Drift.

Read the [Drift Design](https://github.com/aws/karpenter-core/pull/366/files) for more.

|Provisioner Fields | Static | Dynamic | Behavioral | Implemented |
|----------------------------| :---: | :---: | :---: | :---: |
| Startup Taints | x | | | |
| Taints | x | | | |
| Labels | x | | | |
| Annotations | x | | | |
| Node Requirements | | x | | |
| Kubelet Configuration | x | | | |
| Weight | | | x | NA |
| Limits | | | x | NA |
| Consolidation | | | x | NA |
| TTLSecondsUntilExpired | | | x | NA |
| TTLSecondsAfterEmpty | | | x | NA |


|AWSNodeTemplate Fields | Static | Dynamic | Behavioral | Implemented |
|----------------------------| :---: | :---: | :---: | :---: |
| Subnet Selector | | x | | x |
| Security Group Selector | | x | | x |
| Instance Profile | x | | | |
| AMI Family/AMI Selector | | x | | x |
| UserData | x | | | |
| Tags | x | | | |
| Metadata Options | x | | | |
| Block Device Mappings | x | | | |
| Detailed Monitoring | x | | | |
| | | | | |

Drift on most fields are only triggered by changes to the owning CustomResource. Some special cases will be reconciled two-ways, triggered by Machine/Node/Instance changes or Provisioner/AWSNodeTemplate changes. For one-way reconciliation, values in the CustomResource are reflected in the Machine in the same way that they’re set. A machine will be detected as drifted if the values in the CRDs do not match the values in the Machine. By default, fields are drifted using one-way reconciliation.

### Two-way Reconciliation
Two-way reconciliation can correspond to multiple values and must be handled differently. Two-way reconciliation can create cases where drift occurs without changes to CRDs, or where CRD changes do not result in drift. For example, if a machine has `node.kubernetes.io/instance-type: m5.large`, and requirements change from `node.kubernetes.io/instance-type In [m5.large]` to `node.kubernetes.io/instance-type In [m5.large, m5.2xlarge]`, the machine will not be drifted because its value is still compatible with the new requirements. Conversely, for an AWS Installation, if a machine is using a machine image `ami: ami-abc`, but a new image is published, Karpenter's `AWSNodeTemplate.amiSelector` will discover that the new correct value is `ami: ami-xyz`, and detect the machine as drifted.

### Behavioral Fields
Behavioral Fields are treated as over-arching settings on the Provisioner to dictate how Karpenter behaves. These fields don’t correspond to settings on the machine or instance. They’re set by the user to control Karpenter’s Provisioning and Deprovisioning logic. Since these don’t map to a desired state of machines, __behavioral fields are not considered for Drift__.

Read the [Drift Design](https://github.com/aws/karpenter-core/blob/main/designs/drift.md) for more.

#### Provisioner
| Fields | One-way | Two-way |
|----------------------------| :---: | :---: |
| Startup Taints | x | |
| Taints | x | |
| Labels | x | |
| Annotations | x | |
| Node Requirements | | x |
| Kubelet Configuration | x | |

__Behavioral Fields__
- Weight
- Limits
- Consolidation
- TTLSecondsUntilExpired
- TTLSecondsAfterEmpty
---
#### AWSNodeTemplate
| Fields | One-way | Two-way |
|----------------------------| :---: | :---: |
| Subnet Selector | | x |
| Security Group Selector | | x |
| Instance Profile | x | |
| AMI Family | x | |
| AMI Selector | | x |
| UserData | x | |
| Tags | x | |
| Metadata Options | x | |
| Block Device Mappings | x | |
| Detailed Monitoring | x | |

To enable the drift feature flag, refer to the [Settings Feature Gates]({{<ref "./settings#feature-gates" >}}).

Expand Down

0 comments on commit c7f16da

Please sign in to comment.