├── .github ├── ISSUE_TEMPLATE │ ├── bug.yaml │ ├── documentation.yaml │ └── feature.yaml ├── actionlint-matcher.json ├── actions │ ├── commit-status │ │ ├── end │ │ │ └── action.yaml │ │ └── start │ │ │ └── action.yaml │ ├── download-artifact │ │ └── action.yaml │ ├── e2e │ │ ├── cleanup │ │ │ └── action.yaml │ │ ├── dump-logs │ │ │ └── action.yaml │ │ ├── install-eksctl │ │ │ └── action.yaml │ │ ├── install-helm │ │ │ └── action.yaml │ │ ├── install-karpenter │ │ │ └── action.yaml │ │ ├── install-prometheus │ │ │ ├── action.yaml │ │ │ └── values.yaml │ │ ├── run-tests-private-cluster │ │ │ └── action.yaml │ │ ├── setup-cluster │ │ │ └── action.yaml │ │ ├── slack │ │ │ ├── notify │ │ │ │ └── action.yaml │ │ │ └── send-message │ │ │ │ └── action.yaml │ │ └── upgrade-crds │ │ │ └── action.yaml │ └── install-deps │ │ └── action.yaml ├── dependabot.yaml ├── pull-request-template.md ├── security-notice.md └── workflows │ ├── approval-comment.yaml │ ├── ci-test.yaml │ ├── ci.yaml │ ├── codegen.yaml │ ├── codeql-analysis.yaml │ ├── dryrun-gen-pr.yaml │ ├── dryrun-gen.yaml │ ├── e2e-cleanup.yaml │ ├── e2e-matrix-trigger.yaml │ ├── e2e-matrix.yaml │ ├── e2e-private-cluster-trigger.yaml │ ├── e2e-scale-trigger.yaml │ ├── e2e-soak-trigger.yaml │ ├── e2e-upgrade.yaml │ ├── e2e-version-compatibility-trigger.yaml │ ├── e2e.yaml │ ├── image-canary.yaml │ ├── postsubmit.yaml │ ├── release.yaml │ ├── resolve-args.yaml │ ├── resource-count.yaml │ ├── snapshot-pr.yaml │ ├── snapshot.yaml │ ├── stale.yaml │ └── sweeper.yaml ├── .gitignore ├── .gitmodules ├── .golangci.yaml ├── .ko.yaml ├── ADOPTERS.md ├── CODEOWNERS ├── CODE_OF_CONDUCT.md ├── LICENSE ├── Makefile ├── NOTICE ├── README.md ├── THIRD_PARTY_LICENSES ├── charts ├── index.yaml ├── karpenter-0.1.1.tgz ├── karpenter-0.1.2.tgz ├── karpenter-0.1.3.tgz ├── karpenter-0.10.0.tgz ├── karpenter-0.10.1.tgz ├── karpenter-0.11.0.tgz ├── karpenter-0.11.1.tgz ├── karpenter-0.12.0.tgz ├── karpenter-0.12.1.tgz ├── karpenter-0.13.0.tgz ├── karpenter-0.13.1.tgz ├── karpenter-0.13.2.tgz ├── karpenter-0.14.0-rc.0.tgz ├── karpenter-0.14.0.tgz ├── karpenter-0.15.0.tgz ├── karpenter-0.16.0.tgz ├── karpenter-0.16.1.tgz ├── karpenter-0.16.2.tgz ├── karpenter-0.16.3.tgz ├── karpenter-0.2.0.tgz ├── karpenter-0.2.1.tgz ├── karpenter-0.2.2.tgz ├── karpenter-0.2.3.tgz ├── karpenter-0.2.4.tgz ├── karpenter-0.2.5.tgz ├── karpenter-0.2.6.tgz ├── karpenter-0.2.7.tgz ├── karpenter-0.2.8.tgz ├── karpenter-0.2.9.tgz ├── karpenter-0.3.0.tgz ├── karpenter-0.3.1.tgz ├── karpenter-0.3.2.tgz ├── karpenter-0.3.3.tgz ├── karpenter-0.3.4.tgz ├── karpenter-0.4.0.tgz ├── karpenter-0.4.1.tgz ├── karpenter-0.4.2.tgz ├── karpenter-0.4.3.tgz ├── karpenter-0.5.0.tgz ├── karpenter-0.5.1.tgz ├── karpenter-0.5.2.tgz ├── karpenter-0.5.3.tgz ├── karpenter-0.5.4.tgz ├── karpenter-0.5.5.tgz ├── karpenter-0.5.6.tgz ├── karpenter-0.6.0.tgz ├── karpenter-0.6.1.tgz ├── karpenter-0.6.2.tgz ├── karpenter-0.6.3.tgz ├── karpenter-0.6.4.tgz ├── karpenter-0.6.5.tgz ├── karpenter-0.7.0.tgz ├── karpenter-0.7.1.tgz ├── karpenter-0.7.2.tgz ├── karpenter-0.7.3.tgz ├── karpenter-0.8.0.tgz ├── karpenter-0.8.1.tgz ├── karpenter-0.8.2.tgz ├── karpenter-0.9.0-rc.0.tgz ├── karpenter-0.9.0-rc.1.tgz ├── karpenter-0.9.0.tgz ├── karpenter-0.9.1.tgz ├── karpenter-crd │ ├── .helmignore │ ├── Chart.yaml │ ├── README.md │ ├── README.md.gotmpl │ ├── artifacthub-repo.yaml │ ├── templates │ │ ├── karpenter.k8s.aws_ec2nodeclasses.yaml │ │ ├── karpenter.sh_nodeclaims.yaml │ │ └── karpenter.sh_nodepools.yaml │ └── values.yaml ├── karpenter-v0-66626bc5e21dc14b2cceaaeb3ad5933c0b4e2046.tgz └── karpenter │ ├── .helmignore │ ├── Chart.lock │ ├── Chart.yaml │ ├── README.md │ ├── README.md.gotmpl │ ├── artifacthub-repo.yaml │ ├── crds │ ├── karpenter.k8s.aws_ec2nodeclasses.yaml │ ├── karpenter.sh_nodeclaims.yaml │ └── karpenter.sh_nodepools.yaml │ ├── templates │ ├── _helpers.tpl │ ├── aggregate-clusterrole.yaml │ ├── clusterrole-core.yaml │ ├── clusterrole.yaml │ ├── deployment.yaml │ ├── poddisruptionbudget.yaml │ ├── role.yaml │ ├── rolebinding.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ └── servicemonitor.yaml │ └── values.yaml ├── cmd └── controller │ ├── kodata │ ├── HEAD │ └── refs │ └── main.go ├── designs ├── ami-selector.md ├── aws-launch-templates-options.md ├── aws-launch-templates-v2.md ├── bin-packing.md ├── consolidation.md ├── custom-user-data-and-amis.md ├── deprecated-ami-observability.md ├── deprovisioning.md ├── images │ └── node_ownership_ownership_model.png ├── integration-testing.md ├── interruption-handling.md ├── limits.md ├── metrics.md ├── node-ownership.md ├── node-upgrades.md ├── odcr.md ├── provisioner-priority.md ├── runtime-defaulting.md ├── termination.md ├── unmanaged-launch-template-removal.md ├── v1-api.md ├── v1-roadmap.md ├── v1alpha4-api.md ├── v1beta1-api.md └── v1beta1-full-changelist.md ├── examples ├── README.md ├── v1 │ ├── 100-cpu-limit.yaml │ ├── al2-custom-ami.yaml │ ├── al2-custom-userdata.yaml │ ├── al2-kubelet-log-query.yaml │ ├── al2023-custom-userdata.yaml │ ├── bottlerocket.yaml │ ├── br-custom-userdata.yaml │ ├── custom-family-with-alias.yaml │ ├── custom-family.yaml │ ├── general-purpose.yaml │ ├── instance-store-ephemeral-storage.yaml │ ├── large-instances.yaml │ ├── max-node-lifetime.yaml │ ├── min-values-family.yaml │ ├── min-values-multiple-keys.yaml │ ├── multiple-arch.yaml │ ├── multiple-ebs.yaml │ ├── spot.yaml │ ├── windows-2019.yaml │ ├── windows-2022.yaml │ └── windows-custom-userdata.yaml └── workloads │ ├── arm64.yaml │ ├── disruption-budget.yaml │ ├── gpu-amd.yaml │ ├── gpu-nvidia.yaml │ ├── inflate.yaml │ ├── neuron.yaml │ ├── prefer-arm.yaml │ ├── spot.yaml │ ├── spread-hostname-zone.yaml │ ├── spread-hostname.yaml │ └── spread-zone.yaml ├── go.mod ├── go.sum ├── hack ├── boilerplate.go.txt ├── boilerplate.sh ├── code │ ├── bandwidth_gen │ │ ├── example │ │ │ └── gp.html │ │ └── main.go │ ├── instancetype_testdata_gen │ │ └── main.go │ ├── prices_gen │ │ └── main.go │ └── vpc_limits_gen │ │ └── main.go ├── codegen.sh ├── docgen.sh ├── docs │ ├── compatibilitymatrix_gen │ │ ├── compatibility.yaml │ │ └── main.go │ ├── configuration_gen │ │ └── main.go │ ├── instancetypes_gen │ │ └── main.go │ ├── metrics_gen │ │ └── main.go │ └── version_compatibility_gen │ │ └── main.go ├── github │ ├── community-contributors.sh │ ├── dependabot.sh │ ├── feature_request_reactions.py │ ├── label_issue_count.py │ └── requirements.txt ├── image_canary.sh ├── mutation │ └── crd_annotations.sh ├── release │ ├── common.sh │ ├── prepare-website.sh │ ├── release.sh │ ├── snapshot.sh │ └── stable-pr.sh ├── toolchain.sh ├── tools │ ├── allocatable_diff │ │ ├── README.md │ │ └── main.go │ └── launchtemplate_counter │ │ └── main.go └── validation │ ├── kubelet.sh │ ├── labels.sh │ └── requirements.sh ├── kwok ├── Makefile ├── README.md ├── cloudprovider │ └── cloudprovider.go ├── ec2 │ ├── ec2.go │ └── ratelimiting.go ├── main.go ├── manifests │ └── clusterrole.yaml ├── operator │ └── operator.go └── strategy │ └── strategy.go ├── pkg ├── apis │ ├── apis.go │ ├── crds │ │ ├── karpenter.k8s.aws_ec2nodeclasses.yaml │ │ ├── karpenter.sh_nodeclaims.yaml │ │ └── karpenter.sh_nodepools.yaml │ └── v1 │ │ ├── doc.go │ │ ├── ec2nodeclass.go │ │ ├── ec2nodeclass_defaults.go │ │ ├── ec2nodeclass_hash_test.go │ │ ├── ec2nodeclass_status.go │ │ ├── ec2nodeclass_validation_cel_test.go │ │ ├── labels.go │ │ ├── nodepool_validation_cel_test.go │ │ ├── suite_test.go │ │ └── zz_generated.deepcopy.go ├── aws │ └── sdk.go ├── batcher │ ├── batcher.go │ ├── createfleet.go │ ├── createfleet_test.go │ ├── describeinstances.go │ ├── describeinstances_test.go │ ├── ec2api.go │ ├── metrics.go │ ├── suite_test.go │ ├── terminateinstances.go │ └── terminateinstances_test.go ├── cache │ ├── cache.go │ └── unavailableofferings.go ├── cloudprovider │ ├── cloudprovider.go │ ├── drift.go │ ├── events │ │ └── events.go │ └── suite_test.go ├── controllers │ ├── controllers.go │ ├── interruption │ │ ├── controller.go │ │ ├── events │ │ │ └── events.go │ │ ├── interruption_benchmark_test.go │ │ ├── messages │ │ │ ├── noop │ │ │ │ └── model.go │ │ │ ├── rebalancerecommendation │ │ │ │ ├── model.go │ │ │ │ └── parser.go │ │ │ ├── scheduledchange │ │ │ │ ├── model.go │ │ │ │ └── parser.go │ │ │ ├── spotinterruption │ │ │ │ ├── model.go │ │ │ │ └── parser.go │ │ │ ├── statechange │ │ │ │ ├── model.go │ │ │ │ └── parser.go │ │ │ └── types.go │ │ ├── metrics.go │ │ ├── parser.go │ │ └── suite_test.go │ ├── metrics │ │ ├── controller.go │ │ ├── metrics.go │ │ └── suite_test.go │ ├── nodeclaim │ │ ├── capacityreservation │ │ │ ├── controller.go │ │ │ └── suite_test.go │ │ ├── garbagecollection │ │ │ ├── controller.go │ │ │ └── suite_test.go │ │ └── tagging │ │ │ ├── controller.go │ │ │ └── suite_test.go │ ├── nodeclass │ │ ├── ami.go │ │ ├── ami_test.go │ │ ├── capacityreservation.go │ │ ├── capacityreservation_test.go │ │ ├── controller.go │ │ ├── events.go │ │ ├── hash │ │ │ ├── controller.go │ │ │ └── suite_test.go │ │ ├── instanceprofile.go │ │ ├── instanceprofile_test.go │ │ ├── launchtemplate_test.go │ │ ├── readiness.go │ │ ├── readiness_test.go │ │ ├── securitygroup.go │ │ ├── securitygroup_test.go │ │ ├── subnet.go │ │ ├── subnet_test.go │ │ ├── suite_test.go │ │ ├── validation.go │ │ └── validation_test.go │ └── providers │ │ ├── instancetype │ │ ├── capacity │ │ │ ├── controller.go │ │ │ └── suite_test.go │ │ ├── controller.go │ │ └── suite_test.go │ │ ├── pricing │ │ ├── controller.go │ │ └── suite_test.go │ │ ├── ssm │ │ └── invalidation │ │ │ ├── controller.go │ │ │ └── suite_test.go │ │ └── version │ │ ├── controller.go │ │ └── suite_test.go ├── errors │ └── errors.go ├── fake │ ├── atomic.go │ ├── cloudprovider.go │ ├── ec2api.go │ ├── eksapi.go │ ├── iamapi.go │ ├── pricingapi.go │ ├── sqsapi.go │ ├── ssmapi.go │ ├── types.go │ ├── utils.go │ └── zz_generated.describe_instance_types.go ├── operator │ ├── operator.go │ ├── options │ │ ├── options.go │ │ ├── options_validation.go │ │ └── suite_test.go │ └── suite_test.go ├── providers │ ├── amifamily │ │ ├── al2.go │ │ ├── al2023.go │ │ ├── ami.go │ │ ├── bootstrap │ │ │ ├── bootstrap.go │ │ │ ├── bottlerocket.go │ │ │ ├── bottlerocketsettings.go │ │ │ ├── custom.go │ │ │ ├── eksbootstrap.go │ │ │ ├── mime │ │ │ │ ├── mime.go │ │ │ │ ├── suite_test.go │ │ │ │ └── test_data │ │ │ │ │ ├── mime_bad_header.txt │ │ │ │ │ ├── mime_valid.txt │ │ │ │ │ ├── nodeconfig.txt │ │ │ │ │ └── shell.txt │ │ │ ├── nodeadm.go │ │ │ └── windows.go │ │ ├── bottlerocket.go │ │ ├── custom.go │ │ ├── resolver.go │ │ ├── suite_test.go │ │ ├── types.go │ │ └── windows.go │ ├── capacityreservation │ │ ├── provider.go │ │ ├── suite_test.go │ │ └── types.go │ ├── instance │ │ ├── events.go │ │ ├── filter │ │ │ ├── filter.go │ │ │ └── filter_test.go │ │ ├── instance.go │ │ ├── suite_test.go │ │ └── types.go │ ├── instanceprofile │ │ ├── instanceprofile.go │ │ └── suite_test.go │ ├── instancetype │ │ ├── instancetype.go │ │ ├── metrics.go │ │ ├── offering │ │ │ └── offering.go │ │ ├── suite_test.go │ │ ├── types.go │ │ ├── zz_generated.bandwidth.go │ │ └── zz_generated.vpclimits.go │ ├── launchtemplate │ │ ├── launchtemplate.go │ │ ├── suite_test.go │ │ └── testdata │ │ │ ├── al2023_mime_userdata_input.golden │ │ │ ├── al2023_mime_userdata_merged.golden │ │ │ ├── al2023_shell_userdata_input.golden │ │ │ ├── al2023_shell_userdata_merged.golden │ │ │ ├── al2023_userdata_unmerged.golden │ │ │ ├── al2023_yaml_userdata_input.golden │ │ │ ├── al2023_yaml_userdata_merged.golden │ │ │ ├── al2_no_mime_userdata_input.golden │ │ │ ├── al2_userdata_content_type_first_input.golden │ │ │ ├── al2_userdata_input.golden │ │ │ ├── al2_userdata_merged.golden │ │ │ ├── al2_userdata_unmerged.golden │ │ │ ├── br_userdata_input.golden │ │ │ ├── br_userdata_merged.golden │ │ │ ├── br_userdata_unmerged.golden │ │ │ ├── windows_userdata_input.golden │ │ │ ├── windows_userdata_merged.golden │ │ │ └── windows_userdata_unmerged.golden │ ├── pricing │ │ ├── pricing.go │ │ ├── zz_generated.pricing_aws.go │ │ ├── zz_generated.pricing_aws_cn.go │ │ └── zz_generated.pricing_aws_us_gov.go │ ├── securitygroup │ │ ├── securitygroup.go │ │ └── suite_test.go │ ├── sqs │ │ └── sqs.go │ ├── ssm │ │ ├── provider.go │ │ └── types.go │ ├── subnet │ │ ├── subnet.go │ │ └── suite_test.go │ └── version │ │ ├── suite_test.go │ │ └── version.go ├── test │ ├── environment.go │ ├── nodeclass.go │ ├── options.go │ └── utils.go └── utils │ └── utils.go ├── test ├── README.md ├── assets │ ├── gha_architecture.excalidraw │ └── gha_architecture.png ├── cloudformation │ ├── README.md │ ├── grafana_cloudformation.yaml │ ├── iam_cloudformation.yaml │ ├── prometheus_cloudformation.yaml │ └── timestream_cloudformation.yaml ├── hack │ ├── e2e_scripts │ │ ├── clean_private_cluster.sh │ │ ├── configure_private_cluster.sh │ │ ├── diff_karpenter.sh │ │ ├── install_helm.sh │ │ ├── install_karpenter.sh │ │ ├── install_prometheus.sh │ │ └── noderole_bootstrap_permission.sh │ ├── resource │ │ ├── clean │ │ │ └── main.go │ │ ├── count │ │ │ └── main.go │ │ ├── go.mod │ │ ├── go.sum │ │ └── pkg │ │ │ ├── metrics │ │ │ └── metrics.go │ │ │ └── resourcetypes │ │ │ ├── eni.go │ │ │ ├── instance.go │ │ │ ├── instanceprofile.go │ │ │ ├── launchtemplate.go │ │ │ ├── oidc.go │ │ │ ├── resourcetypes.go │ │ │ ├── securitygroup.go │ │ │ ├── stack.go │ │ │ ├── vpc_endpoint.go │ │ │ └── vpc_peering_connection.go │ └── soak │ │ ├── get_clusters.go │ │ ├── go.mod │ │ └── go.sum ├── pkg │ ├── debug │ │ ├── events.go │ │ ├── monitor.go │ │ ├── node.go │ │ ├── nodeclaim.go │ │ ├── pod.go │ │ └── setup.go │ └── environment │ │ ├── aws │ │ ├── default_ec2nodeclass.yaml │ │ ├── default_nodepool.yaml │ │ ├── environment.go │ │ ├── expectations.go │ │ ├── metrics.go │ │ └── setup.go │ │ └── common │ │ ├── environment.go │ │ ├── expectations.go │ │ ├── monitor.go │ │ └── setup.go └── suites │ ├── ami │ ├── suite_test.go │ └── testdata │ │ ├── al2023_userdata_input.yaml │ │ ├── al2_no_mime_userdata_input.sh │ │ ├── al2_userdata_input.sh │ │ ├── br_userdata_input.sh │ │ └── windows_userdata_input.ps1 │ ├── consolidation │ └── suite_test.go │ ├── drift │ └── suite_test.go │ ├── integration │ ├── aws_metadata_test.go │ ├── block_device_mappings_test.go │ ├── cni_test.go │ ├── extended_resources_test.go │ ├── hash_test.go │ ├── instance_profile_test.go │ ├── kubelet_config_test.go │ ├── launch_template_test.go │ ├── metrics_test.go │ ├── network_interface_test.go │ ├── nodeclass_test.go │ ├── repair_policy_test.go │ ├── security_group_test.go │ ├── subnet_test.go │ ├── suite_test.go │ ├── tags_test.go │ ├── testdata │ │ └── amd_driver_input.sh │ └── validation_test.go │ ├── interruption │ └── suite_test.go │ ├── ipv6 │ └── suite_test.go │ ├── localzone │ └── suite_test.go │ ├── nodeclaim │ └── suite_test.go │ ├── scale │ ├── deprovisioning_test.go │ ├── provisioning_test.go │ └── suite_test.go │ ├── scheduling │ └── suite_test.go │ └── storage │ └── suite_test.go ├── tools └── kompat │ ├── README.md │ ├── cmd │ └── kompat │ │ └── main.go │ ├── go.mod │ ├── go.sum │ └── pkg │ └── kompat │ └── kompat.go └── website ├── .gitignore ├── .node-version ├── archetypes └── default.md ├── assets ├── icons │ └── logo.svg ├── js │ └── search.js ├── jsconfig.json └── scss │ ├── _search.scss │ └── _variables_project.scss ├── content └── en │ ├── _index.html │ ├── background.png │ ├── docs │ ├── _index.md │ ├── concepts │ │ ├── _index.md │ │ ├── disruption.md │ │ ├── nodeclaims.md │ │ ├── nodeclasses.md │ │ ├── nodepools.md │ │ └── scheduling.md │ ├── contributing │ │ ├── _index.md │ │ ├── community-meetings.md │ │ ├── design-guide.md │ │ ├── development-guide.md │ │ └── documentation-updates.md │ ├── faq.md │ ├── getting-started │ │ ├── _index.md │ │ ├── getting-started-with-karpenter │ │ │ ├── _index.md │ │ │ ├── cloudformation.yaml │ │ │ ├── grafana-values.yaml │ │ │ ├── karpenter-capacity-dashboard.json │ │ │ ├── karpenter-controllers-allocation.json │ │ │ ├── karpenter-controllers.json │ │ │ ├── karpenter-performance-dashboard.json │ │ │ ├── prometheus-values.yaml │ │ │ └── scripts │ │ │ │ ├── step01-config.sh │ │ │ │ ├── step02-create-cluster-fargate.sh │ │ │ │ ├── step02-create-cluster.sh │ │ │ │ ├── step03-iam-cloud-formation.sh │ │ │ │ ├── step04-grant-access.sh │ │ │ │ ├── step05-controller-iam.sh │ │ │ │ ├── step06-add-spot-role.sh │ │ │ │ ├── step08-apply-helm-chart-fargate.sh │ │ │ │ ├── step08-apply-helm-chart.sh │ │ │ │ ├── step09-add-prometheus-grafana.sh │ │ │ │ ├── step10-add-grafana-port-forward.sh │ │ │ │ ├── step11-grafana-get-password.sh │ │ │ │ ├── step12-add-nodepool.sh │ │ │ │ ├── step13-automatic-node-provisioning.sh │ │ │ │ ├── step14-deprovisioning.sh │ │ │ │ ├── step15-apply-flowschemas.sh │ │ │ │ ├── step16-delete-node.sh │ │ │ │ └── step17-cleanup.sh │ │ └── migrating-from-cas │ │ │ ├── _index.md │ │ │ └── scripts │ │ │ ├── step01-env.sh │ │ │ ├── step02-node-iam.sh │ │ │ ├── step03-node-policies.sh │ │ │ ├── step04-controller-iam.sh │ │ │ ├── step05-tag-subnets.sh │ │ │ ├── step06-tag-security-groups.sh │ │ │ ├── step07-edit-aws-auth.sh │ │ │ ├── step08-generate-chart.sh │ │ │ ├── step09-deploy.sh │ │ │ ├── step10-create-nodepool.sh │ │ │ ├── step11-scale-cas.sh │ │ │ ├── step12-scale-multiple-ng.sh │ │ │ └── step12-scale-single-ng.sh │ ├── reference │ │ ├── _index.md │ │ ├── cloudformation.md │ │ ├── instance-types.md │ │ ├── metrics.md │ │ ├── settings.md │ │ └── threat-model.md │ ├── tasks │ │ ├── _index.md │ │ └── managing-amis.md │ ├── troubleshooting.md │ └── upgrading │ │ ├── _index.md │ │ ├── compatibility.md │ │ └── upgrade-guide.md │ ├── preview │ ├── _index.md │ ├── concepts │ │ ├── _index.md │ │ ├── disruption.md │ │ ├── nodeclaims.md │ │ ├── nodeclasses.md │ │ ├── nodepools.md │ │ └── scheduling.md │ ├── contributing │ │ ├── _index.md │ │ ├── community-meetings.md │ │ ├── design-guide.md │ │ ├── development-guide.md │ │ └── documentation-updates.md │ ├── faq.md │ ├── getting-started │ │ ├── _index.md │ │ ├── getting-started-with-karpenter │ │ │ ├── _index.md │ │ │ ├── cloudformation.yaml │ │ │ ├── grafana-values.yaml │ │ │ ├── karpenter-capacity-dashboard.json │ │ │ ├── karpenter-controllers-allocation.json │ │ │ ├── karpenter-controllers.json │ │ │ ├── karpenter-performance-dashboard.json │ │ │ ├── prometheus-values.yaml │ │ │ └── scripts │ │ │ │ ├── step01-config.sh │ │ │ │ ├── step02-create-cluster-fargate.sh │ │ │ │ ├── step02-create-cluster.sh │ │ │ │ ├── step03-iam-cloud-formation.sh │ │ │ │ ├── step04-grant-access.sh │ │ │ │ ├── step05-controller-iam.sh │ │ │ │ ├── step06-add-spot-role.sh │ │ │ │ ├── step08-apply-helm-chart-fargate.sh │ │ │ │ ├── step08-apply-helm-chart.sh │ │ │ │ ├── step09-add-prometheus-grafana.sh │ │ │ │ ├── step10-add-grafana-port-forward.sh │ │ │ │ ├── step11-grafana-get-password.sh │ │ │ │ ├── step12-add-nodepool.sh │ │ │ │ ├── step13-automatic-node-provisioning.sh │ │ │ │ ├── step14-deprovisioning.sh │ │ │ │ ├── step15-apply-flowschemas.sh │ │ │ │ ├── step16-delete-node.sh │ │ │ │ └── step17-cleanup.sh │ │ └── migrating-from-cas │ │ │ ├── _index.md │ │ │ └── scripts │ │ │ ├── step01-env.sh │ │ │ ├── step02-node-iam.sh │ │ │ ├── step03-node-policies.sh │ │ │ ├── step04-controller-iam.sh │ │ │ ├── step05-tag-subnets.sh │ │ │ ├── step06-tag-security-groups.sh │ │ │ ├── step07-edit-aws-auth.sh │ │ │ ├── step08-generate-chart.sh │ │ │ ├── step09-deploy.sh │ │ │ ├── step10-create-nodepool.sh │ │ │ ├── step11-scale-cas.sh │ │ │ ├── step12-scale-multiple-ng.sh │ │ │ └── step12-scale-single-ng.sh │ ├── reference │ │ ├── _index.md │ │ ├── cloudformation.md │ │ ├── instance-types.md │ │ ├── metrics.md │ │ ├── settings.md │ │ └── threat-model.md │ ├── tasks │ │ ├── _index.md │ │ └── managing-amis.md │ ├── troubleshooting.md │ └── upgrading │ │ ├── _index.md │ │ ├── compatibility.md │ │ └── upgrade-guide.md │ ├── v0.32 │ ├── _index.md │ ├── concepts │ │ ├── _index.md │ │ ├── disruption.md │ │ ├── nodeclasses.md │ │ ├── nodepools.md │ │ └── scheduling.md │ ├── contributing │ │ ├── _index.md │ │ ├── community-meetings.md │ │ ├── design-guide.md │ │ └── development-guide.md │ ├── faq.md │ ├── getting-started │ │ ├── _index.md │ │ ├── getting-started-with-karpenter │ │ │ ├── _index.md │ │ │ ├── cloudformation.yaml │ │ │ ├── grafana-values.yaml │ │ │ ├── karpenter-capacity-dashboard.json │ │ │ ├── karpenter-controllers-allocation.json │ │ │ ├── karpenter-controllers.json │ │ │ ├── karpenter-performance-dashboard.json │ │ │ ├── prometheus-values.yaml │ │ │ └── scripts │ │ │ │ ├── step01-config.sh │ │ │ │ ├── step02-create-cluster-fargate.sh │ │ │ │ ├── step02-create-cluster.sh │ │ │ │ ├── step03-iam-cloud-formation.sh │ │ │ │ ├── step04-grant-access.sh │ │ │ │ ├── step05-controller-iam.sh │ │ │ │ ├── step06-add-spot-role.sh │ │ │ │ ├── step08-apply-helm-chart.sh │ │ │ │ ├── step09-add-prometheus-grafana.sh │ │ │ │ ├── step10-add-grafana-port-forward.sh │ │ │ │ ├── step11-grafana-get-password.sh │ │ │ │ ├── step12-add-nodepool.sh │ │ │ │ ├── step13-automatic-node-provisioning.sh │ │ │ │ ├── step14-deprovisioning.sh │ │ │ │ ├── step15-apply-flowschemas.sh │ │ │ │ ├── step16-delete-node.sh │ │ │ │ └── step17-cleanup.sh │ │ └── migrating-from-cas │ │ │ ├── _index.md │ │ │ └── scripts │ │ │ ├── step01-env.sh │ │ │ ├── step02-node-iam.sh │ │ │ ├── step03-node-policies.sh │ │ │ ├── step04-controller-iam.sh │ │ │ ├── step05-tag-subnets.sh │ │ │ ├── step06-tag-security-groups.sh │ │ │ ├── step07-edit-aws-auth.sh │ │ │ ├── step08-generate-chart.sh │ │ │ ├── step09-deploy.sh │ │ │ ├── step10-create-nodepool.sh │ │ │ ├── step11-scale-cas.sh │ │ │ ├── step12-scale-multiple-ng.sh │ │ │ └── step12-scale-single-ng.sh │ ├── reference │ │ ├── _index.md │ │ ├── cloudformation.md │ │ ├── instance-types.md │ │ ├── metrics.md │ │ ├── settings.md │ │ └── threat-model.md │ ├── tasks │ │ ├── _index.md │ │ └── managing-amis.md │ ├── troubleshooting.md │ └── upgrading │ │ ├── _index.md │ │ ├── compatibility.md │ │ ├── upgrade-guide.md │ │ ├── v1beta1-controller-policy.json │ │ └── v1beta1-migration.md │ ├── v1.0 │ ├── _index.md │ ├── concepts │ │ ├── _index.md │ │ ├── disruption.md │ │ ├── nodeclaims.md │ │ ├── nodeclasses.md │ │ ├── nodepools.md │ │ └── scheduling.md │ ├── contributing │ │ ├── _index.md │ │ ├── community-meetings.md │ │ ├── design-guide.md │ │ ├── development-guide.md │ │ └── documentation-updates.md │ ├── faq.md │ ├── getting-started │ │ ├── _index.md │ │ ├── getting-started-with-karpenter │ │ │ ├── _index.md │ │ │ ├── cloudformation.yaml │ │ │ ├── grafana-values.yaml │ │ │ ├── karpenter-capacity-dashboard.json │ │ │ ├── karpenter-controllers-allocation.json │ │ │ ├── karpenter-controllers.json │ │ │ ├── karpenter-performance-dashboard.json │ │ │ ├── prometheus-values.yaml │ │ │ └── scripts │ │ │ │ ├── step01-config.sh │ │ │ │ ├── step02-create-cluster-fargate.sh │ │ │ │ ├── step02-create-cluster.sh │ │ │ │ ├── step03-iam-cloud-formation.sh │ │ │ │ ├── step04-grant-access.sh │ │ │ │ ├── step05-controller-iam.sh │ │ │ │ ├── step06-add-spot-role.sh │ │ │ │ ├── step08-apply-helm-chart-fargate.sh │ │ │ │ ├── step08-apply-helm-chart.sh │ │ │ │ ├── step09-add-prometheus-grafana.sh │ │ │ │ ├── step10-add-grafana-port-forward.sh │ │ │ │ ├── step11-grafana-get-password.sh │ │ │ │ ├── step12-add-nodepool.sh │ │ │ │ ├── step13-automatic-node-provisioning.sh │ │ │ │ ├── step14-deprovisioning.sh │ │ │ │ ├── step15-apply-flowschemas.sh │ │ │ │ ├── step16-delete-node.sh │ │ │ │ └── step17-cleanup.sh │ │ └── migrating-from-cas │ │ │ ├── _index.md │ │ │ └── scripts │ │ │ ├── step01-env.sh │ │ │ ├── step02-node-iam.sh │ │ │ ├── step03-node-policies.sh │ │ │ ├── step04-controller-iam.sh │ │ │ ├── step05-tag-subnets.sh │ │ │ ├── step06-tag-security-groups.sh │ │ │ ├── step07-edit-aws-auth.sh │ │ │ ├── step08-generate-chart.sh │ │ │ ├── step09-deploy.sh │ │ │ ├── step10-create-nodepool.sh │ │ │ ├── step11-scale-cas.sh │ │ │ ├── step12-scale-multiple-ng.sh │ │ │ └── step12-scale-single-ng.sh │ ├── reference │ │ ├── _index.md │ │ ├── cloudformation.md │ │ ├── instance-types.md │ │ ├── metrics.md │ │ ├── settings.md │ │ └── threat-model.md │ ├── tasks │ │ ├── _index.md │ │ └── managing-amis.md │ ├── troubleshooting.md │ └── upgrading │ │ ├── _index.md │ │ ├── compatibility.md │ │ ├── get-controller-policy.sh │ │ ├── upgrade-guide.md │ │ └── v1-migration.md │ ├── v1.3 │ ├── _index.md │ ├── concepts │ │ ├── _index.md │ │ ├── disruption.md │ │ ├── nodeclaims.md │ │ ├── nodeclasses.md │ │ ├── nodepools.md │ │ └── scheduling.md │ ├── contributing │ │ ├── _index.md │ │ ├── community-meetings.md │ │ ├── design-guide.md │ │ ├── development-guide.md │ │ └── documentation-updates.md │ ├── faq.md │ ├── getting-started │ │ ├── _index.md │ │ ├── getting-started-with-karpenter │ │ │ ├── _index.md │ │ │ ├── cloudformation.yaml │ │ │ ├── grafana-values.yaml │ │ │ ├── karpenter-capacity-dashboard.json │ │ │ ├── karpenter-controllers-allocation.json │ │ │ ├── karpenter-controllers.json │ │ │ ├── karpenter-performance-dashboard.json │ │ │ ├── prometheus-values.yaml │ │ │ └── scripts │ │ │ │ ├── step01-config.sh │ │ │ │ ├── step02-create-cluster-fargate.sh │ │ │ │ ├── step02-create-cluster.sh │ │ │ │ ├── step03-iam-cloud-formation.sh │ │ │ │ ├── step04-grant-access.sh │ │ │ │ ├── step05-controller-iam.sh │ │ │ │ ├── step06-add-spot-role.sh │ │ │ │ ├── step08-apply-helm-chart-fargate.sh │ │ │ │ ├── step08-apply-helm-chart.sh │ │ │ │ ├── step09-add-prometheus-grafana.sh │ │ │ │ ├── step10-add-grafana-port-forward.sh │ │ │ │ ├── step11-grafana-get-password.sh │ │ │ │ ├── step12-add-nodepool.sh │ │ │ │ ├── step13-automatic-node-provisioning.sh │ │ │ │ ├── step14-deprovisioning.sh │ │ │ │ ├── step15-apply-flowschemas.sh │ │ │ │ ├── step16-delete-node.sh │ │ │ │ └── step17-cleanup.sh │ │ └── migrating-from-cas │ │ │ ├── _index.md │ │ │ └── scripts │ │ │ ├── step01-env.sh │ │ │ ├── step02-node-iam.sh │ │ │ ├── step03-node-policies.sh │ │ │ ├── step04-controller-iam.sh │ │ │ ├── step05-tag-subnets.sh │ │ │ ├── step06-tag-security-groups.sh │ │ │ ├── step07-edit-aws-auth.sh │ │ │ ├── step08-generate-chart.sh │ │ │ ├── step09-deploy.sh │ │ │ ├── step10-create-nodepool.sh │ │ │ ├── step11-scale-cas.sh │ │ │ ├── step12-scale-multiple-ng.sh │ │ │ └── step12-scale-single-ng.sh │ ├── reference │ │ ├── _index.md │ │ ├── cloudformation.md │ │ ├── instance-types.md │ │ ├── metrics.md │ │ ├── settings.md │ │ └── threat-model.md │ ├── tasks │ │ ├── _index.md │ │ └── managing-amis.md │ ├── troubleshooting.md │ └── upgrading │ │ ├── _index.md │ │ ├── compatibility.md │ │ └── upgrade-guide.md │ ├── v1.4 │ ├── _index.md │ ├── concepts │ │ ├── _index.md │ │ ├── disruption.md │ │ ├── nodeclaims.md │ │ ├── nodeclasses.md │ │ ├── nodepools.md │ │ └── scheduling.md │ ├── contributing │ │ ├── _index.md │ │ ├── community-meetings.md │ │ ├── design-guide.md │ │ ├── development-guide.md │ │ └── documentation-updates.md │ ├── faq.md │ ├── getting-started │ │ ├── _index.md │ │ ├── getting-started-with-karpenter │ │ │ ├── _index.md │ │ │ ├── cloudformation.yaml │ │ │ ├── grafana-values.yaml │ │ │ ├── karpenter-capacity-dashboard.json │ │ │ ├── karpenter-controllers-allocation.json │ │ │ ├── karpenter-controllers.json │ │ │ ├── karpenter-performance-dashboard.json │ │ │ ├── prometheus-values.yaml │ │ │ └── scripts │ │ │ │ ├── step01-config.sh │ │ │ │ ├── step02-create-cluster-fargate.sh │ │ │ │ ├── step02-create-cluster.sh │ │ │ │ ├── step03-iam-cloud-formation.sh │ │ │ │ ├── step04-grant-access.sh │ │ │ │ ├── step05-controller-iam.sh │ │ │ │ ├── step06-add-spot-role.sh │ │ │ │ ├── step08-apply-helm-chart-fargate.sh │ │ │ │ ├── step08-apply-helm-chart.sh │ │ │ │ ├── step09-add-prometheus-grafana.sh │ │ │ │ ├── step10-add-grafana-port-forward.sh │ │ │ │ ├── step11-grafana-get-password.sh │ │ │ │ ├── step12-add-nodepool.sh │ │ │ │ ├── step13-automatic-node-provisioning.sh │ │ │ │ ├── step14-deprovisioning.sh │ │ │ │ ├── step15-apply-flowschemas.sh │ │ │ │ ├── step16-delete-node.sh │ │ │ │ └── step17-cleanup.sh │ │ └── migrating-from-cas │ │ │ ├── _index.md │ │ │ └── scripts │ │ │ ├── step01-env.sh │ │ │ ├── step02-node-iam.sh │ │ │ ├── step03-node-policies.sh │ │ │ ├── step04-controller-iam.sh │ │ │ ├── step05-tag-subnets.sh │ │ │ ├── step06-tag-security-groups.sh │ │ │ ├── step07-edit-aws-auth.sh │ │ │ ├── step08-generate-chart.sh │ │ │ ├── step09-deploy.sh │ │ │ ├── step10-create-nodepool.sh │ │ │ ├── step11-scale-cas.sh │ │ │ ├── step12-scale-multiple-ng.sh │ │ │ └── step12-scale-single-ng.sh │ ├── reference │ │ ├── _index.md │ │ ├── cloudformation.md │ │ ├── instance-types.md │ │ ├── metrics.md │ │ ├── settings.md │ │ └── threat-model.md │ ├── tasks │ │ ├── _index.md │ │ └── managing-amis.md │ ├── troubleshooting.md │ └── upgrading │ │ ├── _index.md │ │ ├── compatibility.md │ │ └── upgrade-guide.md │ └── v1.5 │ ├── _index.md │ ├── concepts │ ├── _index.md │ ├── disruption.md │ ├── nodeclaims.md │ ├── nodeclasses.md │ ├── nodepools.md │ └── scheduling.md │ ├── contributing │ ├── _index.md │ ├── community-meetings.md │ ├── design-guide.md │ ├── development-guide.md │ └── documentation-updates.md │ ├── faq.md │ ├── getting-started │ ├── _index.md │ ├── getting-started-with-karpenter │ │ ├── _index.md │ │ ├── cloudformation.yaml │ │ ├── grafana-values.yaml │ │ ├── karpenter-capacity-dashboard.json │ │ ├── karpenter-controllers-allocation.json │ │ ├── karpenter-controllers.json │ │ ├── karpenter-performance-dashboard.json │ │ ├── prometheus-values.yaml │ │ └── scripts │ │ │ ├── step01-config.sh │ │ │ ├── step02-create-cluster-fargate.sh │ │ │ ├── step02-create-cluster.sh │ │ │ ├── step03-iam-cloud-formation.sh │ │ │ ├── step04-grant-access.sh │ │ │ ├── step05-controller-iam.sh │ │ │ ├── step06-add-spot-role.sh │ │ │ ├── step08-apply-helm-chart-fargate.sh │ │ │ ├── step08-apply-helm-chart.sh │ │ │ ├── step09-add-prometheus-grafana.sh │ │ │ ├── step10-add-grafana-port-forward.sh │ │ │ ├── step11-grafana-get-password.sh │ │ │ ├── step12-add-nodepool.sh │ │ │ ├── step13-automatic-node-provisioning.sh │ │ │ ├── step14-deprovisioning.sh │ │ │ ├── step15-apply-flowschemas.sh │ │ │ ├── step16-delete-node.sh │ │ │ └── step17-cleanup.sh │ └── migrating-from-cas │ │ ├── _index.md │ │ └── scripts │ │ ├── step01-env.sh │ │ ├── step02-node-iam.sh │ │ ├── step03-node-policies.sh │ │ ├── step04-controller-iam.sh │ │ ├── step05-tag-subnets.sh │ │ ├── step06-tag-security-groups.sh │ │ ├── step07-edit-aws-auth.sh │ │ ├── step08-generate-chart.sh │ │ ├── step09-deploy.sh │ │ ├── step10-create-nodepool.sh │ │ ├── step11-scale-cas.sh │ │ ├── step12-scale-multiple-ng.sh │ │ └── step12-scale-single-ng.sh │ ├── reference │ ├── _index.md │ ├── cloudformation.md │ ├── instance-types.md │ ├── metrics.md │ ├── settings.md │ └── threat-model.md │ ├── tasks │ ├── _index.md │ └── managing-amis.md │ ├── troubleshooting.md │ └── upgrading │ ├── _index.md │ ├── compatibility.md │ └── upgrade-guide.md ├── go.mod ├── go.sum ├── hugo.yaml ├── layouts ├── 404.html ├── partials │ ├── favicons.html │ ├── footer.html │ └── navbar-version-selector.html ├── robots.txt └── shortcodes │ ├── blocks │ └── feature.html │ ├── github.html │ ├── githubRelRef.html │ └── script.html ├── netlify.toml ├── package-lock.json ├── package.json └── static ├── _redirects ├── banner.png ├── favicon.ico ├── favicon.svg ├── favicons ├── apple-touch-icon-180x180.png ├── browserconfig.xml ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── pwa-192x192.png ├── pwa-512x512.png ├── tile150x150.png ├── tile310x150.png ├── tile310x310.png └── tile70x70.png ├── full_logo.png ├── full_logo.svg ├── karpenter-overview.png ├── logo.png ├── metrics-node-table.png ├── metrics-percentile-graph.png ├── metrics-pod-summary.png ├── nodeclaims.png ├── termination-state-machine.png ├── threat-model.png └── white_full_logo.svg /.github/ISSUE_TEMPLATE/documentation.yaml: -------------------------------------------------------------------------------- 1 | name: Documentation 2 | description: How the docs be improved? 3 | labels: 4 | - documentation 5 | - needs-triage 6 | body: 7 | - type: textarea 8 | attributes: 9 | label: Description 10 | value: | 11 | **How can the docs be improved?** 12 | 13 | * Please vote on this issue by adding a 👍 [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) to the original issue to help the community and maintainers prioritize this request 14 | * Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request 15 | * If you are interested in working on this issue or have submitted a pull request, please leave a comment 16 | -------------------------------------------------------------------------------- /.github/actionlint-matcher.json: -------------------------------------------------------------------------------- 1 | { 2 | "problemMatcher": [ 3 | { 4 | "owner": "actionlint", 5 | "pattern": [ 6 | { 7 | "regexp": "^(?:\\x1b\\[\\d+m)?(.+?)(?:\\x1b\\[\\d+m)*:(?:\\x1b\\[\\d+m)*(\\d+)(?:\\x1b\\[\\d+m)*:(?:\\x1b\\[\\d+m)*(\\d+)(?:\\x1b\\[\\d+m)*: (?:\\x1b\\[\\d+m)*(.+?)(?:\\x1b\\[\\d+m)* \\[(.+?)\\]$", 8 | "file": 1, 9 | "line": 2, 10 | "column": 3, 11 | "message": 4, 12 | "code": 5 13 | } 14 | ] 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /.github/actions/e2e/install-eksctl/action.yaml: -------------------------------------------------------------------------------- 1 | name: InstallEKSCTL 2 | description: 'Installs eksctl' 3 | inputs: 4 | version: 5 | description: "Version of EKSCTL to use for the launched cluster" 6 | required: true 7 | runs: 8 | using: "composite" 9 | steps: 10 | - shell: bash 11 | env: 12 | VERSION: ${{ inputs.version }} 13 | run: | 14 | # for ARM systems, set ARCH to: `arm64`, `armv6` or `armv7` 15 | ARCH=amd64 16 | PLATFORM=$(uname -s)_$ARCH 17 | curl -sLO "https://github.com/weaveworks/eksctl/releases/download/$VERSION/eksctl_$PLATFORM.tar.gz" 18 | 19 | # (Optional) Verify checksum 20 | curl -sL "https://github.com/weaveworks/eksctl/releases/download/$VERSION/eksctl_checksums.txt" | grep $PLATFORM | sha256sum --check 21 | tar -xzf eksctl_$PLATFORM.tar.gz -C /tmp && rm eksctl_$PLATFORM.tar.gz 22 | sudo mv /tmp/eksctl /usr/local/bin 23 | -------------------------------------------------------------------------------- /.github/actions/e2e/install-helm/action.yaml: -------------------------------------------------------------------------------- 1 | name: InstallHelm 2 | description: 'Installs helm' 3 | inputs: 4 | version: 5 | description: "Version of Helm to install" 6 | required: true 7 | runs: 8 | using: "composite" 9 | steps: 10 | - name: install helm 11 | shell: bash 12 | env: 13 | HELM_VERSION: ${{ inputs.version }} 14 | run: | 15 | ./test/hack/e2e_scripts/install_helm.sh 16 | - name: install helm-diff 17 | shell: bash 18 | run: | 19 | helm plugin install https://github.com/databus23/helm-diff || true -------------------------------------------------------------------------------- /.github/actions/e2e/slack/send-message/action.yaml: -------------------------------------------------------------------------------- 1 | name: SlackSendMessage 2 | description: 'Notifies slack of the success or failure of the suite' 3 | inputs: 4 | message: 5 | description: "Message to send to the Slack webhook notification channel" 6 | required: true 7 | url: 8 | description: "Webhook URL to send the Slack notification to" 9 | required: true 10 | runs: 11 | using: "composite" 12 | steps: 13 | - shell: bash 14 | env: 15 | URL: ${{ inputs.url }} 16 | MESSAGE: ${{ inputs.message }} 17 | run: | 18 | JSON="{'message': '$MESSAGE'}" 19 | curl -X POST -H 'Content-Type: application/json' --data "${JSON}" "$(printf "$URL" | tr -d "\n")" -------------------------------------------------------------------------------- /.github/workflows/ci-test.yaml: -------------------------------------------------------------------------------- 1 | name: CI-TEST 2 | on: 3 | push: 4 | branches: 5 | - 'main' 6 | - 'release-v*' 7 | - 'staging/*' 8 | pull_request: 9 | workflow_dispatch: 10 | jobs: 11 | ci-test: 12 | runs-on: ubuntu-latest 13 | if: github.repository == 'aws/karpenter-provider-aws' 14 | strategy: 15 | fail-fast: false 16 | matrix: 17 | k8sVersion: ["1.26.x", "1.27.x", "1.28.x", "1.29.x", "1.30.x", "1.31.x", "1.32.x"] 18 | steps: 19 | - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 20 | - uses: ./.github/actions/install-deps 21 | with: 22 | k8sVersion: ${{ matrix.k8sVersion }} 23 | - run: K8S_VERSION=${{ matrix.k8sVersion }} make ci-test 24 | - name: Send coverage 25 | # should only send converage once https://docs.coveralls.io/parallel-builds 26 | if: matrix.k8sVersion == '1.32.x' 27 | env: 28 | COVERALLS_TOKEN: ${{ secrets.GITHUB_TOKEN }} 29 | run: goveralls -coverprofile=coverage.out -service=github 30 | -------------------------------------------------------------------------------- /.github/workflows/ci.yaml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: 3 | push: 4 | branches: 5 | - 'main' 6 | - 'release-v*' 7 | - 'staging/*' 8 | pull_request: 9 | workflow_dispatch: 10 | jobs: 11 | ci: 12 | runs-on: ubuntu-latest 13 | if: github.repository == 'aws/karpenter-provider-aws' 14 | steps: 15 | - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 16 | - uses: ./.github/actions/install-deps 17 | - name: Enable the actionlint matcher 18 | run: echo "::add-matcher::.github/actionlint-matcher.json" 19 | - run: make ci-non-test 20 | shell: bash 21 | -------------------------------------------------------------------------------- /.github/workflows/dryrun-gen-pr.yaml: -------------------------------------------------------------------------------- 1 | name: DryRunGenPR 2 | on: 3 | pull_request: 4 | workflow_dispatch: 5 | jobs: 6 | dryrun-gen: 7 | if: github.repository == 'aws/karpenter-provider-aws' 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 11 | - run: make prepare-website 12 | env: 13 | GIT_TAG: v0.10000.0 # Mock version for testing website generation 14 | -------------------------------------------------------------------------------- /.github/workflows/dryrun-gen.yaml: -------------------------------------------------------------------------------- 1 | name: DryRunGen 2 | on: 3 | push: 4 | branches: 5 | - 'main' 6 | - 'release-v*' 7 | - 'staging/*' 8 | jobs: 9 | dryrun-gen: 10 | permissions: 11 | id-token: write # aws-actions/configure-aws-credentials@v4.0.1 12 | if: github.repository == 'aws/karpenter-provider-aws' 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 16 | - uses: ./.github/actions/install-deps 17 | - uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 18 | with: 19 | role-to-assume: 'arn:aws:iam::${{ vars.READONLY_ACCOUNT_ID }}:role/${{ vars.READONLY_ROLE_NAME }}' 20 | aws-region: ${{ vars.READONLY_REGION }} 21 | - run: make docgen 22 | - run: make codegen 23 | env: 24 | ENABLE_GIT_PUSH: false 25 | - run: make prepare-website 26 | env: 27 | GIT_TAG: v0.10000.0 # Mock version for testing website generation 28 | -------------------------------------------------------------------------------- /.github/workflows/e2e-private-cluster-trigger.yaml: -------------------------------------------------------------------------------- 1 | name: E2EPrivateClusterTrigger 2 | on: 3 | schedule: 4 | - cron: '7 0 * * 4' 5 | jobs: 6 | private-cluster-trigger: 7 | if: github.repository == 'aws/karpenter-provider-aws' 8 | permissions: 9 | id-token: write # aws-actions/configure-aws-credentials@v4.0.1 10 | statuses: write # ./.github/actions/commit-status/start 11 | uses: ./.github/workflows/e2e.yaml 12 | with: 13 | suite: Integration 14 | region: us-east-1 15 | workflow_trigger: "private_cluster" 16 | cleanup: true 17 | codebuild_region: US_EAST_1 18 | source: aws 19 | secrets: 20 | SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} 21 | -------------------------------------------------------------------------------- /.github/workflows/postsubmit.yaml: -------------------------------------------------------------------------------- 1 | name: PostSubmit 2 | on: 3 | push: 4 | branches: 5 | - main 6 | workflow_dispatch: 7 | jobs: 8 | postsubmit: 9 | if: github.repository == 'aws/karpenter-provider-aws' 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v4 13 | - uses: ./.github/actions/install-deps 14 | - name: hydrate-goproxy 15 | run: | 16 | mkdir -p hydrate-goproxy 17 | cd hydrate-goproxy 18 | go mod init hydrate-goproxy 19 | go get "github.com/${GITHUB_REPOSITORY}@${GITHUB_SHA}" -------------------------------------------------------------------------------- /.github/workflows/snapshot.yaml: -------------------------------------------------------------------------------- 1 | name: Snapshot 2 | on: 3 | push: 4 | branches: 5 | - 'main' 6 | - 'release-v*' 7 | - 'staging/*' 8 | jobs: 9 | snapshot: 10 | permissions: 11 | id-token: write # aws-actions/configure-aws-credentials@v4.0.1 12 | if: github.repository == 'aws/karpenter-provider-aws' 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 16 | with: 17 | fetch-depth: 0 18 | - uses: ./.github/actions/install-deps 19 | - uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 20 | with: 21 | role-to-assume: 'arn:aws:iam::${{ vars.SNAPSHOT_ACCOUNT_ID }}:role/${{ vars.SNAPSHOT_ROLE_NAME }}' 22 | aws-region: ${{ vars.SNAPSHOT_REGION }} 23 | - run: make snapshot 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Go toolchain 2 | coverage.out 3 | coverage.html 4 | *.test 5 | *.cpuprofile 6 | *.heapprofile 7 | go.work 8 | go.work.sum 9 | 10 | # Environment 11 | .idea 12 | .vscode 13 | .DS_Store 14 | 15 | # Project Specific 16 | *.csv 17 | 18 | # Binary output 19 | karpenter-provider-aws-* 20 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/.gitmodules -------------------------------------------------------------------------------- /.ko.yaml: -------------------------------------------------------------------------------- 1 | defaultBaseImage: public.ecr.aws/eks-distro-build-tooling/eks-distro-minimal-base 2 | defaultPlatforms: 3 | - linux/arm64 4 | - linux/amd64 5 | -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Require approvals from someone in the owner team before merging 2 | # More information here: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners 3 | 4 | * @aws/karpenter 5 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Code of Conduct 2 | The Karpenter project follows the [CNCF Community Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). 3 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | Karpenter 2 | Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | -------------------------------------------------------------------------------- /charts/karpenter-0.1.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.1.1.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.1.2.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.1.2.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.1.3.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.1.3.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.10.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.10.0.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.10.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.10.1.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.11.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.11.0.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.11.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.11.1.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.12.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.12.0.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.12.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.12.1.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.13.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.13.0.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.13.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.13.1.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.13.2.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.13.2.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.14.0-rc.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.14.0-rc.0.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.14.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.14.0.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.15.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.15.0.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.16.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.16.0.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.16.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.16.1.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.16.2.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.16.2.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.16.3.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.16.3.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.2.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.2.0.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.2.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.2.1.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.2.2.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.2.2.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.2.3.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.2.3.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.2.4.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.2.4.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.2.5.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.2.5.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.2.6.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.2.6.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.2.7.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.2.7.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.2.8.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.2.8.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.2.9.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.2.9.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.3.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.3.0.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.3.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.3.1.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.3.2.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.3.2.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.3.3.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.3.3.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.3.4.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.3.4.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.4.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.4.0.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.4.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.4.1.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.4.2.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.4.2.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.4.3.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.4.3.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.5.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.5.0.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.5.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.5.1.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.5.2.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.5.2.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.5.3.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.5.3.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.5.4.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.5.4.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.5.5.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.5.5.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.5.6.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.5.6.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.6.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.6.0.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.6.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.6.1.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.6.2.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.6.2.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.6.3.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.6.3.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.6.4.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.6.4.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.6.5.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.6.5.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.7.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.7.0.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.7.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.7.1.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.7.2.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.7.2.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.7.3.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.7.3.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.8.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.8.0.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.8.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.8.1.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.8.2.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.8.2.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.9.0-rc.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.9.0-rc.0.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.9.0-rc.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.9.0-rc.1.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.9.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.9.0.tgz -------------------------------------------------------------------------------- /charts/karpenter-0.9.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-0.9.1.tgz -------------------------------------------------------------------------------- /charts/karpenter-crd/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /charts/karpenter-crd/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: karpenter-crd 3 | description: A Helm chart for Karpenter Custom Resource Definitions (CRDs). 4 | type: application 5 | version: 1.5.0 6 | appVersion: 1.5.0 7 | keywords: 8 | - cluster 9 | - node 10 | - scheduler 11 | - autoscaling 12 | - lifecycle 13 | home: https://karpenter.sh/ 14 | icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616 15 | sources: 16 | - https://github.com/aws/karpenter/ 17 | -------------------------------------------------------------------------------- /charts/karpenter-crd/README.md: -------------------------------------------------------------------------------- 1 | # karpenter-crd 2 | 3 | ![Version: 1.3.2](https://img.shields.io/badge/Version-1.3.2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.3.2](https://img.shields.io/badge/AppVersion-1.3.2-informational?style=flat-square) 4 | 5 | A Helm chart for Karpenter Custom Resource Definitions (CRDs). 6 | 7 | **Homepage:** 8 | 9 | ## Source Code 10 | 11 | * 12 | 13 | ## Values 14 | 15 | | Key | Type | Default | Description | 16 | |-----|------|---------|-------------| 17 | | additionalAnnotations | object | `{}` | Additional annotations for the custom resource definitions. | 18 | 19 | ---------------------------------------------- 20 | 21 | Autogenerated from chart metadata using [helm-docs](https://github.com/norwoodj/helm-docs/). 22 | -------------------------------------------------------------------------------- /charts/karpenter-crd/README.md.gotmpl: -------------------------------------------------------------------------------- 1 | {{ template "chart.header" . }} 2 | {{ template "chart.deprecationWarning" . }} 3 | 4 | {{ template "chart.badgesSection" . }} 5 | 6 | {{ template "chart.description" . }} 7 | 8 | {{ template "chart.homepageLine" . }} 9 | 10 | {{ template "chart.maintainersSection" . }} 11 | 12 | {{ template "chart.sourcesSection" . }} 13 | 14 | {{ template "chart.requirementsSection" . }} 15 | 16 | {{ template "chart.valuesSection" . }} 17 | 18 | ---------------------------------------------- 19 | 20 | Autogenerated from chart metadata using [helm-docs](https://github.com/norwoodj/helm-docs/). 21 | -------------------------------------------------------------------------------- /charts/karpenter-crd/artifacthub-repo.yaml: -------------------------------------------------------------------------------- 1 | repositoryID: 2cfb6f76-afe1-447f-b036-cd2e230d07d7 2 | owners: [] 3 | # - name: awsadmin1 4 | # email: artifacthub1@aws.com 5 | ignore: 6 | - name: karpenter-crd 7 | version: (?:^\d+$)|(?:^v?0\.0\.0)|(?:^v?\d+\-) 8 | -------------------------------------------------------------------------------- /charts/karpenter-crd/values.yaml: -------------------------------------------------------------------------------- 1 | # -- Additional annotations for the custom resource definitions. 2 | additionalAnnotations: {} 3 | -------------------------------------------------------------------------------- /charts/karpenter-v0-66626bc5e21dc14b2cceaaeb3ad5933c0b4e2046.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/charts/karpenter-v0-66626bc5e21dc14b2cceaaeb3ad5933c0b4e2046.tgz -------------------------------------------------------------------------------- /charts/karpenter/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /charts/karpenter/Chart.lock: -------------------------------------------------------------------------------- 1 | dependencies: [] 2 | digest: sha256:5595919ac269b4105dd65d20eb27cb271b8976c1d10903e0b504d349df30f017 3 | generated: "2020-12-02T11:48:25.741819-08:00" 4 | -------------------------------------------------------------------------------- /charts/karpenter/artifacthub-repo.yaml: -------------------------------------------------------------------------------- 1 | repositoryID: 356cb63f-9ee3-4956-9c20-003e416715c7 2 | owners: [] 3 | # - name: awsadmin1 4 | # email: artifacthub1@aws.com 5 | ignore: 6 | - name: karpenter 7 | version: (?:^\d+$)|(?:^v?0\.0\.0)|(?:^v?\d+\-) 8 | -------------------------------------------------------------------------------- /charts/karpenter/crds/karpenter.k8s.aws_ec2nodeclasses.yaml: -------------------------------------------------------------------------------- 1 | ../../../pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml -------------------------------------------------------------------------------- /charts/karpenter/crds/karpenter.sh_nodeclaims.yaml: -------------------------------------------------------------------------------- 1 | ../../../pkg/apis/crds/karpenter.sh_nodeclaims.yaml -------------------------------------------------------------------------------- /charts/karpenter/crds/karpenter.sh_nodepools.yaml: -------------------------------------------------------------------------------- 1 | ../../../pkg/apis/crds/karpenter.sh_nodepools.yaml -------------------------------------------------------------------------------- /charts/karpenter/templates/aggregate-clusterrole.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRole 3 | metadata: 4 | name: {{ include "karpenter.fullname" . }}-admin 5 | labels: 6 | rbac.authorization.k8s.io/aggregate-to-admin: "true" 7 | {{- include "karpenter.labels" . | nindent 4 }} 8 | {{- with .Values.additionalAnnotations }} 9 | annotations: 10 | {{- toYaml . | nindent 4 }} 11 | {{- end }} 12 | rules: 13 | - apiGroups: ["karpenter.sh"] 14 | resources: ["nodepools", "nodepools/status", "nodeclaims", "nodeclaims/status"] 15 | verbs: ["get", "list", "watch", "create", "delete", "patch"] 16 | - apiGroups: ["karpenter.k8s.aws"] 17 | resources: ["ec2nodeclasses"] 18 | verbs: ["get", "list", "watch", "create", "delete", "patch"] 19 | -------------------------------------------------------------------------------- /charts/karpenter/templates/poddisruptionbudget.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: {{ include "karpenter.pdb.apiVersion" . }} 2 | kind: PodDisruptionBudget 3 | metadata: 4 | name: {{ .Values.podDisruptionBudget.name }} 5 | namespace: {{ .Release.Namespace }} 6 | labels: 7 | {{- include "karpenter.labels" . | nindent 4 }} 8 | {{- with .Values.additionalAnnotations }} 9 | annotations: 10 | {{- toYaml . | nindent 4 }} 11 | {{- end }} 12 | spec: 13 | maxUnavailable: {{ .Values.podDisruptionBudget.maxUnavailable }} 14 | selector: 15 | matchLabels: 16 | {{- include "karpenter.selectorLabels" . | nindent 6 }} 17 | -------------------------------------------------------------------------------- /charts/karpenter/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "karpenter.fullname" . }} 5 | namespace: {{ .Release.Namespace }} 6 | labels: 7 | {{- include "karpenter.labels" . | nindent 4 }} 8 | {{- if or .Values.additionalAnnotations .Values.service.annotations }} 9 | annotations: 10 | {{- with .Values.additionalAnnotations }} 11 | {{- toYaml . | nindent 4 }} 12 | {{- end }} 13 | {{- with .Values.service.annotations }} 14 | {{- toYaml . | nindent 4 }} 15 | {{- end }} 16 | {{- end }} 17 | spec: 18 | type: ClusterIP 19 | ports: 20 | - name: http-metrics 21 | port: {{ .Values.controller.metrics.port }} 22 | targetPort: http-metrics 23 | protocol: TCP 24 | selector: 25 | {{- include "karpenter.selectorLabels" . | nindent 4 }} 26 | -------------------------------------------------------------------------------- /charts/karpenter/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "karpenter.serviceAccountName" . }} 6 | namespace: {{ .Release.Namespace }} 7 | labels: 8 | {{- include "karpenter.labels" . | nindent 4 }} 9 | {{- if or .Values.additionalAnnotations .Values.serviceAccount.annotations }} 10 | annotations: 11 | {{- with .Values.additionalAnnotations }} 12 | {{- toYaml . | nindent 4 }} 13 | {{- end }} 14 | {{- with .Values.serviceAccount.annotations }} 15 | {{- toYaml . | nindent 4 }} 16 | {{- end }} 17 | {{- end }} 18 | automountServiceAccountToken: false 19 | {{- end -}} 20 | -------------------------------------------------------------------------------- /cmd/controller/kodata/HEAD: -------------------------------------------------------------------------------- 1 | ../../../.git/HEAD -------------------------------------------------------------------------------- /cmd/controller/kodata/refs: -------------------------------------------------------------------------------- 1 | ../../../.git/refs -------------------------------------------------------------------------------- /designs/images/node_ownership_ownership_model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/designs/images/node_ownership_ownership_model.png -------------------------------------------------------------------------------- /examples/README.md: -------------------------------------------------------------------------------- 1 | ## Examples 2 | 3 | Checkout example Provisioner and workload specs to demo with Karpenter. 4 | 5 | ## Usage: 6 | 7 | Provisioner specs expect a `CLUSTER_NAME` environment variable to be set to your cluster name. You can use the following command to substitute the environment variable and `kubectl apply` to your cluster: 8 | 9 | ``` 10 | CLUSTER_NAME= envsubst < provisioner/spot.yaml | kubectl apply -f - 11 | ``` 12 | -------------------------------------------------------------------------------- /examples/workloads/arm64.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: arm64 5 | spec: 6 | replicas: 1 7 | selector: 8 | matchLabels: 9 | app: arm64 10 | template: 11 | metadata: 12 | labels: 13 | app: arm64 14 | spec: 15 | securityContext: 16 | runAsUser: 2000 17 | runAsGroup: 3000 18 | fsGroup: 2000 19 | containers: 20 | - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2 21 | name: arm64 22 | resources: 23 | requests: 24 | cpu: "1" 25 | memory: 256M 26 | securityContext: 27 | allowPrivilegedEscalation: false 28 | nodeSelector: 29 | kubernetes.io/arch: arm64 -------------------------------------------------------------------------------- /examples/workloads/disruption-budget.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: policy/v1 2 | kind: PodDisruptionBudget 3 | metadata: 4 | name: pdb 5 | spec: 6 | minAvailable: "80%" 7 | selector: 8 | matchLabels: 9 | app: pdb 10 | --- 11 | apiVersion: apps/v1 12 | kind: Deployment 13 | metadata: 14 | name: pdb 15 | spec: 16 | replicas: 10 17 | selector: 18 | matchLabels: 19 | app: pdb 20 | template: 21 | metadata: 22 | labels: 23 | app: pdb 24 | spec: 25 | securityContext: 26 | runAsUser: 2000 27 | runAsGroup: 3000 28 | fsGroup: 2000 29 | containers: 30 | - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2 31 | name: pdb 32 | resources: 33 | requests: 34 | cpu: "1" 35 | memory: 256M 36 | securityContext: 37 | allowPrivilegedEscalation: false 38 | nodeSelector: 39 | kubernetes.io/arch: amd64 -------------------------------------------------------------------------------- /examples/workloads/gpu-amd.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: gpu-amd 5 | spec: 6 | replicas: 0 7 | selector: 8 | matchLabels: 9 | app: gpu-amd 10 | template: 11 | metadata: 12 | labels: 13 | app: gpu-amd 14 | spec: 15 | securityContext: 16 | runAsUser: 1000 17 | runAsGroup: 3000 18 | fsGroup: 2000 19 | containers: 20 | - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2 21 | name: gpu-amd 22 | resources: 23 | limits: 24 | amd.com/gpu: "1" 25 | requests: 26 | cpu: "1" 27 | memory: 256M 28 | securityContext: 29 | allowPrivilegedEscalation: false -------------------------------------------------------------------------------- /examples/workloads/gpu-nvidia.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: gpu-nvidia 5 | spec: 6 | replicas: 0 7 | selector: 8 | matchLabels: 9 | app: gpu-nvidia 10 | template: 11 | metadata: 12 | labels: 13 | app: gpu-nvidia 14 | spec: 15 | securityContext: 16 | runAsUser: 1000 17 | runAsGroup: 3000 18 | fsGroup: 2000 19 | containers: 20 | - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2 21 | name: gpu-nvidia 22 | resources: 23 | limits: 24 | nvidia.com/gpu: "1" 25 | requests: 26 | cpu: "1" 27 | memory: 256M 28 | securityContext: 29 | allowPrivilegedEscalation: false -------------------------------------------------------------------------------- /examples/workloads/inflate.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: inflate 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: inflate 9 | template: 10 | metadata: 11 | labels: 12 | app: inflate 13 | spec: 14 | securityContext: 15 | runAsUser: 1000 16 | runAsGroup: 3000 17 | fsGroup: 2000 18 | containers: 19 | - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2 20 | name: inflate 21 | resources: 22 | requests: 23 | cpu: "1" 24 | memory: 256M 25 | securityContext: 26 | allowPrivilegeEscalation: false 27 | -------------------------------------------------------------------------------- /examples/workloads/neuron.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: neuron 5 | spec: 6 | replicas: 0 7 | selector: 8 | matchLabels: 9 | app: neuron 10 | template: 11 | metadata: 12 | labels: 13 | app: neuron 14 | spec: 15 | securityContext: 16 | runAsUser: 1000 17 | runAsGroup: 3000 18 | fsGroup: 2000 19 | containers: 20 | - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2 21 | name: neuron 22 | resources: 23 | limits: 24 | aws.amazon.com/neuron: "1" 25 | requests: 26 | cpu: "1" 27 | memory: 256M 28 | securityContext: 29 | allowPrivilegeEscalation: false 30 | -------------------------------------------------------------------------------- /examples/workloads/spot.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: spot 5 | spec: 6 | replicas: 0 7 | selector: 8 | matchLabels: 9 | app: spot 10 | template: 11 | metadata: 12 | labels: 13 | app: spot 14 | spec: 15 | securityContext: 16 | runAsUser: 1000 17 | runAsGroup: 3000 18 | fsGroup: 2000 19 | containers: 20 | - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2 21 | name: spot 22 | resources: 23 | requests: 24 | cpu: "1" 25 | memory: 256M 26 | securityContext: 27 | allowPrivilegeEscalation: false 28 | nodeSelector: 29 | karpenter.sh/capacity-type: spot -------------------------------------------------------------------------------- /examples/workloads/spread-hostname.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: host-spread 5 | spec: 6 | replicas: 10 7 | selector: 8 | matchLabels: 9 | app: host-spread 10 | template: 11 | metadata: 12 | labels: 13 | app: host-spread 14 | spec: 15 | securityContext: 16 | runAsUser: 1000 17 | runAsGroup: 3000 18 | fsGroup: 2000 19 | containers: 20 | - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2 21 | name: host-spread 22 | resources: 23 | requests: 24 | cpu: "1" 25 | memory: 256M 26 | securityContext: 27 | allowPrivilegeEscalation: false 28 | topologySpreadConstraints: 29 | - labelSelector: 30 | matchLabels: 31 | app: host-spread 32 | maxSkew: 2 33 | topologyKey: kubernetes.io/hostname 34 | whenUnsatisfiable: DoNotSchedule -------------------------------------------------------------------------------- /examples/workloads/spread-zone.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: zone-spread 5 | spec: 6 | replicas: 0 7 | selector: 8 | matchLabels: 9 | app: zone-spread 10 | template: 11 | metadata: 12 | labels: 13 | app: zone-spread 14 | spec: 15 | securityContext: 16 | runAsUser: 1000 17 | runAsGroup: 3000 18 | fsGroup: 2000 19 | containers: 20 | - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2 21 | name: zone-spread 22 | resources: 23 | requests: 24 | cpu: "1" 25 | memory: 256M 26 | securityContext: 27 | allowPrivilegeEscalation: false 28 | topologySpreadConstraints: 29 | - labelSelector: 30 | matchLabels: 31 | app: zone-spread 32 | maxSkew: 1 33 | topologyKey: topology.kubernetes.io/zone 34 | whenUnsatisfiable: DoNotSchedule 35 | -------------------------------------------------------------------------------- /hack/boilerplate.go.txt: -------------------------------------------------------------------------------- 1 | /* 2 | Licensed under the Apache License, Version 2.0 (the "License"); 3 | you may not use this file except in compliance with the License. 4 | You may obtain a copy of the License at 5 | 6 | http://www.apache.org/licenses/LICENSE-2.0 7 | 8 | Unless required by applicable law or agreed to in writing, software 9 | distributed under the License is distributed on an "AS IS" BASIS, 10 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | See the License for the specific language governing permissions and 12 | limitations under the License. 13 | */ 14 | 15 | -------------------------------------------------------------------------------- /hack/boilerplate.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eu -o pipefail 3 | 4 | for i in $( 5 | find ./tools ./cmd ./pkg ./test ./hack -name "*.go" 6 | ); do 7 | if ! grep -q "Apache License" $i; then 8 | cat hack/boilerplate.go.txt $i >$i.new && mv $i.new $i 9 | fi 10 | done 11 | -------------------------------------------------------------------------------- /hack/github/dependabot.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | 4 | # This script ensures that we get all the directories that contain an "action.yaml" composite action 5 | # and make sure that we have a dependabot entry for them. Currently, dependabot doesn't support wildcarding 6 | # composite actions in a way that enables us to set a single entry for them. Instead, you need to grab all directories 7 | # that contain actions that you want to auto-update and add an entry for each one in "dependabot.yaml" 8 | # https://github.com/dependabot/dependabot-core/issues/6704 9 | 10 | DIRS=($(find .github/actions -name "action.yaml" -type f -print0 | xargs -0 dirname | sort)) 11 | i=3 # Set the index to the starting index after all of the manually configured dependabot entries 12 | for DIR in "${DIRS[@]}"; do 13 | i=$i dir=$DIR yq -i '.updates[env(i)] = {"package-ecosystem": "github-actions", "directory": env(dir), "schedule": {"interval": "weekly"}, "groups": {"action-deps": {"patterns": ["*"]}}}' .github/dependabot.yaml 14 | i=$((i+1)) 15 | done -------------------------------------------------------------------------------- /hack/github/requirements.txt: -------------------------------------------------------------------------------- 1 | PyGithub==1.55 2 | -------------------------------------------------------------------------------- /hack/mutation/crd_annotations.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Add additional annotations variable to the CRDS 4 | 5 | CRDS="charts/karpenter-crd/templates/*.yaml" 6 | for CRD in $CRDS 7 | do 8 | awk '{print} / annotations:/ && !n {print " {{- with .Values.additionalAnnotations }}\n {{- toYaml . | nindent 4 }}\n {{- end }}"; n++}' "$CRD" > "$CRD.new" && mv "$CRD.new" "$CRD" 9 | done 10 | -------------------------------------------------------------------------------- /hack/release/prepare-website.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | 4 | SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" 5 | # shellcheck source=hack/release/common.sh 6 | source "${SCRIPT_DIR}/common.sh" 7 | 8 | git_tag="${GIT_TAG:-$(git describe --exact-match --tags || echo "none")}" 9 | if [[ "${git_tag}" != v* ]]; then 10 | echo "Not a stable release. Missing required git tag." 11 | exit 1 12 | fi 13 | echo "RenderingPrep website files for ${git_tag}" 14 | 15 | prepareWebsite "${git_tag#v}" 16 | -------------------------------------------------------------------------------- /hack/release/release.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | 4 | SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" 5 | # shellcheck source=hack/release/common.sh 6 | source "${SCRIPT_DIR}/common.sh" 7 | 8 | git_tag="$(git describe --exact-match --tags || echo "no tag")" 9 | if [[ "${git_tag}" == "no tag" ]]; then 10 | echo "Failed to release: commit is untagged" 11 | exit 1 12 | fi 13 | commit_sha="$(git rev-parse HEAD)" 14 | 15 | # Don't release with a dirty commit! 16 | if [[ "$(git status --porcelain)" != "" ]]; then 17 | exit 1 18 | fi 19 | 20 | release "${commit_sha}" "${git_tag#v}" 21 | -------------------------------------------------------------------------------- /hack/release/snapshot.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | 4 | SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" 5 | # shellcheck source=hack/release/common.sh 6 | source "${SCRIPT_DIR}/common.sh" 7 | 8 | commit_sha="$(git rev-parse HEAD)" 9 | 10 | # Don't release with a dirty commit! 11 | if [[ "$(git status --porcelain)" != "" ]]; then 12 | exit 1 13 | fi 14 | 15 | snapshot "${commit_sha}" 16 | -------------------------------------------------------------------------------- /hack/tools/allocatable_diff/README.md: -------------------------------------------------------------------------------- 1 | # Allocatable Diff Tool 2 | 3 | The allocatable diff tool iterates through your list of currently deployed nodes and compares them to Karpenter's expectation of the capacity and allocatable on these nodes. It outputs a CSV file that can be used for further analysis to compare the values like expected capacity and allocatable capacity to determine values like vmMemoryOverheadPercent in the AWS cloudprovider. 4 | 5 | ## Usage 6 | 7 | ```bash 8 | export CLUSTER_NAME=karpenter-demo 9 | ./allocatable-diff --cluster-name=$CLUSTER_NAME --out-file=allocatable-diff.csv 10 | ``` -------------------------------------------------------------------------------- /kwok/manifests/clusterrole.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRole 3 | metadata: 4 | name: kwok-karpenter-extra 5 | rules: 6 | - apiGroups: [""] 7 | resources: ["configmaps", "nodes"] 8 | verbs: ["get", "watch", "list", "create", "patch", "delete"] 9 | --- 10 | apiVersion: rbac.authorization.k8s.io/v1 11 | kind: ClusterRoleBinding 12 | metadata: 13 | name: kwok-karpenter-extra 14 | roleRef: 15 | apiGroup: rbac.authorization.k8s.io 16 | kind: ClusterRole 17 | name: kwok-karpenter-extra 18 | subjects: 19 | - kind: ServiceAccount 20 | name: kwok-karpenter 21 | namespace: $KARPENTER_NAMESPACE -------------------------------------------------------------------------------- /pkg/apis/v1/ec2nodeclass_defaults.go: -------------------------------------------------------------------------------- 1 | /* 2 | Licensed under the Apache License, Version 2.0 (the "License"); 3 | you may not use this file except in compliance with the License. 4 | You may obtain a copy of the License at 5 | 6 | http://www.apache.org/licenses/LICENSE-2.0 7 | 8 | Unless required by applicable law or agreed to in writing, software 9 | distributed under the License is distributed on an "AS IS" BASIS, 10 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | See the License for the specific language governing permissions and 12 | limitations under the License. 13 | */ 14 | 15 | package v1 16 | 17 | import ( 18 | "context" 19 | ) 20 | 21 | // SetDefaults for the EC2NodeClass 22 | func (in *EC2NodeClass) SetDefaults(_ context.Context) {} 23 | -------------------------------------------------------------------------------- /pkg/controllers/interruption/messages/noop/model.go: -------------------------------------------------------------------------------- 1 | /* 2 | Licensed under the Apache License, Version 2.0 (the "License"); 3 | you may not use this file except in compliance with the License. 4 | You may obtain a copy of the License at 5 | 6 | http://www.apache.org/licenses/LICENSE-2.0 7 | 8 | Unless required by applicable law or agreed to in writing, software 9 | distributed under the License is distributed on an "AS IS" BASIS, 10 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | See the License for the specific language governing permissions and 12 | limitations under the License. 13 | */ 14 | 15 | package noop 16 | 17 | import ( 18 | "github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages" 19 | ) 20 | 21 | type Message struct { 22 | messages.Metadata 23 | } 24 | 25 | func (Message) EC2InstanceIDs() []string { 26 | return []string{} 27 | } 28 | 29 | func (Message) Kind() messages.Kind { 30 | return messages.NoOpKind 31 | } 32 | -------------------------------------------------------------------------------- /pkg/providers/amifamily/bootstrap/custom.go: -------------------------------------------------------------------------------- 1 | /* 2 | Licensed under the Apache License, Version 2.0 (the "License"); 3 | you may not use this file except in compliance with the License. 4 | You may obtain a copy of the License at 5 | 6 | http://www.apache.org/licenses/LICENSE-2.0 7 | 8 | Unless required by applicable law or agreed to in writing, software 9 | distributed under the License is distributed on an "AS IS" BASIS, 10 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | See the License for the specific language governing permissions and 12 | limitations under the License. 13 | */ 14 | 15 | package bootstrap 16 | 17 | import ( 18 | "encoding/base64" 19 | 20 | "github.com/aws/aws-sdk-go-v2/aws" 21 | ) 22 | 23 | type Custom struct { 24 | Options 25 | } 26 | 27 | func (e Custom) Script() (string, error) { 28 | return base64.StdEncoding.EncodeToString([]byte(aws.ToString(e.Options.CustomUserData))), nil 29 | } 30 | -------------------------------------------------------------------------------- /pkg/providers/amifamily/bootstrap/mime/test_data/mime_bad_header.txt: -------------------------------------------------------------------------------- 1 | MIME_VERSION = 1.0 2 | CONTENT_TYPE = MIME 3 | 4 | --// 5 | Content-Type: application/node.eks.aws 6 | 7 | apiVersion: node.eks.aws/v1alpha1 8 | kind: NodeConfig 9 | spec: 10 | cluster: 11 | name: test-cluster 12 | apiServerEndpoint: https://example.com 13 | certificateAuthority: ca-bundle 14 | cidr: 10.100.0.0/16 15 | kubelet: 16 | config: 17 | maxPods: 42 18 | systemReserved: 19 | cpu: 100m 20 | memory: 100Mi 21 | ephemeral-storage: 1Gi 22 | flags: 23 | - --node-labels "foo=bar" 24 | containerd: 25 | config: | 26 | [plugins."io.containerd.grpc.v1.cri".containerd] 27 | discard_unpacked_layers = false 28 | 29 | --//-- 30 | -------------------------------------------------------------------------------- /pkg/providers/amifamily/bootstrap/mime/test_data/mime_valid.txt: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: multipart/mixed; boundary="//" 3 | 4 | --// 5 | Content-Type: application/node.eks.aws 6 | 7 | apiVersion: node.eks.aws/v1alpha1 8 | kind: NodeConfig 9 | spec: 10 | cluster: 11 | name: test-cluster 12 | apiServerEndpoint: https://example.com 13 | certificateAuthority: ca-bundle 14 | cidr: 10.100.0.0/16 15 | kubelet: 16 | config: 17 | maxPods: 42 18 | systemReserved: 19 | cpu: 100m 20 | memory: 100Mi 21 | ephemeral-storage: 1Gi 22 | flags: 23 | - --node-labels "foo=bar" 24 | containerd: 25 | config: | 26 | [plugins."io.containerd.grpc.v1.cri".containerd] 27 | discard_unpacked_layers = false 28 | 29 | --// 30 | Content-Type: text/x-shellscript; charset="us-ascii" 31 | 32 | #!/bin/bash 33 | echo "I'm a shell script!" 34 | 35 | --//-- 36 | -------------------------------------------------------------------------------- /pkg/providers/amifamily/bootstrap/mime/test_data/nodeconfig.txt: -------------------------------------------------------------------------------- 1 | apiVersion: node.eks.aws/v1alpha1 2 | kind: NodeConfig 3 | spec: 4 | cluster: 5 | name: test-cluster 6 | apiServerEndpoint: https://example.com 7 | certificateAuthority: ca-bundle 8 | cidr: 10.100.0.0/16 9 | kubelet: 10 | config: 11 | maxPods: 42 12 | systemReserved: 13 | cpu: 100m 14 | memory: 100Mi 15 | ephemeral-storage: 1Gi 16 | flags: 17 | - --node-labels "foo=bar" 18 | containerd: 19 | config: | 20 | [plugins."io.containerd.grpc.v1.cri".containerd] 21 | discard_unpacked_layers = false 22 | -------------------------------------------------------------------------------- /pkg/providers/amifamily/bootstrap/mime/test_data/shell.txt: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo "I'm a shell script!" 3 | -------------------------------------------------------------------------------- /pkg/providers/launchtemplate/testdata/al2023_mime_userdata_input.golden: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: multipart/mixed; boundary="//" 3 | 4 | --// 5 | Content-Type: application/node.eks.aws 6 | 7 | apiVersion: node.eks.aws/v1alpha1 8 | kind: NodeConfig 9 | spec: 10 | cluster: 11 | name: test-cluster 12 | clusterEndpoint: https://test-cluster 13 | certificateAuthority: cluster-ca 14 | cidr: 10.100.0.0/16 15 | kubelet: 16 | config: 17 | maxPods: 42 18 | --// 19 | Content-Type: text/x-shellscript; charset="us-ascii" 20 | 21 | #!/bin/bash 22 | echo "Hello, AL2023!" 23 | --// 24 | -------------------------------------------------------------------------------- /pkg/providers/launchtemplate/testdata/al2023_shell_userdata_input.golden: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo "Hello, AL2023!" 3 | -------------------------------------------------------------------------------- /pkg/providers/launchtemplate/testdata/al2023_userdata_unmerged.golden: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: multipart/mixed; boundary="//" 3 | 4 | --// 5 | Content-Type: application/node.eks.aws 6 | 7 | # Karpenter Generated NodeConfig 8 | apiVersion: node.eks.aws/v1alpha1 9 | kind: NodeConfig 10 | metadata: 11 | creationTimestamp: null 12 | spec: 13 | cluster: 14 | apiServerEndpoint: https://test-cluster 15 | certificateAuthority: Y2EtYnVuZGxlCg== 16 | cidr: 10.100.0.0/16 17 | name: test-cluster 18 | containerd: {} 19 | instance: 20 | localStorage: {} 21 | kubelet: 22 | config: 23 | clusterDNS: 24 | - 10.0.100.10 25 | maxPods: 110 26 | registerWithTaints: 27 | - effect: NoExecute 28 | key: karpenter.sh/unregistered 29 | flags: 30 | - --node-labels="karpenter.k8s.aws/ec2nodeclass=%s,karpenter.sh/capacity-type=on-demand,karpenter.sh/do-not-sync-taints=true,%s=%s,testing/cluster=unspecified" 31 | 32 | --//-- 33 | -------------------------------------------------------------------------------- /pkg/providers/launchtemplate/testdata/al2023_yaml_userdata_input.golden: -------------------------------------------------------------------------------- 1 | apiVersion: node.eks.aws/v1alpha1 2 | kind: NodeConfig 3 | spec: 4 | cluster: 5 | name: test-cluster 6 | clusterEndpoint: https://test-cluster 7 | certificateAuthority: cluster-ca 8 | cidr: 10.100.0.0/16 9 | kubelet: 10 | config: 11 | maxPods: 42 12 | -------------------------------------------------------------------------------- /pkg/providers/launchtemplate/testdata/al2_no_mime_userdata_input.golden: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo "Running custom user data script" 3 | -------------------------------------------------------------------------------- /pkg/providers/launchtemplate/testdata/al2_userdata_content_type_first_input.golden: -------------------------------------------------------------------------------- 1 | Content-Type: multipart/mixed; boundary="BOUNDARY" 2 | MIME-Version: 1.0 3 | 4 | --BOUNDARY 5 | Content-Type: text/x-shellscript; charset="us-ascii" 6 | 7 | #!/bin/bash 8 | echo "Running custom user data script" 9 | 10 | --BOUNDARY-- -------------------------------------------------------------------------------- /pkg/providers/launchtemplate/testdata/al2_userdata_input.golden: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: multipart/mixed; boundary="BOUNDARY" 3 | 4 | --BOUNDARY 5 | Content-Type: text/x-shellscript; charset="us-ascii" 6 | 7 | #!/bin/bash 8 | echo "Running custom user data script" 9 | 10 | --BOUNDARY-- -------------------------------------------------------------------------------- /pkg/providers/launchtemplate/testdata/al2_userdata_merged.golden: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: multipart/mixed; boundary="//" 3 | 4 | --// 5 | Content-Type: text/x-shellscript; charset="us-ascii" 6 | 7 | #!/bin/bash 8 | echo "Running custom user data script" 9 | 10 | --// 11 | Content-Type: text/x-shellscript; charset="us-ascii" 12 | 13 | #!/bin/bash -xe 14 | exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1 15 | /etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \ 16 | --dns-cluster-ip '10.0.100.10' \ 17 | --use-max-pods false \ 18 | --kubelet-extra-args '--node-labels="karpenter.k8s.aws/ec2nodeclass=%s,karpenter.sh/capacity-type=on-demand,karpenter.sh/do-not-sync-taints=true,%s=%s,testing/cluster=unspecified" --register-with-taints="karpenter.sh/unregistered:NoExecute" --max-pods=110' 19 | --//-- 20 | -------------------------------------------------------------------------------- /pkg/providers/launchtemplate/testdata/al2_userdata_unmerged.golden: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: multipart/mixed; boundary="//" 3 | 4 | --// 5 | Content-Type: text/x-shellscript; charset="us-ascii" 6 | 7 | #!/bin/bash -xe 8 | exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1 9 | /etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \ 10 | --dns-cluster-ip '10.0.100.10' \ 11 | --use-max-pods false \ 12 | --kubelet-extra-args '--node-labels="karpenter.k8s.aws/ec2nodeclass=%s,karpenter.sh/capacity-type=on-demand,karpenter.sh/do-not-sync-taints=true,%s=%s,testing/cluster=unspecified" --register-with-taints="karpenter.sh/unregistered:NoExecute" --max-pods=110' 13 | --//-- 14 | -------------------------------------------------------------------------------- /pkg/providers/launchtemplate/testdata/br_userdata_input.golden: -------------------------------------------------------------------------------- 1 | [settings.kubernetes] 2 | "unknown-setting" = "unknown" 3 | api-server = 'replaceme' 4 | cloud-provider = 'external' 5 | cluster-certificate = "replaceme" 6 | cluster-name = 'replaceme' 7 | max-pods = 9999999999 # replaceme 8 | 9 | [settings.kubernetes.eviction-hard] 10 | "memory.available" = "12%%" 11 | 12 | [settings.kubernetes.labels] 13 | "replace" = "me" 14 | 15 | [settings.kubernetes.node-labels] 16 | "custom-node-label" = "custom" 17 | "%s" = "should-be-overridden" 18 | 19 | [settings.kubernetes.node-taints] 20 | "replace" = ["me:Schedule"] 21 | 22 | [settings.network] 23 | hostname = "test.local" 24 | https-proxy = "1.2.3.4:8080" 25 | no-proxy = ["localhost", "127.0.0.1"] 26 | hosts = [["10.0.0.0", ["test.example.com", "test1.example.com"]]] 27 | 28 | [settings.ntp] 29 | time-servers = ["169.254.169.123"] 30 | -------------------------------------------------------------------------------- /pkg/providers/launchtemplate/testdata/br_userdata_unmerged.golden: -------------------------------------------------------------------------------- 1 | [settings] 2 | [settings.kubernetes] 3 | api-server = 'https://test-cluster' 4 | cluster-certificate = 'ca-bundle' 5 | cluster-name = 'test-cluster' 6 | cluster-dns-ip = '10.0.100.10' 7 | max-pods = 110 8 | 9 | [settings.kubernetes.node-labels] 10 | 'karpenter.k8s.aws/ec2nodeclass' = '%s' 11 | 'karpenter.sh/capacity-type' = 'on-demand' 12 | 'karpenter.sh/do-not-sync-taints' = 'true' 13 | '%s' = '%s' 14 | 'testing/cluster' = 'unspecified' 15 | 16 | [settings.kubernetes.node-taints] 17 | baz = ['bin:NoExecute'] 18 | foo = ['bar:NoExecute'] 19 | 'karpenter.sh/unregistered' = [':NoExecute'] 20 | -------------------------------------------------------------------------------- /pkg/providers/launchtemplate/testdata/windows_userdata_input.golden: -------------------------------------------------------------------------------- 1 | Write-Host "Running custom user data script" 2 | Write-Host "Finished running custom user data script" 3 | -------------------------------------------------------------------------------- /pkg/providers/launchtemplate/testdata/windows_userdata_merged.golden: -------------------------------------------------------------------------------- 1 | 2 | Write-Host "Running custom user data script" 3 | Write-Host "Finished running custom user data script" 4 | [string]$EKSBootstrapScriptFile = "$env:ProgramFiles\Amazon\EKS\Start-EKSBootstrap.ps1" 5 | & $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels="karpenter.k8s.aws/ec2nodeclass=%s,karpenter.sh/capacity-type=spot,karpenter.sh/do-not-sync-taints=true,%s=%s,testing/cluster=unspecified" --register-with-taints="karpenter.sh/unregistered:NoExecute" --max-pods=110' -DNSClusterIP '10.0.100.10' 6 | 7 | -------------------------------------------------------------------------------- /pkg/providers/launchtemplate/testdata/windows_userdata_unmerged.golden: -------------------------------------------------------------------------------- 1 | 2 | [string]$EKSBootstrapScriptFile = "$env:ProgramFiles\Amazon\EKS\Start-EKSBootstrap.ps1" 3 | & $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels="karpenter.k8s.aws/ec2nodeclass=%s,karpenter.sh/capacity-type=spot,karpenter.sh/do-not-sync-taints=true,%s=%s,testing/cluster=unspecified" --register-with-taints="karpenter.sh/unregistered:NoExecute" --max-pods=110' -DNSClusterIP '10.0.100.10' 4 | 5 | -------------------------------------------------------------------------------- /test/assets/gha_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/test/assets/gha_architecture.png -------------------------------------------------------------------------------- /test/cloudformation/prometheus_cloudformation.yaml: -------------------------------------------------------------------------------- 1 | AWSTemplateFormatVersion: "2010-09-09" 2 | Description: Resources used for monitoring the GHA test runs using Prometheus 3 | Resources: 4 | PrometheusWorkspace: 5 | Type: AWS::APS::Workspace 6 | PrometheusWorkspaceIngestionPolicy: 7 | Type: AWS::IAM::ManagedPolicy 8 | Properties: 9 | ManagedPolicyName: PrometheusWorkspaceIngestionPolicy 10 | PolicyDocument: 11 | Version: "2012-10-17" 12 | Statement: 13 | - Effect: Allow 14 | Resource: !Ref PrometheusWorkspace 15 | Action: 16 | - aps:RemoteWrite 17 | - aps:GetSeries 18 | - aps:GetLabels 19 | - aps:GetMetricMetadata 20 | Outputs: 21 | WorkspaceID: 22 | Description: "Prometheus Workspace ID" 23 | Value: !Ref PrometheusWorkspace 24 | -------------------------------------------------------------------------------- /test/hack/e2e_scripts/diff_karpenter.sh: -------------------------------------------------------------------------------- 1 | CHART="oci://$ECR_ACCOUNT_ID.dkr.ecr.$ECR_REGION.amazonaws.com/karpenter/snapshot/karpenter" 2 | if [[ "$PRIVATE_CLUSTER" == "true" ]]; then 3 | CHART="oci://$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/karpenter/snapshot/karpenter" 4 | fi 5 | 6 | helm diff upgrade --namespace kube-system \ 7 | karpenter "${CHART}" \ 8 | --version 0-$(git rev-parse HEAD) \ 9 | --reuse-values --three-way-merge --detailed-exitcode --no-hooks 10 | -------------------------------------------------------------------------------- /test/hack/e2e_scripts/install_helm.sh: -------------------------------------------------------------------------------- 1 | TEMPDIR=$(mktemp -d) 2 | curl -fsSL -o "${TEMPDIR}/get_helm.sh" https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 3 | chmod 700 "${TEMPDIR}/get_helm.sh" 4 | "${TEMPDIR}/get_helm.sh" --version "$HELM_VERSION" 5 | -------------------------------------------------------------------------------- /test/hack/e2e_scripts/noderole_bootstrap_permission.sh: -------------------------------------------------------------------------------- 1 | eksctl create iamidentitymapping \ 2 | --username system:node:{{EC2PrivateDNSName}} \ 3 | --cluster "$CLUSTER_NAME" \ 4 | --arn "arn:aws:iam::$ACCOUNT_ID:role/KarpenterNodeRole-$CLUSTER_NAME" \ 5 | --group system:bootstrappers \ 6 | --group system:nodes \ 7 | --group eks:kube-proxy-windows 8 | -------------------------------------------------------------------------------- /test/pkg/environment/aws/default_ec2nodeclass.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: karpenter.k8s.aws/v1 2 | kind: EC2NodeClass 3 | metadata: 4 | name: default 5 | spec: 6 | amiFamily: AL2023 7 | subnetSelectorTerms: 8 | - tags: 9 | karpenter.sh/discovery: $CLUSTER_NAME 10 | securityGroupSelectorTerms: 11 | - tags: 12 | karpenter.sh/discovery: $CLUSTER_NAME 13 | role: KarpenterNodeRole-$CLUSTER_NAME 14 | amiSelectorTerms: 15 | - alias: al2023@latest -------------------------------------------------------------------------------- /test/pkg/environment/aws/default_nodepool.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: karpenter.sh/v1 2 | kind: NodePool 3 | metadata: 4 | name: default 5 | spec: 6 | disruption: 7 | consolidationPolicy: WhenEmptyOrUnderutilized 8 | consolidateAfter: Never 9 | budgets: 10 | - nodes: 100% 11 | limits: 12 | cpu: 1000 13 | memory: 1000Gi 14 | template: 15 | spec: 16 | expireAfter: Never 17 | requirements: 18 | - key: kubernetes.io/os 19 | operator: In 20 | values: ["linux"] 21 | - key: karpenter.sh/capacity-type 22 | operator: In 23 | values: ["on-demand"] 24 | - key: karpenter.k8s.aws/instance-category 25 | operator: In 26 | values: ["c", "m", "r"] 27 | - key: karpenter.k8s.aws/instance-generation 28 | operator: Gt 29 | values: ["2"] 30 | - key: karpenter.k8s.aws/instance-family 31 | operator: NotIn 32 | values: ["a1"] 33 | nodeClassRef: 34 | group: karpenter.k8s.aws 35 | kind: EC2NodeClass 36 | name: default -------------------------------------------------------------------------------- /test/suites/ami/testdata/al2023_userdata_input.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: node.eks.aws/v1alpha1 2 | kind: NodeConfig 3 | spec: 4 | cluster: 5 | name: %s 6 | apiServerEndpoint: %s 7 | certificateAuthority: %s 8 | cidr: 10.100.0.0/16 9 | kubelet: 10 | config: 11 | clusterDNS: 12 | - 10.0.100.10 13 | flags: 14 | - --node-labels="testing/cluster=unspecified" 15 | - --register-with-taints="karpenter.sh/unregistered:NoExecute" -------------------------------------------------------------------------------- /test/suites/ami/testdata/al2_no_mime_userdata_input.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo "Running custom user data script" 3 | -------------------------------------------------------------------------------- /test/suites/ami/testdata/al2_userdata_input.sh: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: multipart/mixed; boundary="BOUNDARY" 3 | 4 | --BOUNDARY 5 | Content-Type: text/x-shellscript; charset="us-ascii" 6 | 7 | #!/bin/bash 8 | echo "Running custom user data script" 9 | 10 | --BOUNDARY-- 11 | -------------------------------------------------------------------------------- /test/suites/ami/testdata/br_userdata_input.sh: -------------------------------------------------------------------------------- 1 | [settings.kubernetes] 2 | kube-api-qps = 30 3 | eviction-max-pod-grace-period = 40 4 | [settings.kubernetes.node-taints] 5 | "node.cilium.io/agent-not-ready" = ["true:NoExecute"] 6 | [settings.kubernetes.eviction-soft] 7 | "memory.available" = "100Mi" 8 | [settings.kubernetes.eviction-soft-grace-period] 9 | "memory.available" = "30s" -------------------------------------------------------------------------------- /test/suites/ami/testdata/windows_userdata_input.ps1: -------------------------------------------------------------------------------- 1 | Write-Host "Running custom user data script" -------------------------------------------------------------------------------- /tools/kompat/README.md: -------------------------------------------------------------------------------- 1 | # kompat 2 | 3 | Kompat is a simple CLI tool to interact with `compatibility.yaml` files which host your Kubernetes compatibility matrix. 4 | 5 | ## Installation 6 | 7 | ```console 8 | go install github.com/aws/karpenter/tools/kompat/cmd/kompat@latest 9 | ``` 10 | 11 | ## Usage: 12 | 13 | ```console 14 | kompat hack/compatibility-karpenter.yaml -n 5 15 | ``` 16 | -------------------------------------------------------------------------------- /tools/kompat/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/aws/karpenter-provider-aws/tools/kompat 2 | 3 | go 1.22 4 | 5 | require ( 6 | github.com/Masterminds/semver/v3 v3.2.1 7 | github.com/mitchellh/go-homedir v1.1.0 8 | github.com/olekukonko/tablewriter v0.0.5 9 | github.com/samber/lo v1.38.1 10 | github.com/spf13/cobra v1.6.0 11 | gopkg.in/yaml.v3 v3.0.1 12 | ) 13 | 14 | require ( 15 | github.com/inconshreveable/mousetrap v1.0.1 // indirect 16 | github.com/mattn/go-runewidth v0.0.9 // indirect 17 | github.com/spf13/pflag v1.0.5 // indirect 18 | golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 // indirect 19 | ) 20 | -------------------------------------------------------------------------------- /website/.gitignore: -------------------------------------------------------------------------------- 1 | .hugo_build.lock 2 | node_modules 3 | resources 4 | public 5 | -------------------------------------------------------------------------------- /website/.node-version: -------------------------------------------------------------------------------- 1 | 18 2 | -------------------------------------------------------------------------------- /website/archetypes/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{ replace .Name "-" " " | title }}" 3 | date: {{ .Date }} 4 | draft: true 5 | --- 6 | 7 | -------------------------------------------------------------------------------- /website/assets/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "paths": { 5 | "*": [ 6 | "*" 7 | ] 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /website/content/en/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/content/en/background.png -------------------------------------------------------------------------------- /website/content/en/docs/contributing/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Contributing" 3 | linkTitle: "Contributing" 4 | weight: 40 5 | description: > 6 | Learn about how to contribute to Karpenter 7 | --- 8 | -------------------------------------------------------------------------------- /website/content/en/docs/contributing/documentation-updates.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Documentation Updates" 3 | linkTitle: "Documentation Updates" 4 | weight: 50 5 | description: > 6 | Information helpful for contributing simple documentation updates. 7 | --- 8 | 9 | - Documentation for https://karpenter.sh/docs/ is built under website/content/en/preview/. 10 | - Documentation updates should be made to the "preview" directory. Your changes will be promoted to website/content/en/docs/ by an automated process after the change has been merged. 11 | - Previews for your changes are built and available a few minutes after you push. Look for the "netlify Deploy Preview" link in a comment in your PR. 12 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/getting-started-with-karpenter/grafana-values.yaml: -------------------------------------------------------------------------------- 1 | datasources: 2 | datasources.yaml: 3 | apiVersion: 1 4 | datasources: 5 | - name: Prometheus 6 | type: prometheus 7 | version: 1 8 | url: http://prometheus-server:80 9 | access: proxy 10 | dashboardProviders: 11 | dashboardproviders.yaml: 12 | apiVersion: 1 13 | providers: 14 | - name: 'default' 15 | orgId: 1 16 | folder: '' 17 | type: file 18 | disableDeletion: false 19 | editable: true 20 | options: 21 | path: /var/lib/grafana/dashboards/default 22 | dashboards: 23 | default: 24 | capacity-dashboard: 25 | url: https://karpenter.sh/v1.5/getting-started/getting-started-with-karpenter/karpenter-capacity-dashboard.json 26 | performance-dashboard: 27 | url: https://karpenter.sh/v1.5/getting-started/getting-started-with-karpenter/karpenter-performance-dashboard.json 28 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/getting-started-with-karpenter/prometheus-values.yaml: -------------------------------------------------------------------------------- 1 | alertmanager: 2 | persistentVolume: 3 | enabled: false 4 | 5 | server: 6 | fullnameOverride: prometheus-server 7 | persistentVolume: 8 | enabled: false 9 | 10 | extraScrapeConfigs: | 11 | - job_name: karpenter 12 | kubernetes_sd_configs: 13 | - role: endpoints 14 | namespaces: 15 | names: 16 | - $KARPENTER_NAMESPACE 17 | relabel_configs: 18 | - source_labels: 19 | - __meta_kubernetes_endpoints_name 20 | - __meta_kubernetes_endpoint_port_name 21 | action: keep 22 | regex: karpenter;http-metrics 23 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step01-config.sh: -------------------------------------------------------------------------------- 1 | export AWS_PARTITION="aws" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov 2 | export CLUSTER_NAME="${USER}-karpenter-demo" 3 | export AWS_DEFAULT_REGION="us-west-2" 4 | export AWS_ACCOUNT_ID="$(aws sts get-caller-identity --query Account --output text)" 5 | export TEMPOUT="$(mktemp)" 6 | export ALIAS_VERSION="$(aws ssm get-parameter --name "/aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2023/x86_64/standard/recommended/image_id" --query Parameter.Value | xargs aws ec2 describe-images --query 'Images[0].Name' --image-ids | sed -r 's/^.*(v[[:digit:]]+).*$/\1/')" 7 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step03-iam-cloud-formation.sh: -------------------------------------------------------------------------------- 1 | TEMPOUT="$(mktemp)" 2 | 3 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml > "${TEMPOUT}" \ 4 | && aws cloudformation deploy \ 5 | --stack-name "Karpenter-${CLUSTER_NAME}" \ 6 | --template-file "${TEMPOUT}" \ 7 | --capabilities CAPABILITY_NAMED_IAM \ 8 | --parameter-overrides "ClusterName=${CLUSTER_NAME}" 9 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step04-grant-access.sh: -------------------------------------------------------------------------------- 1 | eksctl create iamidentitymapping \ 2 | --username system:node:{{EC2PrivateDNSName}} \ 3 | --cluster "${CLUSTER_NAME}" \ 4 | --arn "arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}" \ 5 | --group system:bootstrappers \ 6 | --group system:nodes 7 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step05-controller-iam.sh: -------------------------------------------------------------------------------- 1 | eksctl create iamserviceaccount \ 2 | --cluster "${CLUSTER_NAME}" --name karpenter --namespace "${KARPENTER_NAMESPACE}" \ 3 | --role-name "${CLUSTER_NAME}-karpenter" \ 4 | --attach-policy-arn "arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}" \ 5 | --role-only \ 6 | --approve 7 | 8 | export KARPENTER_IAM_ROLE_ARN="arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter" 9 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step06-add-spot-role.sh: -------------------------------------------------------------------------------- 1 | aws iam create-service-linked-role --aws-service-name spot.amazonaws.com || true 2 | # If the role has already been successfully created, you will see: 3 | # An error occurred (InvalidInput) when calling the CreateServiceLinkedRole operation: Service role name AWSServiceRoleForEC2Spot has been taken in this account, please try a different suffix. 4 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart-fargate.sh: -------------------------------------------------------------------------------- 1 | # Logout of helm registry to perform an unauthenticated pull against the public ECR 2 | helm registry logout public.ecr.aws 3 | 4 | helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" --create-namespace \ 5 | --set "settings.clusterName=${CLUSTER_NAME}" \ 6 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 7 | --set controller.resources.requests.cpu=1 \ 8 | --set controller.resources.requests.memory=1Gi \ 9 | --set controller.resources.limits.cpu=1 \ 10 | --set controller.resources.limits.memory=1Gi \ 11 | --set serviceAccount.annotations."eks\.amazonaws\.com/role-arn"="arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter" \ 12 | --wait 13 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh: -------------------------------------------------------------------------------- 1 | # Logout of helm registry to perform an unauthenticated pull against the public ECR 2 | helm registry logout public.ecr.aws 3 | 4 | helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" --create-namespace \ 5 | --set "settings.clusterName=${CLUSTER_NAME}" \ 6 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 7 | --set controller.resources.requests.cpu=1 \ 8 | --set controller.resources.requests.memory=1Gi \ 9 | --set controller.resources.limits.cpu=1 \ 10 | --set controller.resources.limits.memory=1Gi \ 11 | --wait 12 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step09-add-prometheus-grafana.sh: -------------------------------------------------------------------------------- 1 | helm repo add grafana-charts https://grafana.github.io/helm-charts 2 | helm repo add prometheus-community https://prometheus-community.github.io/helm-charts 3 | helm repo update 4 | 5 | kubectl create namespace monitoring 6 | 7 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/prometheus-values.yaml | envsubst | tee prometheus-values.yaml 8 | helm install --namespace monitoring prometheus prometheus-community/prometheus --values prometheus-values.yaml 9 | 10 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/grafana-values.yaml | tee grafana-values.yaml 11 | helm install --namespace monitoring grafana grafana-charts/grafana --values grafana-values.yaml 12 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step10-add-grafana-port-forward.sh: -------------------------------------------------------------------------------- 1 | kubectl port-forward --namespace monitoring svc/grafana 3000:80 2 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step11-grafana-get-password.sh: -------------------------------------------------------------------------------- 1 | kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode 2 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step13-automatic-node-provisioning.sh: -------------------------------------------------------------------------------- 1 | cat < node-trust-policy.json 13 | 14 | aws iam create-role --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 15 | --assume-role-policy-document file://node-trust-policy.json 16 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/migrating-from-cas/scripts/step03-node-policies.sh: -------------------------------------------------------------------------------- 1 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 2 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKSWorkerNodePolicy" 3 | 4 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 5 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKS_CNI_Policy" 6 | 7 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 8 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly" 9 | 10 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 11 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonSSMManagedInstanceCore" 12 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/migrating-from-cas/scripts/step05-tag-subnets.sh: -------------------------------------------------------------------------------- 1 | for NODEGROUP in $(aws eks list-nodegroups --cluster-name "${CLUSTER_NAME}" --query 'nodegroups' --output text); do 2 | aws ec2 create-tags \ 3 | --tags "Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}" \ 4 | --resources $(aws eks describe-nodegroup --cluster-name "${CLUSTER_NAME}" \ 5 | --nodegroup-name "${NODEGROUP}" --query 'nodegroup.subnets' --output text ) 6 | done 7 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/migrating-from-cas/scripts/step07-edit-aws-auth.sh: -------------------------------------------------------------------------------- 1 | kubectl edit configmap aws-auth -n kube-system 2 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/migrating-from-cas/scripts/step08-generate-chart.sh: -------------------------------------------------------------------------------- 1 | helm template karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" \ 2 | --set "settings.clusterName=${CLUSTER_NAME}" \ 3 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 4 | --set "serviceAccount.annotations.eks\.amazonaws\.com/role-arn=arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterControllerRole-${CLUSTER_NAME}" \ 5 | --set controller.resources.requests.cpu=1 \ 6 | --set controller.resources.requests.memory=1Gi \ 7 | --set controller.resources.limits.cpu=1 \ 8 | --set controller.resources.limits.memory=1Gi > karpenter.yaml 9 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/migrating-from-cas/scripts/step09-deploy.sh: -------------------------------------------------------------------------------- 1 | kubectl create namespace "${KARPENTER_NAMESPACE}" || true 2 | kubectl create -f \ 3 | "https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodepools.yaml" 4 | kubectl create -f \ 5 | "https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml" 6 | kubectl create -f \ 7 | "https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodeclaims.yaml" 8 | kubectl apply -f karpenter.yaml 9 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/migrating-from-cas/scripts/step11-scale-cas.sh: -------------------------------------------------------------------------------- 1 | kubectl scale deploy/cluster-autoscaler -n kube-system --replicas=0 2 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/migrating-from-cas/scripts/step12-scale-multiple-ng.sh: -------------------------------------------------------------------------------- 1 | for NODEGROUP in $(aws eks list-nodegroups --cluster-name "${CLUSTER_NAME}" \ 2 | --query 'nodegroups' --output text); do aws eks update-nodegroup-config --cluster-name "${CLUSTER_NAME}" \ 3 | --nodegroup-name "${NODEGROUP}" \ 4 | --scaling-config "minSize=1,maxSize=1,desiredSize=1" 5 | done 6 | -------------------------------------------------------------------------------- /website/content/en/docs/getting-started/migrating-from-cas/scripts/step12-scale-single-ng.sh: -------------------------------------------------------------------------------- 1 | aws eks update-nodegroup-config --cluster-name "${CLUSTER_NAME}" \ 2 | --nodegroup-name "${NODEGROUP}" \ 3 | --scaling-config "minSize=2,maxSize=2,desiredSize=2" 4 | -------------------------------------------------------------------------------- /website/content/en/docs/reference/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Reference" 3 | linkTitle: "Reference" 4 | weight: 50 5 | description: > 6 | Reference documentation for Karpenter 7 | --- -------------------------------------------------------------------------------- /website/content/en/docs/tasks/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Tasks" 3 | linkTitle: "Tasks" 4 | weight: 25 5 | description: > 6 | Tasks to run with Karpenter 7 | cascade: 8 | type: docs 9 | --- 10 | 11 | -------------------------------------------------------------------------------- /website/content/en/docs/upgrading/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Upgrading" 3 | linkTitle: "Upgrading" 4 | weight: 30 5 | description: > 6 | Upgrading Karpenter guide and reference 7 | cascade: 8 | type: docs 9 | --- 10 | 11 | -------------------------------------------------------------------------------- /website/content/en/preview/contributing/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Contributing" 3 | linkTitle: "Contributing" 4 | weight: 40 5 | description: > 6 | Learn about how to contribute to Karpenter 7 | --- 8 | -------------------------------------------------------------------------------- /website/content/en/preview/contributing/documentation-updates.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Documentation Updates" 3 | linkTitle: "Documentation Updates" 4 | weight: 50 5 | description: > 6 | Information helpful for contributing simple documentation updates. 7 | --- 8 | 9 | - Documentation for https://karpenter.sh/docs/ is built under website/content/en/preview/. 10 | - Documentation updates should be made to the "preview" directory. Your changes will be promoted to website/content/en/docs/ by an automated process after the change has been merged. 11 | - Previews for your changes are built and available a few minutes after you push. Look for the "netlify Deploy Preview" link in a comment in your PR. 12 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/getting-started-with-karpenter/grafana-values.yaml: -------------------------------------------------------------------------------- 1 | datasources: 2 | datasources.yaml: 3 | apiVersion: 1 4 | datasources: 5 | - name: Prometheus 6 | type: prometheus 7 | version: 1 8 | url: http://prometheus-server:80 9 | access: proxy 10 | dashboardProviders: 11 | dashboardproviders.yaml: 12 | apiVersion: 1 13 | providers: 14 | - name: 'default' 15 | orgId: 1 16 | folder: '' 17 | type: file 18 | disableDeletion: false 19 | editable: true 20 | options: 21 | path: /var/lib/grafana/dashboards/default 22 | dashboards: 23 | default: 24 | capacity-dashboard: 25 | url: https://karpenter.sh/preview/getting-started/getting-started-with-karpenter/karpenter-capacity-dashboard.json 26 | performance-dashboard: 27 | url: https://karpenter.sh/preview/getting-started/getting-started-with-karpenter/karpenter-performance-dashboard.json 28 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/getting-started-with-karpenter/prometheus-values.yaml: -------------------------------------------------------------------------------- 1 | alertmanager: 2 | persistentVolume: 3 | enabled: false 4 | 5 | server: 6 | fullnameOverride: prometheus-server 7 | persistentVolume: 8 | enabled: false 9 | 10 | extraScrapeConfigs: | 11 | - job_name: karpenter 12 | kubernetes_sd_configs: 13 | - role: endpoints 14 | namespaces: 15 | names: 16 | - $KARPENTER_NAMESPACE 17 | relabel_configs: 18 | - source_labels: 19 | - __meta_kubernetes_endpoints_name 20 | - __meta_kubernetes_endpoint_port_name 21 | action: keep 22 | regex: karpenter;http-metrics 23 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step01-config.sh: -------------------------------------------------------------------------------- 1 | export AWS_PARTITION="aws" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov 2 | export CLUSTER_NAME="${USER}-karpenter-demo" 3 | export AWS_DEFAULT_REGION="us-west-2" 4 | export AWS_ACCOUNT_ID="$(aws sts get-caller-identity --query Account --output text)" 5 | export TEMPOUT="$(mktemp)" 6 | export ALIAS_VERSION="$(aws ssm get-parameter --name "/aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2023/x86_64/standard/recommended/image_id" --query Parameter.Value | xargs aws ec2 describe-images --query 'Images[0].Name' --image-ids | sed -r 's/^.*(v[[:digit:]]+).*$/\1/')" 7 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step03-iam-cloud-formation.sh: -------------------------------------------------------------------------------- 1 | TEMPOUT="$(mktemp)" 2 | 3 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml > "${TEMPOUT}" \ 4 | && aws cloudformation deploy \ 5 | --stack-name "Karpenter-${CLUSTER_NAME}" \ 6 | --template-file "${TEMPOUT}" \ 7 | --capabilities CAPABILITY_NAMED_IAM \ 8 | --parameter-overrides "ClusterName=${CLUSTER_NAME}" 9 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step04-grant-access.sh: -------------------------------------------------------------------------------- 1 | eksctl create iamidentitymapping \ 2 | --username system:node:{{EC2PrivateDNSName}} \ 3 | --cluster "${CLUSTER_NAME}" \ 4 | --arn "arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}" \ 5 | --group system:bootstrappers \ 6 | --group system:nodes 7 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step05-controller-iam.sh: -------------------------------------------------------------------------------- 1 | eksctl create iamserviceaccount \ 2 | --cluster "${CLUSTER_NAME}" --name karpenter --namespace "${KARPENTER_NAMESPACE}" \ 3 | --role-name "${CLUSTER_NAME}-karpenter" \ 4 | --attach-policy-arn "arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}" \ 5 | --role-only \ 6 | --approve 7 | 8 | export KARPENTER_IAM_ROLE_ARN="arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter" 9 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step06-add-spot-role.sh: -------------------------------------------------------------------------------- 1 | aws iam create-service-linked-role --aws-service-name spot.amazonaws.com || true 2 | # If the role has already been successfully created, you will see: 3 | # An error occurred (InvalidInput) when calling the CreateServiceLinkedRole operation: Service role name AWSServiceRoleForEC2Spot has been taken in this account, please try a different suffix. 4 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart-fargate.sh: -------------------------------------------------------------------------------- 1 | # Logout of helm registry to perform an unauthenticated pull against the public ECR 2 | helm registry logout public.ecr.aws 3 | 4 | helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" --create-namespace \ 5 | --set "settings.clusterName=${CLUSTER_NAME}" \ 6 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 7 | --set controller.resources.requests.cpu=1 \ 8 | --set controller.resources.requests.memory=1Gi \ 9 | --set controller.resources.limits.cpu=1 \ 10 | --set controller.resources.limits.memory=1Gi \ 11 | --set serviceAccount.annotations."eks\.amazonaws\.com/role-arn"="arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter" \ 12 | --wait 13 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh: -------------------------------------------------------------------------------- 1 | # Logout of helm registry to perform an unauthenticated pull against the public ECR 2 | helm registry logout public.ecr.aws 3 | 4 | helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" --create-namespace \ 5 | --set "settings.clusterName=${CLUSTER_NAME}" \ 6 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 7 | --set controller.resources.requests.cpu=1 \ 8 | --set controller.resources.requests.memory=1Gi \ 9 | --set controller.resources.limits.cpu=1 \ 10 | --set controller.resources.limits.memory=1Gi \ 11 | --wait 12 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step09-add-prometheus-grafana.sh: -------------------------------------------------------------------------------- 1 | helm repo add grafana-charts https://grafana.github.io/helm-charts 2 | helm repo add prometheus-community https://prometheus-community.github.io/helm-charts 3 | helm repo update 4 | 5 | kubectl create namespace monitoring 6 | 7 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/prometheus-values.yaml | envsubst | tee prometheus-values.yaml 8 | helm install --namespace monitoring prometheus prometheus-community/prometheus --values prometheus-values.yaml 9 | 10 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/grafana-values.yaml | tee grafana-values.yaml 11 | helm install --namespace monitoring grafana grafana-charts/grafana --values grafana-values.yaml 12 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step10-add-grafana-port-forward.sh: -------------------------------------------------------------------------------- 1 | kubectl port-forward --namespace monitoring svc/grafana 3000:80 2 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step11-grafana-get-password.sh: -------------------------------------------------------------------------------- 1 | kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode 2 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step13-automatic-node-provisioning.sh: -------------------------------------------------------------------------------- 1 | cat < node-trust-policy.json 13 | 14 | aws iam create-role --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 15 | --assume-role-policy-document file://node-trust-policy.json 16 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/migrating-from-cas/scripts/step03-node-policies.sh: -------------------------------------------------------------------------------- 1 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 2 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKSWorkerNodePolicy" 3 | 4 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 5 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKS_CNI_Policy" 6 | 7 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 8 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly" 9 | 10 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 11 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonSSMManagedInstanceCore" 12 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/migrating-from-cas/scripts/step05-tag-subnets.sh: -------------------------------------------------------------------------------- 1 | for NODEGROUP in $(aws eks list-nodegroups --cluster-name "${CLUSTER_NAME}" --query 'nodegroups' --output text); do 2 | aws ec2 create-tags \ 3 | --tags "Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}" \ 4 | --resources $(aws eks describe-nodegroup --cluster-name "${CLUSTER_NAME}" \ 5 | --nodegroup-name "${NODEGROUP}" --query 'nodegroup.subnets' --output text ) 6 | done 7 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/migrating-from-cas/scripts/step07-edit-aws-auth.sh: -------------------------------------------------------------------------------- 1 | kubectl edit configmap aws-auth -n kube-system 2 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/migrating-from-cas/scripts/step08-generate-chart.sh: -------------------------------------------------------------------------------- 1 | helm template karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" \ 2 | --set "settings.clusterName=${CLUSTER_NAME}" \ 3 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 4 | --set "serviceAccount.annotations.eks\.amazonaws\.com/role-arn=arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterControllerRole-${CLUSTER_NAME}" \ 5 | --set controller.resources.requests.cpu=1 \ 6 | --set controller.resources.requests.memory=1Gi \ 7 | --set controller.resources.limits.cpu=1 \ 8 | --set controller.resources.limits.memory=1Gi > karpenter.yaml 9 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/migrating-from-cas/scripts/step09-deploy.sh: -------------------------------------------------------------------------------- 1 | kubectl create namespace "${KARPENTER_NAMESPACE}" || true 2 | kubectl create -f \ 3 | "https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodepools.yaml" 4 | kubectl create -f \ 5 | "https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml" 6 | kubectl create -f \ 7 | "https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodeclaims.yaml" 8 | kubectl apply -f karpenter.yaml 9 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/migrating-from-cas/scripts/step11-scale-cas.sh: -------------------------------------------------------------------------------- 1 | kubectl scale deploy/cluster-autoscaler -n kube-system --replicas=0 2 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/migrating-from-cas/scripts/step12-scale-multiple-ng.sh: -------------------------------------------------------------------------------- 1 | for NODEGROUP in $(aws eks list-nodegroups --cluster-name "${CLUSTER_NAME}" \ 2 | --query 'nodegroups' --output text); do aws eks update-nodegroup-config --cluster-name "${CLUSTER_NAME}" \ 3 | --nodegroup-name "${NODEGROUP}" \ 4 | --scaling-config "minSize=1,maxSize=1,desiredSize=1" 5 | done 6 | -------------------------------------------------------------------------------- /website/content/en/preview/getting-started/migrating-from-cas/scripts/step12-scale-single-ng.sh: -------------------------------------------------------------------------------- 1 | aws eks update-nodegroup-config --cluster-name "${CLUSTER_NAME}" \ 2 | --nodegroup-name "${NODEGROUP}" \ 3 | --scaling-config "minSize=2,maxSize=2,desiredSize=2" 4 | -------------------------------------------------------------------------------- /website/content/en/preview/reference/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Reference" 3 | linkTitle: "Reference" 4 | weight: 50 5 | description: > 6 | Reference documentation for Karpenter 7 | --- -------------------------------------------------------------------------------- /website/content/en/preview/tasks/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Tasks" 3 | linkTitle: "Tasks" 4 | weight: 25 5 | description: > 6 | Tasks to run with Karpenter 7 | cascade: 8 | type: docs 9 | --- 10 | 11 | -------------------------------------------------------------------------------- /website/content/en/preview/upgrading/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Upgrading" 3 | linkTitle: "Upgrading" 4 | weight: 30 5 | description: > 6 | Upgrading Karpenter guide and reference 7 | cascade: 8 | type: docs 9 | --- 10 | 11 | -------------------------------------------------------------------------------- /website/content/en/v0.32/contributing/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Contributing" 3 | linkTitle: "Contributing" 4 | weight: 40 5 | description: > 6 | Learn about how to contribute to Karpenter 7 | --- 8 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/getting-started-with-karpenter/grafana-values.yaml: -------------------------------------------------------------------------------- 1 | datasources: 2 | datasources.yaml: 3 | apiVersion: 1 4 | datasources: 5 | - name: Prometheus 6 | type: prometheus 7 | version: 1 8 | url: http://prometheus-server:80 9 | access: proxy 10 | dashboardProviders: 11 | dashboardproviders.yaml: 12 | apiVersion: 1 13 | providers: 14 | - name: 'default' 15 | orgId: 1 16 | folder: '' 17 | type: file 18 | disableDeletion: false 19 | editable: true 20 | options: 21 | path: /var/lib/grafana/dashboards/default 22 | dashboards: 23 | default: 24 | capacity-dashboard: 25 | url: https://karpenter.sh/v0.32/getting-started/getting-started-with-karpenter/karpenter-capacity-dashboard.json 26 | performance-dashboard: 27 | url: https://karpenter.sh/v0.32/getting-started/getting-started-with-karpenter/karpenter-performance-dashboard.json 28 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/getting-started-with-karpenter/prometheus-values.yaml: -------------------------------------------------------------------------------- 1 | alertmanager: 2 | persistentVolume: 3 | enabled: false 4 | 5 | server: 6 | fullnameOverride: prometheus-server 7 | persistentVolume: 8 | enabled: false 9 | 10 | extraScrapeConfigs: | 11 | - job_name: karpenter 12 | kubernetes_sd_configs: 13 | - role: endpoints 14 | namespaces: 15 | names: 16 | - $KARPENTER_NAMESPACE 17 | relabel_configs: 18 | - source_labels: [__meta_kubernetes_endpoint_port_name] 19 | regex: http-metrics 20 | action: keep 21 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/getting-started-with-karpenter/scripts/step01-config.sh: -------------------------------------------------------------------------------- 1 | export AWS_PARTITION="aws" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov 2 | export CLUSTER_NAME="${USER}-karpenter-demo" 3 | export AWS_DEFAULT_REGION="us-west-2" 4 | export AWS_ACCOUNT_ID="$(aws sts get-caller-identity --query Account --output text)" 5 | export TEMPOUT=$(mktemp) 6 | export ARM_AMI_ID="$(aws ssm get-parameter --name /aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2-arm64/recommended/image_id --query Parameter.Value --output text)" 7 | export AMD_AMI_ID="$(aws ssm get-parameter --name /aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2/recommended/image_id --query Parameter.Value --output text)" 8 | export GPU_AMI_ID="$(aws ssm get-parameter --name /aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2-gpu/recommended/image_id --query Parameter.Value --output text)" 9 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster-fargate.sh: -------------------------------------------------------------------------------- 1 | eksctl create cluster -f - << EOF 2 | --- 3 | apiVersion: eksctl.io/v1alpha5 4 | kind: ClusterConfig 5 | metadata: 6 | name: ${CLUSTER_NAME} 7 | region: ${AWS_DEFAULT_REGION} 8 | version: "${K8S_VERSION}" 9 | tags: 10 | karpenter.sh/discovery: ${CLUSTER_NAME} 11 | fargateProfiles: 12 | - name: karpenter 13 | selectors: 14 | - namespace: "${KARPENTER_NAMESPACE}" 15 | iam: 16 | withOIDC: true 17 | EOF 18 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/getting-started-with-karpenter/scripts/step03-iam-cloud-formation.sh: -------------------------------------------------------------------------------- 1 | TEMPOUT=$(mktemp) 2 | 3 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml > $TEMPOUT \ 4 | && aws cloudformation deploy \ 5 | --stack-name "Karpenter-${CLUSTER_NAME}" \ 6 | --template-file "${TEMPOUT}" \ 7 | --capabilities CAPABILITY_NAMED_IAM \ 8 | --parameter-overrides "ClusterName=${CLUSTER_NAME}" 9 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/getting-started-with-karpenter/scripts/step04-grant-access.sh: -------------------------------------------------------------------------------- 1 | eksctl create iamidentitymapping \ 2 | --username system:node:{{EC2PrivateDNSName}} \ 3 | --cluster "${CLUSTER_NAME}" \ 4 | --arn "arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}" \ 5 | --group system:bootstrappers \ 6 | --group system:nodes 7 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/getting-started-with-karpenter/scripts/step05-controller-iam.sh: -------------------------------------------------------------------------------- 1 | eksctl create iamserviceaccount \ 2 | --cluster "${CLUSTER_NAME}" --name karpenter --namespace "${KARPENTER_NAMESPACE}" \ 3 | --role-name "${CLUSTER_NAME}-karpenter" \ 4 | --attach-policy-arn "arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}" \ 5 | --role-only \ 6 | --approve 7 | 8 | export KARPENTER_IAM_ROLE_ARN="arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter" 9 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/getting-started-with-karpenter/scripts/step06-add-spot-role.sh: -------------------------------------------------------------------------------- 1 | aws iam create-service-linked-role --aws-service-name spot.amazonaws.com || true 2 | # If the role has already been successfully created, you will see: 3 | # An error occurred (InvalidInput) when calling the CreateServiceLinkedRole operation: Service role name AWSServiceRoleForEC2Spot has been taken in this account, please try a different suffix. 4 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh: -------------------------------------------------------------------------------- 1 | # Logout of helm registry to perform an unauthenticated pull against the public ECR 2 | helm registry logout public.ecr.aws 3 | 4 | helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" --create-namespace \ 5 | --set "serviceAccount.annotations.eks\.amazonaws\.com/role-arn=${KARPENTER_IAM_ROLE_ARN}" \ 6 | --set "settings.clusterName=${CLUSTER_NAME}" \ 7 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 8 | --set controller.resources.requests.cpu=1 \ 9 | --set controller.resources.requests.memory=1Gi \ 10 | --set controller.resources.limits.cpu=1 \ 11 | --set controller.resources.limits.memory=1Gi \ 12 | --wait 13 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/getting-started-with-karpenter/scripts/step09-add-prometheus-grafana.sh: -------------------------------------------------------------------------------- 1 | helm repo add grafana-charts https://grafana.github.io/helm-charts 2 | helm repo add prometheus-community https://prometheus-community.github.io/helm-charts 3 | helm repo update 4 | 5 | kubectl create namespace monitoring 6 | 7 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/prometheus-values.yaml | envsubst | tee prometheus-values.yaml 8 | helm install --namespace monitoring prometheus prometheus-community/prometheus --values prometheus-values.yaml 9 | 10 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/grafana-values.yaml | tee grafana-values.yaml 11 | helm install --namespace monitoring grafana grafana-charts/grafana --values grafana-values.yaml 12 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/getting-started-with-karpenter/scripts/step10-add-grafana-port-forward.sh: -------------------------------------------------------------------------------- 1 | kubectl port-forward --namespace monitoring svc/grafana 3000:80 2 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/getting-started-with-karpenter/scripts/step11-grafana-get-password.sh: -------------------------------------------------------------------------------- 1 | kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode 2 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/getting-started-with-karpenter/scripts/step13-automatic-node-provisioning.sh: -------------------------------------------------------------------------------- 1 | cat < node-trust-policy.json 13 | 14 | aws iam create-role --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 15 | --assume-role-policy-document file://node-trust-policy.json 16 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/migrating-from-cas/scripts/step03-node-policies.sh: -------------------------------------------------------------------------------- 1 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 2 | --policy-arn arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKSWorkerNodePolicy 3 | 4 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 5 | --policy-arn arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKS_CNI_Policy 6 | 7 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 8 | --policy-arn arn:${AWS_PARTITION}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly 9 | 10 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 11 | --policy-arn arn:${AWS_PARTITION}:iam::aws:policy/AmazonSSMManagedInstanceCore 12 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/migrating-from-cas/scripts/step05-tag-subnets.sh: -------------------------------------------------------------------------------- 1 | for NODEGROUP in $(aws eks list-nodegroups --cluster-name ${CLUSTER_NAME} \ 2 | --query 'nodegroups' --output text); do aws ec2 create-tags \ 3 | --tags "Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}" \ 4 | --resources $(aws eks describe-nodegroup --cluster-name ${CLUSTER_NAME} \ 5 | --nodegroup-name $NODEGROUP --query 'nodegroup.subnets' --output text ) 6 | done 7 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/migrating-from-cas/scripts/step07-edit-aws-auth.sh: -------------------------------------------------------------------------------- 1 | kubectl edit configmap aws-auth -n kube-system 2 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/migrating-from-cas/scripts/step08-generate-chart.sh: -------------------------------------------------------------------------------- 1 | helm template karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" \ 2 | --set "settings.clusterName=${CLUSTER_NAME}" \ 3 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 4 | --set "serviceAccount.annotations.eks\.amazonaws\.com/role-arn=arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterControllerRole-${CLUSTER_NAME}" \ 5 | --set controller.resources.requests.cpu=1 \ 6 | --set controller.resources.requests.memory=1Gi \ 7 | --set controller.resources.limits.cpu=1 \ 8 | --set controller.resources.limits.memory=1Gi > karpenter.yaml 9 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/migrating-from-cas/scripts/step11-scale-cas.sh: -------------------------------------------------------------------------------- 1 | kubectl scale deploy/cluster-autoscaler -n kube-system --replicas=0 2 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/migrating-from-cas/scripts/step12-scale-multiple-ng.sh: -------------------------------------------------------------------------------- 1 | for NODEGROUP in $(aws eks list-nodegroups --cluster-name ${CLUSTER_NAME} \ 2 | --query 'nodegroups' --output text); do aws eks update-nodegroup-config --cluster-name ${CLUSTER_NAME} \ 3 | --nodegroup-name ${NODEGROUP} \ 4 | --scaling-config "minSize=1,maxSize=1,desiredSize=1" 5 | done 6 | -------------------------------------------------------------------------------- /website/content/en/v0.32/getting-started/migrating-from-cas/scripts/step12-scale-single-ng.sh: -------------------------------------------------------------------------------- 1 | aws eks update-nodegroup-config --cluster-name ${CLUSTER_NAME} \ 2 | --nodegroup-name ${NODEGROUP} \ 3 | --scaling-config "minSize=2,maxSize=2,desiredSize=2" 4 | -------------------------------------------------------------------------------- /website/content/en/v0.32/reference/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Reference" 3 | linkTitle: "Reference" 4 | weight: 50 5 | description: > 6 | Reference documentation for Karpenter 7 | --- -------------------------------------------------------------------------------- /website/content/en/v0.32/tasks/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Tasks" 3 | linkTitle: "Tasks" 4 | weight: 25 5 | description: > 6 | Tasks to run with Karpenter 7 | cascade: 8 | type: docs 9 | --- 10 | 11 | -------------------------------------------------------------------------------- /website/content/en/v0.32/upgrading/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Upgrading" 3 | linkTitle: "Upgrading" 4 | weight: 30 5 | description: > 6 | Upgrading Karpenter guide and reference 7 | cascade: 8 | type: docs 9 | --- 10 | 11 | -------------------------------------------------------------------------------- /website/content/en/v1.0/contributing/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Contributing" 3 | linkTitle: "Contributing" 4 | weight: 40 5 | description: > 6 | Learn about how to contribute to Karpenter 7 | --- 8 | -------------------------------------------------------------------------------- /website/content/en/v1.0/contributing/documentation-updates.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Documentation Updates" 3 | linkTitle: "Documentation Updates" 4 | weight: 50 5 | description: > 6 | Information helpful for contributing simple documentation updates. 7 | --- 8 | 9 | - Documentation for https://karpenter.sh/docs/ is built under website/content/en/preview/. 10 | - Documentation updates should be made to the "preview" directory. Your changes will be promoted to website/content/en/docs/ by an automated process after the change has been merged. 11 | - Previews for your changes are built and available a few minutes after you push. Look for the "netlify Deploy Preview" link in a comment in your PR. 12 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/getting-started-with-karpenter/grafana-values.yaml: -------------------------------------------------------------------------------- 1 | datasources: 2 | datasources.yaml: 3 | apiVersion: 1 4 | datasources: 5 | - name: Prometheus 6 | type: prometheus 7 | version: 1 8 | url: http://prometheus-server:80 9 | access: proxy 10 | dashboardProviders: 11 | dashboardproviders.yaml: 12 | apiVersion: 1 13 | providers: 14 | - name: 'default' 15 | orgId: 1 16 | folder: '' 17 | type: file 18 | disableDeletion: false 19 | editable: true 20 | options: 21 | path: /var/lib/grafana/dashboards/default 22 | dashboards: 23 | default: 24 | capacity-dashboard: 25 | url: https://karpenter.sh/v1.0/getting-started/getting-started-with-karpenter/karpenter-capacity-dashboard.json 26 | performance-dashboard: 27 | url: https://karpenter.sh/v1.0/getting-started/getting-started-with-karpenter/karpenter-performance-dashboard.json 28 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/getting-started-with-karpenter/prometheus-values.yaml: -------------------------------------------------------------------------------- 1 | alertmanager: 2 | persistentVolume: 3 | enabled: false 4 | 5 | server: 6 | fullnameOverride: prometheus-server 7 | persistentVolume: 8 | enabled: false 9 | 10 | extraScrapeConfigs: | 11 | - job_name: karpenter 12 | kubernetes_sd_configs: 13 | - role: endpoints 14 | namespaces: 15 | names: 16 | - $KARPENTER_NAMESPACE 17 | relabel_configs: 18 | - source_labels: 19 | - __meta_kubernetes_endpoints_name 20 | - __meta_kubernetes_endpoint_port_name 21 | action: keep 22 | regex: karpenter;http-metrics 23 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step01-config.sh: -------------------------------------------------------------------------------- 1 | export AWS_PARTITION="aws" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov 2 | export CLUSTER_NAME="${USER}-karpenter-demo" 3 | export AWS_DEFAULT_REGION="us-west-2" 4 | export AWS_ACCOUNT_ID="$(aws sts get-caller-identity --query Account --output text)" 5 | export TEMPOUT="$(mktemp)" 6 | export ARM_AMI_ID="$(aws ssm get-parameter --name /aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2-arm64/recommended/image_id --query Parameter.Value --output text)" 7 | export AMD_AMI_ID="$(aws ssm get-parameter --name /aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2/recommended/image_id --query Parameter.Value --output text)" 8 | export GPU_AMI_ID="$(aws ssm get-parameter --name /aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2-gpu/recommended/image_id --query Parameter.Value --output text)" 9 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step03-iam-cloud-formation.sh: -------------------------------------------------------------------------------- 1 | TEMPOUT="$(mktemp)" 2 | 3 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml > "${TEMPOUT}" \ 4 | && aws cloudformation deploy \ 5 | --stack-name "Karpenter-${CLUSTER_NAME}" \ 6 | --template-file "${TEMPOUT}" \ 7 | --capabilities CAPABILITY_NAMED_IAM \ 8 | --parameter-overrides "ClusterName=${CLUSTER_NAME}" 9 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step04-grant-access.sh: -------------------------------------------------------------------------------- 1 | eksctl create iamidentitymapping \ 2 | --username system:node:{{EC2PrivateDNSName}} \ 3 | --cluster "${CLUSTER_NAME}" \ 4 | --arn "arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}" \ 5 | --group system:bootstrappers \ 6 | --group system:nodes 7 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step05-controller-iam.sh: -------------------------------------------------------------------------------- 1 | eksctl create iamserviceaccount \ 2 | --cluster "${CLUSTER_NAME}" --name karpenter --namespace "${KARPENTER_NAMESPACE}" \ 3 | --role-name "${CLUSTER_NAME}-karpenter" \ 4 | --attach-policy-arn "arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}" \ 5 | --role-only \ 6 | --approve 7 | 8 | export KARPENTER_IAM_ROLE_ARN="arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter" 9 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step06-add-spot-role.sh: -------------------------------------------------------------------------------- 1 | aws iam create-service-linked-role --aws-service-name spot.amazonaws.com || true 2 | # If the role has already been successfully created, you will see: 3 | # An error occurred (InvalidInput) when calling the CreateServiceLinkedRole operation: Service role name AWSServiceRoleForEC2Spot has been taken in this account, please try a different suffix. 4 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart-fargate.sh: -------------------------------------------------------------------------------- 1 | # Logout of helm registry to perform an unauthenticated pull against the public ECR 2 | helm registry logout public.ecr.aws 3 | 4 | helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" --create-namespace \ 5 | --set "settings.clusterName=${CLUSTER_NAME}" \ 6 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 7 | --set controller.resources.requests.cpu=1 \ 8 | --set controller.resources.requests.memory=1Gi \ 9 | --set controller.resources.limits.cpu=1 \ 10 | --set controller.resources.limits.memory=1Gi \ 11 | --set serviceAccount.annotations."eks\.amazonaws\.com/role-arn"="arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter" \ 12 | --wait 13 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh: -------------------------------------------------------------------------------- 1 | # Logout of helm registry to perform an unauthenticated pull against the public ECR 2 | helm registry logout public.ecr.aws 3 | 4 | helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" --create-namespace \ 5 | --set "settings.clusterName=${CLUSTER_NAME}" \ 6 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 7 | --set controller.resources.requests.cpu=1 \ 8 | --set controller.resources.requests.memory=1Gi \ 9 | --set controller.resources.limits.cpu=1 \ 10 | --set controller.resources.limits.memory=1Gi \ 11 | --wait 12 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step09-add-prometheus-grafana.sh: -------------------------------------------------------------------------------- 1 | helm repo add grafana-charts https://grafana.github.io/helm-charts 2 | helm repo add prometheus-community https://prometheus-community.github.io/helm-charts 3 | helm repo update 4 | 5 | kubectl create namespace monitoring 6 | 7 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/prometheus-values.yaml | envsubst | tee prometheus-values.yaml 8 | helm install --namespace monitoring prometheus prometheus-community/prometheus --values prometheus-values.yaml 9 | 10 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/grafana-values.yaml | tee grafana-values.yaml 11 | helm install --namespace monitoring grafana grafana-charts/grafana --values grafana-values.yaml 12 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step10-add-grafana-port-forward.sh: -------------------------------------------------------------------------------- 1 | kubectl port-forward --namespace monitoring svc/grafana 3000:80 2 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step11-grafana-get-password.sh: -------------------------------------------------------------------------------- 1 | kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode 2 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step13-automatic-node-provisioning.sh: -------------------------------------------------------------------------------- 1 | cat < node-trust-policy.json 13 | 14 | aws iam create-role --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 15 | --assume-role-policy-document file://node-trust-policy.json 16 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step03-node-policies.sh: -------------------------------------------------------------------------------- 1 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 2 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKSWorkerNodePolicy" 3 | 4 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 5 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKS_CNI_Policy" 6 | 7 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 8 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly" 9 | 10 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 11 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonSSMManagedInstanceCore" 12 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step05-tag-subnets.sh: -------------------------------------------------------------------------------- 1 | for NODEGROUP in $(aws eks list-nodegroups --cluster-name "${CLUSTER_NAME}" --query 'nodegroups' --output text); do 2 | aws ec2 create-tags \ 3 | --tags "Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}" \ 4 | --resources $(aws eks describe-nodegroup --cluster-name "${CLUSTER_NAME}" \ 5 | --nodegroup-name "${NODEGROUP}" --query 'nodegroup.subnets' --output text ) 6 | done 7 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step07-edit-aws-auth.sh: -------------------------------------------------------------------------------- 1 | kubectl edit configmap aws-auth -n kube-system 2 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step08-generate-chart.sh: -------------------------------------------------------------------------------- 1 | helm template karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" \ 2 | --set "settings.clusterName=${CLUSTER_NAME}" \ 3 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 4 | --set "serviceAccount.annotations.eks\.amazonaws\.com/role-arn=arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterControllerRole-${CLUSTER_NAME}" \ 5 | --set controller.resources.requests.cpu=1 \ 6 | --set controller.resources.requests.memory=1Gi \ 7 | --set controller.resources.limits.cpu=1 \ 8 | --set controller.resources.limits.memory=1Gi > karpenter.yaml 9 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step09-deploy.sh: -------------------------------------------------------------------------------- 1 | kubectl create namespace "${KARPENTER_NAMESPACE}" || true 2 | kubectl create -f \ 3 | "https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodepools.yaml" 4 | kubectl create -f \ 5 | "https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml" 6 | kubectl create -f \ 7 | "https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodeclaims.yaml" 8 | kubectl apply -f karpenter.yaml 9 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step11-scale-cas.sh: -------------------------------------------------------------------------------- 1 | kubectl scale deploy/cluster-autoscaler -n kube-system --replicas=0 2 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step12-scale-multiple-ng.sh: -------------------------------------------------------------------------------- 1 | for NODEGROUP in $(aws eks list-nodegroups --cluster-name "${CLUSTER_NAME}" \ 2 | --query 'nodegroups' --output text); do aws eks update-nodegroup-config --cluster-name "${CLUSTER_NAME}" \ 3 | --nodegroup-name "${NODEGROUP}" \ 4 | --scaling-config "minSize=1,maxSize=1,desiredSize=1" 5 | done 6 | -------------------------------------------------------------------------------- /website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step12-scale-single-ng.sh: -------------------------------------------------------------------------------- 1 | aws eks update-nodegroup-config --cluster-name "${CLUSTER_NAME}" \ 2 | --nodegroup-name "${NODEGROUP}" \ 3 | --scaling-config "minSize=2,maxSize=2,desiredSize=2" 4 | -------------------------------------------------------------------------------- /website/content/en/v1.0/reference/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Reference" 3 | linkTitle: "Reference" 4 | weight: 50 5 | description: > 6 | Reference documentation for Karpenter 7 | --- -------------------------------------------------------------------------------- /website/content/en/v1.0/tasks/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Tasks" 3 | linkTitle: "Tasks" 4 | weight: 25 5 | description: > 6 | Tasks to run with Karpenter 7 | cascade: 8 | type: docs 9 | --- 10 | 11 | -------------------------------------------------------------------------------- /website/content/en/v1.0/upgrading/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Upgrading" 3 | linkTitle: "Upgrading" 4 | weight: 30 5 | description: > 6 | Upgrading Karpenter guide and reference 7 | cascade: 8 | type: docs 9 | --- 10 | 11 | -------------------------------------------------------------------------------- /website/content/en/v1.3/contributing/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Contributing" 3 | linkTitle: "Contributing" 4 | weight: 40 5 | description: > 6 | Learn about how to contribute to Karpenter 7 | --- 8 | -------------------------------------------------------------------------------- /website/content/en/v1.3/contributing/documentation-updates.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Documentation Updates" 3 | linkTitle: "Documentation Updates" 4 | weight: 50 5 | description: > 6 | Information helpful for contributing simple documentation updates. 7 | --- 8 | 9 | - Documentation for https://karpenter.sh/docs/ is built under website/content/en/preview/. 10 | - Documentation updates should be made to the "preview" directory. Your changes will be promoted to website/content/en/docs/ by an automated process after the change has been merged. 11 | - Previews for your changes are built and available a few minutes after you push. Look for the "netlify Deploy Preview" link in a comment in your PR. 12 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/getting-started-with-karpenter/grafana-values.yaml: -------------------------------------------------------------------------------- 1 | datasources: 2 | datasources.yaml: 3 | apiVersion: 1 4 | datasources: 5 | - name: Prometheus 6 | type: prometheus 7 | version: 1 8 | url: http://prometheus-server:80 9 | access: proxy 10 | dashboardProviders: 11 | dashboardproviders.yaml: 12 | apiVersion: 1 13 | providers: 14 | - name: 'default' 15 | orgId: 1 16 | folder: '' 17 | type: file 18 | disableDeletion: false 19 | editable: true 20 | options: 21 | path: /var/lib/grafana/dashboards/default 22 | dashboards: 23 | default: 24 | capacity-dashboard: 25 | url: https://karpenter.sh/v1.3/getting-started/getting-started-with-karpenter/karpenter-capacity-dashboard.json 26 | performance-dashboard: 27 | url: https://karpenter.sh/v1.3/getting-started/getting-started-with-karpenter/karpenter-performance-dashboard.json 28 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/getting-started-with-karpenter/prometheus-values.yaml: -------------------------------------------------------------------------------- 1 | alertmanager: 2 | persistentVolume: 3 | enabled: false 4 | 5 | server: 6 | fullnameOverride: prometheus-server 7 | persistentVolume: 8 | enabled: false 9 | 10 | extraScrapeConfigs: | 11 | - job_name: karpenter 12 | kubernetes_sd_configs: 13 | - role: endpoints 14 | namespaces: 15 | names: 16 | - $KARPENTER_NAMESPACE 17 | relabel_configs: 18 | - source_labels: 19 | - __meta_kubernetes_endpoints_name 20 | - __meta_kubernetes_endpoint_port_name 21 | action: keep 22 | regex: karpenter;http-metrics 23 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/getting-started-with-karpenter/scripts/step01-config.sh: -------------------------------------------------------------------------------- 1 | export AWS_PARTITION="aws" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov 2 | export CLUSTER_NAME="${USER}-karpenter-demo" 3 | export AWS_DEFAULT_REGION="us-west-2" 4 | export AWS_ACCOUNT_ID="$(aws sts get-caller-identity --query Account --output text)" 5 | export TEMPOUT="$(mktemp)" 6 | export ALIAS_VERSION="$(aws ssm get-parameter --name "/aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2023/x86_64/standard/recommended/image_id" --query Parameter.Value | xargs aws ec2 describe-images --query 'Images[0].Name' --image-ids | sed -r 's/^.*(v[[:digit:]]+).*$/\1/')" 7 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/getting-started-with-karpenter/scripts/step03-iam-cloud-formation.sh: -------------------------------------------------------------------------------- 1 | TEMPOUT="$(mktemp)" 2 | 3 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml > "${TEMPOUT}" \ 4 | && aws cloudformation deploy \ 5 | --stack-name "Karpenter-${CLUSTER_NAME}" \ 6 | --template-file "${TEMPOUT}" \ 7 | --capabilities CAPABILITY_NAMED_IAM \ 8 | --parameter-overrides "ClusterName=${CLUSTER_NAME}" 9 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/getting-started-with-karpenter/scripts/step04-grant-access.sh: -------------------------------------------------------------------------------- 1 | eksctl create iamidentitymapping \ 2 | --username system:node:{{EC2PrivateDNSName}} \ 3 | --cluster "${CLUSTER_NAME}" \ 4 | --arn "arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}" \ 5 | --group system:bootstrappers \ 6 | --group system:nodes 7 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/getting-started-with-karpenter/scripts/step05-controller-iam.sh: -------------------------------------------------------------------------------- 1 | eksctl create iamserviceaccount \ 2 | --cluster "${CLUSTER_NAME}" --name karpenter --namespace "${KARPENTER_NAMESPACE}" \ 3 | --role-name "${CLUSTER_NAME}-karpenter" \ 4 | --attach-policy-arn "arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}" \ 5 | --role-only \ 6 | --approve 7 | 8 | export KARPENTER_IAM_ROLE_ARN="arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter" 9 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/getting-started-with-karpenter/scripts/step06-add-spot-role.sh: -------------------------------------------------------------------------------- 1 | aws iam create-service-linked-role --aws-service-name spot.amazonaws.com || true 2 | # If the role has already been successfully created, you will see: 3 | # An error occurred (InvalidInput) when calling the CreateServiceLinkedRole operation: Service role name AWSServiceRoleForEC2Spot has been taken in this account, please try a different suffix. 4 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart-fargate.sh: -------------------------------------------------------------------------------- 1 | # Logout of helm registry to perform an unauthenticated pull against the public ECR 2 | helm registry logout public.ecr.aws 3 | 4 | helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" --create-namespace \ 5 | --set "settings.clusterName=${CLUSTER_NAME}" \ 6 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 7 | --set controller.resources.requests.cpu=1 \ 8 | --set controller.resources.requests.memory=1Gi \ 9 | --set controller.resources.limits.cpu=1 \ 10 | --set controller.resources.limits.memory=1Gi \ 11 | --set serviceAccount.annotations."eks\.amazonaws\.com/role-arn"="arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter" \ 12 | --wait 13 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh: -------------------------------------------------------------------------------- 1 | # Logout of helm registry to perform an unauthenticated pull against the public ECR 2 | helm registry logout public.ecr.aws 3 | 4 | helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" --create-namespace \ 5 | --set "settings.clusterName=${CLUSTER_NAME}" \ 6 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 7 | --set controller.resources.requests.cpu=1 \ 8 | --set controller.resources.requests.memory=1Gi \ 9 | --set controller.resources.limits.cpu=1 \ 10 | --set controller.resources.limits.memory=1Gi \ 11 | --wait 12 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/getting-started-with-karpenter/scripts/step09-add-prometheus-grafana.sh: -------------------------------------------------------------------------------- 1 | helm repo add grafana-charts https://grafana.github.io/helm-charts 2 | helm repo add prometheus-community https://prometheus-community.github.io/helm-charts 3 | helm repo update 4 | 5 | kubectl create namespace monitoring 6 | 7 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/prometheus-values.yaml | envsubst | tee prometheus-values.yaml 8 | helm install --namespace monitoring prometheus prometheus-community/prometheus --values prometheus-values.yaml 9 | 10 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/grafana-values.yaml | tee grafana-values.yaml 11 | helm install --namespace monitoring grafana grafana-charts/grafana --values grafana-values.yaml 12 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/getting-started-with-karpenter/scripts/step10-add-grafana-port-forward.sh: -------------------------------------------------------------------------------- 1 | kubectl port-forward --namespace monitoring svc/grafana 3000:80 2 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/getting-started-with-karpenter/scripts/step11-grafana-get-password.sh: -------------------------------------------------------------------------------- 1 | kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode 2 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/getting-started-with-karpenter/scripts/step13-automatic-node-provisioning.sh: -------------------------------------------------------------------------------- 1 | cat < node-trust-policy.json 13 | 14 | aws iam create-role --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 15 | --assume-role-policy-document file://node-trust-policy.json 16 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/migrating-from-cas/scripts/step03-node-policies.sh: -------------------------------------------------------------------------------- 1 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 2 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKSWorkerNodePolicy" 3 | 4 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 5 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKS_CNI_Policy" 6 | 7 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 8 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly" 9 | 10 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 11 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonSSMManagedInstanceCore" 12 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/migrating-from-cas/scripts/step05-tag-subnets.sh: -------------------------------------------------------------------------------- 1 | for NODEGROUP in $(aws eks list-nodegroups --cluster-name "${CLUSTER_NAME}" --query 'nodegroups' --output text); do 2 | aws ec2 create-tags \ 3 | --tags "Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}" \ 4 | --resources $(aws eks describe-nodegroup --cluster-name "${CLUSTER_NAME}" \ 5 | --nodegroup-name "${NODEGROUP}" --query 'nodegroup.subnets' --output text ) 6 | done 7 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/migrating-from-cas/scripts/step07-edit-aws-auth.sh: -------------------------------------------------------------------------------- 1 | kubectl edit configmap aws-auth -n kube-system 2 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/migrating-from-cas/scripts/step08-generate-chart.sh: -------------------------------------------------------------------------------- 1 | helm template karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" \ 2 | --set "settings.clusterName=${CLUSTER_NAME}" \ 3 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 4 | --set "serviceAccount.annotations.eks\.amazonaws\.com/role-arn=arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterControllerRole-${CLUSTER_NAME}" \ 5 | --set controller.resources.requests.cpu=1 \ 6 | --set controller.resources.requests.memory=1Gi \ 7 | --set controller.resources.limits.cpu=1 \ 8 | --set controller.resources.limits.memory=1Gi > karpenter.yaml 9 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/migrating-from-cas/scripts/step09-deploy.sh: -------------------------------------------------------------------------------- 1 | kubectl create namespace "${KARPENTER_NAMESPACE}" || true 2 | kubectl create -f \ 3 | "https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodepools.yaml" 4 | kubectl create -f \ 5 | "https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml" 6 | kubectl create -f \ 7 | "https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodeclaims.yaml" 8 | kubectl apply -f karpenter.yaml 9 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/migrating-from-cas/scripts/step11-scale-cas.sh: -------------------------------------------------------------------------------- 1 | kubectl scale deploy/cluster-autoscaler -n kube-system --replicas=0 2 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/migrating-from-cas/scripts/step12-scale-multiple-ng.sh: -------------------------------------------------------------------------------- 1 | for NODEGROUP in $(aws eks list-nodegroups --cluster-name "${CLUSTER_NAME}" \ 2 | --query 'nodegroups' --output text); do aws eks update-nodegroup-config --cluster-name "${CLUSTER_NAME}" \ 3 | --nodegroup-name "${NODEGROUP}" \ 4 | --scaling-config "minSize=1,maxSize=1,desiredSize=1" 5 | done 6 | -------------------------------------------------------------------------------- /website/content/en/v1.3/getting-started/migrating-from-cas/scripts/step12-scale-single-ng.sh: -------------------------------------------------------------------------------- 1 | aws eks update-nodegroup-config --cluster-name "${CLUSTER_NAME}" \ 2 | --nodegroup-name "${NODEGROUP}" \ 3 | --scaling-config "minSize=2,maxSize=2,desiredSize=2" 4 | -------------------------------------------------------------------------------- /website/content/en/v1.3/reference/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Reference" 3 | linkTitle: "Reference" 4 | weight: 50 5 | description: > 6 | Reference documentation for Karpenter 7 | --- -------------------------------------------------------------------------------- /website/content/en/v1.3/tasks/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Tasks" 3 | linkTitle: "Tasks" 4 | weight: 25 5 | description: > 6 | Tasks to run with Karpenter 7 | cascade: 8 | type: docs 9 | --- 10 | 11 | -------------------------------------------------------------------------------- /website/content/en/v1.3/upgrading/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Upgrading" 3 | linkTitle: "Upgrading" 4 | weight: 30 5 | description: > 6 | Upgrading Karpenter guide and reference 7 | cascade: 8 | type: docs 9 | --- 10 | 11 | -------------------------------------------------------------------------------- /website/content/en/v1.4/contributing/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Contributing" 3 | linkTitle: "Contributing" 4 | weight: 40 5 | description: > 6 | Learn about how to contribute to Karpenter 7 | --- 8 | -------------------------------------------------------------------------------- /website/content/en/v1.4/contributing/documentation-updates.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Documentation Updates" 3 | linkTitle: "Documentation Updates" 4 | weight: 50 5 | description: > 6 | Information helpful for contributing simple documentation updates. 7 | --- 8 | 9 | - Documentation for https://karpenter.sh/docs/ is built under website/content/en/preview/. 10 | - Documentation updates should be made to the "preview" directory. Your changes will be promoted to website/content/en/docs/ by an automated process after the change has been merged. 11 | - Previews for your changes are built and available a few minutes after you push. Look for the "netlify Deploy Preview" link in a comment in your PR. 12 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/getting-started-with-karpenter/grafana-values.yaml: -------------------------------------------------------------------------------- 1 | datasources: 2 | datasources.yaml: 3 | apiVersion: 1 4 | datasources: 5 | - name: Prometheus 6 | type: prometheus 7 | version: 1 8 | url: http://prometheus-server:80 9 | access: proxy 10 | dashboardProviders: 11 | dashboardproviders.yaml: 12 | apiVersion: 1 13 | providers: 14 | - name: 'default' 15 | orgId: 1 16 | folder: '' 17 | type: file 18 | disableDeletion: false 19 | editable: true 20 | options: 21 | path: /var/lib/grafana/dashboards/default 22 | dashboards: 23 | default: 24 | capacity-dashboard: 25 | url: https://karpenter.sh/v1.4/getting-started/getting-started-with-karpenter/karpenter-capacity-dashboard.json 26 | performance-dashboard: 27 | url: https://karpenter.sh/v1.4/getting-started/getting-started-with-karpenter/karpenter-performance-dashboard.json 28 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/getting-started-with-karpenter/prometheus-values.yaml: -------------------------------------------------------------------------------- 1 | alertmanager: 2 | persistentVolume: 3 | enabled: false 4 | 5 | server: 6 | fullnameOverride: prometheus-server 7 | persistentVolume: 8 | enabled: false 9 | 10 | extraScrapeConfigs: | 11 | - job_name: karpenter 12 | kubernetes_sd_configs: 13 | - role: endpoints 14 | namespaces: 15 | names: 16 | - $KARPENTER_NAMESPACE 17 | relabel_configs: 18 | - source_labels: 19 | - __meta_kubernetes_endpoints_name 20 | - __meta_kubernetes_endpoint_port_name 21 | action: keep 22 | regex: karpenter;http-metrics 23 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/getting-started-with-karpenter/scripts/step01-config.sh: -------------------------------------------------------------------------------- 1 | export AWS_PARTITION="aws" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov 2 | export CLUSTER_NAME="${USER}-karpenter-demo" 3 | export AWS_DEFAULT_REGION="us-west-2" 4 | export AWS_ACCOUNT_ID="$(aws sts get-caller-identity --query Account --output text)" 5 | export TEMPOUT="$(mktemp)" 6 | export ALIAS_VERSION="$(aws ssm get-parameter --name "/aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2023/x86_64/standard/recommended/image_id" --query Parameter.Value | xargs aws ec2 describe-images --query 'Images[0].Name' --image-ids | sed -r 's/^.*(v[[:digit:]]+).*$/\1/')" 7 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/getting-started-with-karpenter/scripts/step03-iam-cloud-formation.sh: -------------------------------------------------------------------------------- 1 | TEMPOUT="$(mktemp)" 2 | 3 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml > "${TEMPOUT}" \ 4 | && aws cloudformation deploy \ 5 | --stack-name "Karpenter-${CLUSTER_NAME}" \ 6 | --template-file "${TEMPOUT}" \ 7 | --capabilities CAPABILITY_NAMED_IAM \ 8 | --parameter-overrides "ClusterName=${CLUSTER_NAME}" 9 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/getting-started-with-karpenter/scripts/step04-grant-access.sh: -------------------------------------------------------------------------------- 1 | eksctl create iamidentitymapping \ 2 | --username system:node:{{EC2PrivateDNSName}} \ 3 | --cluster "${CLUSTER_NAME}" \ 4 | --arn "arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}" \ 5 | --group system:bootstrappers \ 6 | --group system:nodes 7 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/getting-started-with-karpenter/scripts/step05-controller-iam.sh: -------------------------------------------------------------------------------- 1 | eksctl create iamserviceaccount \ 2 | --cluster "${CLUSTER_NAME}" --name karpenter --namespace "${KARPENTER_NAMESPACE}" \ 3 | --role-name "${CLUSTER_NAME}-karpenter" \ 4 | --attach-policy-arn "arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}" \ 5 | --role-only \ 6 | --approve 7 | 8 | export KARPENTER_IAM_ROLE_ARN="arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter" 9 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/getting-started-with-karpenter/scripts/step06-add-spot-role.sh: -------------------------------------------------------------------------------- 1 | aws iam create-service-linked-role --aws-service-name spot.amazonaws.com || true 2 | # If the role has already been successfully created, you will see: 3 | # An error occurred (InvalidInput) when calling the CreateServiceLinkedRole operation: Service role name AWSServiceRoleForEC2Spot has been taken in this account, please try a different suffix. 4 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart-fargate.sh: -------------------------------------------------------------------------------- 1 | # Logout of helm registry to perform an unauthenticated pull against the public ECR 2 | helm registry logout public.ecr.aws 3 | 4 | helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" --create-namespace \ 5 | --set "settings.clusterName=${CLUSTER_NAME}" \ 6 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 7 | --set controller.resources.requests.cpu=1 \ 8 | --set controller.resources.requests.memory=1Gi \ 9 | --set controller.resources.limits.cpu=1 \ 10 | --set controller.resources.limits.memory=1Gi \ 11 | --set serviceAccount.annotations."eks\.amazonaws\.com/role-arn"="arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter" \ 12 | --wait 13 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh: -------------------------------------------------------------------------------- 1 | # Logout of helm registry to perform an unauthenticated pull against the public ECR 2 | helm registry logout public.ecr.aws 3 | 4 | helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" --create-namespace \ 5 | --set "settings.clusterName=${CLUSTER_NAME}" \ 6 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 7 | --set controller.resources.requests.cpu=1 \ 8 | --set controller.resources.requests.memory=1Gi \ 9 | --set controller.resources.limits.cpu=1 \ 10 | --set controller.resources.limits.memory=1Gi \ 11 | --wait 12 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/getting-started-with-karpenter/scripts/step09-add-prometheus-grafana.sh: -------------------------------------------------------------------------------- 1 | helm repo add grafana-charts https://grafana.github.io/helm-charts 2 | helm repo add prometheus-community https://prometheus-community.github.io/helm-charts 3 | helm repo update 4 | 5 | kubectl create namespace monitoring 6 | 7 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/prometheus-values.yaml | envsubst | tee prometheus-values.yaml 8 | helm install --namespace monitoring prometheus prometheus-community/prometheus --values prometheus-values.yaml 9 | 10 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/grafana-values.yaml | tee grafana-values.yaml 11 | helm install --namespace monitoring grafana grafana-charts/grafana --values grafana-values.yaml 12 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/getting-started-with-karpenter/scripts/step10-add-grafana-port-forward.sh: -------------------------------------------------------------------------------- 1 | kubectl port-forward --namespace monitoring svc/grafana 3000:80 2 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/getting-started-with-karpenter/scripts/step11-grafana-get-password.sh: -------------------------------------------------------------------------------- 1 | kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode 2 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/getting-started-with-karpenter/scripts/step13-automatic-node-provisioning.sh: -------------------------------------------------------------------------------- 1 | cat < node-trust-policy.json 13 | 14 | aws iam create-role --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 15 | --assume-role-policy-document file://node-trust-policy.json 16 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/migrating-from-cas/scripts/step03-node-policies.sh: -------------------------------------------------------------------------------- 1 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 2 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKSWorkerNodePolicy" 3 | 4 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 5 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKS_CNI_Policy" 6 | 7 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 8 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly" 9 | 10 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 11 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonSSMManagedInstanceCore" 12 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/migrating-from-cas/scripts/step05-tag-subnets.sh: -------------------------------------------------------------------------------- 1 | for NODEGROUP in $(aws eks list-nodegroups --cluster-name "${CLUSTER_NAME}" --query 'nodegroups' --output text); do 2 | aws ec2 create-tags \ 3 | --tags "Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}" \ 4 | --resources $(aws eks describe-nodegroup --cluster-name "${CLUSTER_NAME}" \ 5 | --nodegroup-name "${NODEGROUP}" --query 'nodegroup.subnets' --output text ) 6 | done 7 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/migrating-from-cas/scripts/step07-edit-aws-auth.sh: -------------------------------------------------------------------------------- 1 | kubectl edit configmap aws-auth -n kube-system 2 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/migrating-from-cas/scripts/step08-generate-chart.sh: -------------------------------------------------------------------------------- 1 | helm template karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" \ 2 | --set "settings.clusterName=${CLUSTER_NAME}" \ 3 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 4 | --set "serviceAccount.annotations.eks\.amazonaws\.com/role-arn=arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterControllerRole-${CLUSTER_NAME}" \ 5 | --set controller.resources.requests.cpu=1 \ 6 | --set controller.resources.requests.memory=1Gi \ 7 | --set controller.resources.limits.cpu=1 \ 8 | --set controller.resources.limits.memory=1Gi > karpenter.yaml 9 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/migrating-from-cas/scripts/step09-deploy.sh: -------------------------------------------------------------------------------- 1 | kubectl create namespace "${KARPENTER_NAMESPACE}" || true 2 | kubectl create -f \ 3 | "https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodepools.yaml" 4 | kubectl create -f \ 5 | "https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml" 6 | kubectl create -f \ 7 | "https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodeclaims.yaml" 8 | kubectl apply -f karpenter.yaml 9 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/migrating-from-cas/scripts/step11-scale-cas.sh: -------------------------------------------------------------------------------- 1 | kubectl scale deploy/cluster-autoscaler -n kube-system --replicas=0 2 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/migrating-from-cas/scripts/step12-scale-multiple-ng.sh: -------------------------------------------------------------------------------- 1 | for NODEGROUP in $(aws eks list-nodegroups --cluster-name "${CLUSTER_NAME}" \ 2 | --query 'nodegroups' --output text); do aws eks update-nodegroup-config --cluster-name "${CLUSTER_NAME}" \ 3 | --nodegroup-name "${NODEGROUP}" \ 4 | --scaling-config "minSize=1,maxSize=1,desiredSize=1" 5 | done 6 | -------------------------------------------------------------------------------- /website/content/en/v1.4/getting-started/migrating-from-cas/scripts/step12-scale-single-ng.sh: -------------------------------------------------------------------------------- 1 | aws eks update-nodegroup-config --cluster-name "${CLUSTER_NAME}" \ 2 | --nodegroup-name "${NODEGROUP}" \ 3 | --scaling-config "minSize=2,maxSize=2,desiredSize=2" 4 | -------------------------------------------------------------------------------- /website/content/en/v1.4/reference/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Reference" 3 | linkTitle: "Reference" 4 | weight: 50 5 | description: > 6 | Reference documentation for Karpenter 7 | --- -------------------------------------------------------------------------------- /website/content/en/v1.4/tasks/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Tasks" 3 | linkTitle: "Tasks" 4 | weight: 25 5 | description: > 6 | Tasks to run with Karpenter 7 | cascade: 8 | type: docs 9 | --- 10 | 11 | -------------------------------------------------------------------------------- /website/content/en/v1.4/upgrading/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Upgrading" 3 | linkTitle: "Upgrading" 4 | weight: 30 5 | description: > 6 | Upgrading Karpenter guide and reference 7 | cascade: 8 | type: docs 9 | --- 10 | 11 | -------------------------------------------------------------------------------- /website/content/en/v1.5/contributing/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Contributing" 3 | linkTitle: "Contributing" 4 | weight: 40 5 | description: > 6 | Learn about how to contribute to Karpenter 7 | --- 8 | -------------------------------------------------------------------------------- /website/content/en/v1.5/contributing/documentation-updates.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Documentation Updates" 3 | linkTitle: "Documentation Updates" 4 | weight: 50 5 | description: > 6 | Information helpful for contributing simple documentation updates. 7 | --- 8 | 9 | - Documentation for https://karpenter.sh/docs/ is built under website/content/en/preview/. 10 | - Documentation updates should be made to the "preview" directory. Your changes will be promoted to website/content/en/docs/ by an automated process after the change has been merged. 11 | - Previews for your changes are built and available a few minutes after you push. Look for the "netlify Deploy Preview" link in a comment in your PR. 12 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/getting-started-with-karpenter/grafana-values.yaml: -------------------------------------------------------------------------------- 1 | datasources: 2 | datasources.yaml: 3 | apiVersion: 1 4 | datasources: 5 | - name: Prometheus 6 | type: prometheus 7 | version: 1 8 | url: http://prometheus-server:80 9 | access: proxy 10 | dashboardProviders: 11 | dashboardproviders.yaml: 12 | apiVersion: 1 13 | providers: 14 | - name: 'default' 15 | orgId: 1 16 | folder: '' 17 | type: file 18 | disableDeletion: false 19 | editable: true 20 | options: 21 | path: /var/lib/grafana/dashboards/default 22 | dashboards: 23 | default: 24 | capacity-dashboard: 25 | url: https://karpenter.sh/v1.5/getting-started/getting-started-with-karpenter/karpenter-capacity-dashboard.json 26 | performance-dashboard: 27 | url: https://karpenter.sh/v1.5/getting-started/getting-started-with-karpenter/karpenter-performance-dashboard.json 28 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/getting-started-with-karpenter/prometheus-values.yaml: -------------------------------------------------------------------------------- 1 | alertmanager: 2 | persistentVolume: 3 | enabled: false 4 | 5 | server: 6 | fullnameOverride: prometheus-server 7 | persistentVolume: 8 | enabled: false 9 | 10 | extraScrapeConfigs: | 11 | - job_name: karpenter 12 | kubernetes_sd_configs: 13 | - role: endpoints 14 | namespaces: 15 | names: 16 | - $KARPENTER_NAMESPACE 17 | relabel_configs: 18 | - source_labels: 19 | - __meta_kubernetes_endpoints_name 20 | - __meta_kubernetes_endpoint_port_name 21 | action: keep 22 | regex: karpenter;http-metrics 23 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/getting-started-with-karpenter/scripts/step01-config.sh: -------------------------------------------------------------------------------- 1 | export AWS_PARTITION="aws" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov 2 | export CLUSTER_NAME="${USER}-karpenter-demo" 3 | export AWS_DEFAULT_REGION="us-west-2" 4 | export AWS_ACCOUNT_ID="$(aws sts get-caller-identity --query Account --output text)" 5 | export TEMPOUT="$(mktemp)" 6 | export ALIAS_VERSION="$(aws ssm get-parameter --name "/aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2023/x86_64/standard/recommended/image_id" --query Parameter.Value | xargs aws ec2 describe-images --query 'Images[0].Name' --image-ids | sed -r 's/^.*(v[[:digit:]]+).*$/\1/')" 7 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/getting-started-with-karpenter/scripts/step03-iam-cloud-formation.sh: -------------------------------------------------------------------------------- 1 | TEMPOUT="$(mktemp)" 2 | 3 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml > "${TEMPOUT}" \ 4 | && aws cloudformation deploy \ 5 | --stack-name "Karpenter-${CLUSTER_NAME}" \ 6 | --template-file "${TEMPOUT}" \ 7 | --capabilities CAPABILITY_NAMED_IAM \ 8 | --parameter-overrides "ClusterName=${CLUSTER_NAME}" 9 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/getting-started-with-karpenter/scripts/step04-grant-access.sh: -------------------------------------------------------------------------------- 1 | eksctl create iamidentitymapping \ 2 | --username system:node:{{EC2PrivateDNSName}} \ 3 | --cluster "${CLUSTER_NAME}" \ 4 | --arn "arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}" \ 5 | --group system:bootstrappers \ 6 | --group system:nodes 7 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/getting-started-with-karpenter/scripts/step05-controller-iam.sh: -------------------------------------------------------------------------------- 1 | eksctl create iamserviceaccount \ 2 | --cluster "${CLUSTER_NAME}" --name karpenter --namespace "${KARPENTER_NAMESPACE}" \ 3 | --role-name "${CLUSTER_NAME}-karpenter" \ 4 | --attach-policy-arn "arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}" \ 5 | --role-only \ 6 | --approve 7 | 8 | export KARPENTER_IAM_ROLE_ARN="arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter" 9 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/getting-started-with-karpenter/scripts/step06-add-spot-role.sh: -------------------------------------------------------------------------------- 1 | aws iam create-service-linked-role --aws-service-name spot.amazonaws.com || true 2 | # If the role has already been successfully created, you will see: 3 | # An error occurred (InvalidInput) when calling the CreateServiceLinkedRole operation: Service role name AWSServiceRoleForEC2Spot has been taken in this account, please try a different suffix. 4 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart-fargate.sh: -------------------------------------------------------------------------------- 1 | # Logout of helm registry to perform an unauthenticated pull against the public ECR 2 | helm registry logout public.ecr.aws 3 | 4 | helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" --create-namespace \ 5 | --set "settings.clusterName=${CLUSTER_NAME}" \ 6 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 7 | --set controller.resources.requests.cpu=1 \ 8 | --set controller.resources.requests.memory=1Gi \ 9 | --set controller.resources.limits.cpu=1 \ 10 | --set controller.resources.limits.memory=1Gi \ 11 | --set serviceAccount.annotations."eks\.amazonaws\.com/role-arn"="arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter" \ 12 | --wait 13 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh: -------------------------------------------------------------------------------- 1 | # Logout of helm registry to perform an unauthenticated pull against the public ECR 2 | helm registry logout public.ecr.aws 3 | 4 | helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" --create-namespace \ 5 | --set "settings.clusterName=${CLUSTER_NAME}" \ 6 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 7 | --set controller.resources.requests.cpu=1 \ 8 | --set controller.resources.requests.memory=1Gi \ 9 | --set controller.resources.limits.cpu=1 \ 10 | --set controller.resources.limits.memory=1Gi \ 11 | --wait 12 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/getting-started-with-karpenter/scripts/step09-add-prometheus-grafana.sh: -------------------------------------------------------------------------------- 1 | helm repo add grafana-charts https://grafana.github.io/helm-charts 2 | helm repo add prometheus-community https://prometheus-community.github.io/helm-charts 3 | helm repo update 4 | 5 | kubectl create namespace monitoring 6 | 7 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/prometheus-values.yaml | envsubst | tee prometheus-values.yaml 8 | helm install --namespace monitoring prometheus prometheus-community/prometheus --values prometheus-values.yaml 9 | 10 | curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v"${KARPENTER_VERSION}"/website/content/en/preview/getting-started/getting-started-with-karpenter/grafana-values.yaml | tee grafana-values.yaml 11 | helm install --namespace monitoring grafana grafana-charts/grafana --values grafana-values.yaml 12 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/getting-started-with-karpenter/scripts/step10-add-grafana-port-forward.sh: -------------------------------------------------------------------------------- 1 | kubectl port-forward --namespace monitoring svc/grafana 3000:80 2 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/getting-started-with-karpenter/scripts/step11-grafana-get-password.sh: -------------------------------------------------------------------------------- 1 | kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode 2 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/getting-started-with-karpenter/scripts/step13-automatic-node-provisioning.sh: -------------------------------------------------------------------------------- 1 | cat < node-trust-policy.json 13 | 14 | aws iam create-role --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 15 | --assume-role-policy-document file://node-trust-policy.json 16 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/migrating-from-cas/scripts/step03-node-policies.sh: -------------------------------------------------------------------------------- 1 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 2 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKSWorkerNodePolicy" 3 | 4 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 5 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKS_CNI_Policy" 6 | 7 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 8 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly" 9 | 10 | aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \ 11 | --policy-arn "arn:${AWS_PARTITION}:iam::aws:policy/AmazonSSMManagedInstanceCore" 12 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/migrating-from-cas/scripts/step05-tag-subnets.sh: -------------------------------------------------------------------------------- 1 | for NODEGROUP in $(aws eks list-nodegroups --cluster-name "${CLUSTER_NAME}" --query 'nodegroups' --output text); do 2 | aws ec2 create-tags \ 3 | --tags "Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}" \ 4 | --resources $(aws eks describe-nodegroup --cluster-name "${CLUSTER_NAME}" \ 5 | --nodegroup-name "${NODEGROUP}" --query 'nodegroup.subnets' --output text ) 6 | done 7 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/migrating-from-cas/scripts/step07-edit-aws-auth.sh: -------------------------------------------------------------------------------- 1 | kubectl edit configmap aws-auth -n kube-system 2 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/migrating-from-cas/scripts/step08-generate-chart.sh: -------------------------------------------------------------------------------- 1 | helm template karpenter oci://public.ecr.aws/karpenter/karpenter --version "${KARPENTER_VERSION}" --namespace "${KARPENTER_NAMESPACE}" \ 2 | --set "settings.clusterName=${CLUSTER_NAME}" \ 3 | --set "settings.interruptionQueue=${CLUSTER_NAME}" \ 4 | --set "serviceAccount.annotations.eks\.amazonaws\.com/role-arn=arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterControllerRole-${CLUSTER_NAME}" \ 5 | --set controller.resources.requests.cpu=1 \ 6 | --set controller.resources.requests.memory=1Gi \ 7 | --set controller.resources.limits.cpu=1 \ 8 | --set controller.resources.limits.memory=1Gi > karpenter.yaml 9 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/migrating-from-cas/scripts/step09-deploy.sh: -------------------------------------------------------------------------------- 1 | kubectl create namespace "${KARPENTER_NAMESPACE}" || true 2 | kubectl create -f \ 3 | "https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodepools.yaml" 4 | kubectl create -f \ 5 | "https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml" 6 | kubectl create -f \ 7 | "https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodeclaims.yaml" 8 | kubectl apply -f karpenter.yaml 9 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/migrating-from-cas/scripts/step11-scale-cas.sh: -------------------------------------------------------------------------------- 1 | kubectl scale deploy/cluster-autoscaler -n kube-system --replicas=0 2 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/migrating-from-cas/scripts/step12-scale-multiple-ng.sh: -------------------------------------------------------------------------------- 1 | for NODEGROUP in $(aws eks list-nodegroups --cluster-name "${CLUSTER_NAME}" \ 2 | --query 'nodegroups' --output text); do aws eks update-nodegroup-config --cluster-name "${CLUSTER_NAME}" \ 3 | --nodegroup-name "${NODEGROUP}" \ 4 | --scaling-config "minSize=1,maxSize=1,desiredSize=1" 5 | done 6 | -------------------------------------------------------------------------------- /website/content/en/v1.5/getting-started/migrating-from-cas/scripts/step12-scale-single-ng.sh: -------------------------------------------------------------------------------- 1 | aws eks update-nodegroup-config --cluster-name "${CLUSTER_NAME}" \ 2 | --nodegroup-name "${NODEGROUP}" \ 3 | --scaling-config "minSize=2,maxSize=2,desiredSize=2" 4 | -------------------------------------------------------------------------------- /website/content/en/v1.5/reference/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Reference" 3 | linkTitle: "Reference" 4 | weight: 50 5 | description: > 6 | Reference documentation for Karpenter 7 | --- -------------------------------------------------------------------------------- /website/content/en/v1.5/tasks/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Tasks" 3 | linkTitle: "Tasks" 4 | weight: 25 5 | description: > 6 | Tasks to run with Karpenter 7 | cascade: 8 | type: docs 9 | --- 10 | 11 | -------------------------------------------------------------------------------- /website/content/en/v1.5/upgrading/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Upgrading" 3 | linkTitle: "Upgrading" 4 | weight: 30 5 | description: > 6 | Upgrading Karpenter guide and reference 7 | cascade: 8 | type: docs 9 | --- 10 | 11 | -------------------------------------------------------------------------------- /website/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/aws/karpenter-provider-aws/website 2 | 3 | go 1.22 4 | 5 | require ( 6 | github.com/google/docsy v0.6.0 // indirect 7 | github.com/google/docsy/dependencies v0.6.0 // indirect 8 | ) 9 | -------------------------------------------------------------------------------- /website/go.sum: -------------------------------------------------------------------------------- 1 | github.com/FortAwesome/Font-Awesome v0.0.0-20220831210243-d3a7818c253f/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo= 2 | github.com/google/docsy v0.6.0 h1:43bVF18t2JihAamelQjjGzx1vO2ljCilVrBgetCA8oI= 3 | github.com/google/docsy v0.6.0/go.mod h1:VKKLqD8PQ7AglJc98yBorATfW7GrNVsn0kGXVYF6G+M= 4 | github.com/google/docsy/dependencies v0.6.0 h1:BFXDCINbp8ZuUGl/mrHjMfhCg+b1YX+hVLAA5fGW7Pc= 5 | github.com/google/docsy/dependencies v0.6.0/go.mod h1:EDGc2znMbGUw0RW5kWwy2oGgLt0iVXBmoq4UOqstuNE= 6 | github.com/twbs/bootstrap v4.6.2+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0= 7 | -------------------------------------------------------------------------------- /website/layouts/404.html: -------------------------------------------------------------------------------- 1 | {{ define "main"}} 2 |
3 |
4 |

Not found

5 |

Oops! This page doesn't exist. Try going back to our home page.

6 |
7 |
8 | {{ end }} 9 | -------------------------------------------------------------------------------- /website/layouts/partials/favicons.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /website/layouts/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | 3 | Disallow: /v0.4.3-docs/ 4 | 5 | Allow: /docs/ 6 | Allow: /index.html 7 | 8 | SITEMAP: https://karpenter.sh/sitemap.xml 9 | -------------------------------------------------------------------------------- /website/layouts/shortcodes/blocks/feature.html: -------------------------------------------------------------------------------- 1 | {{ $icon := .Get "icon" | default "fa-lightbulb" }} 2 | {{ $url_text := .Get "url_text" }} 3 | {{ $feature_class := .Get "feature_class" | default "" }} 4 |
5 |
6 | 7 |
8 |

9 | {{ if eq .Page.File.Ext "md" }} 10 | {{ .Get "title" | markdownify }} 11 | {{ else }} 12 | {{ .Get "title" | htmlUnescape | safeHTML }} 13 | {{ end }} 14 |

15 |

16 | {{ if eq .Page.File.Ext "md" }} 17 | {{ .Inner | markdownify }} 18 | {{ else }} 19 | {{ .Inner | htmlUnescape | safeHTML }} 20 | {{ end }} 21 |

22 | {{ with .Get "url" }}

{{ with $url_text }}{{ $url_text }}{{ else }}{{ T "ui_read_more" }}{{ end }} …

{{ end }} 23 |
24 | -------------------------------------------------------------------------------- /website/layouts/shortcodes/github.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | GitHub 4 | 5 | 15 | -------------------------------------------------------------------------------- /website/layouts/shortcodes/githubRelRef.html: -------------------------------------------------------------------------------- 1 | /{{ replace (chomp (delimit (first 2 (split .Page.RelPermalink "/")) "" "")) "preview" .Page.Site.Params.github_branch }}/ -------------------------------------------------------------------------------- /website/layouts/shortcodes/script.html: -------------------------------------------------------------------------------- 1 | {{ $file := .Get "file" }} 2 | {{ $version := index ( split .Page.Path `/` ) 0 }} 3 | {{ $fileContents := replace $file `{VERSION}` $version | readFile }} 4 | {{ $lang := .Get "language" }} 5 | {{ (print "```" $lang "\n" $fileContents "```") | safeHTML }} 6 | -------------------------------------------------------------------------------- /website/netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | base = "website/" 3 | publish = "public" 4 | command = "npm install; hugo --gc --minify" 5 | 6 | [context.production.environment] 7 | HUGO_VERSION = "0.120.3" 8 | HUGO_ENV = "production" 9 | HUGO_ENABLEGITINFO = "true" 10 | 11 | [context.split1] 12 | command = "npm install; hugo --gc --minify --enableGitInfo" 13 | 14 | [context.split1.environment] 15 | HUGO_VERSION = "0.120.3" 16 | HUGO_ENV = "production" 17 | 18 | [context.deploy-preview] 19 | command = "npm install; hugo --gc --minify --buildFuture -b $DEPLOY_PRIME_URL" 20 | 21 | [context.deploy-preview.environment] 22 | HUGO_VERSION = "0.120.3" 23 | 24 | [context.branch-deploy] 25 | command = "npm install; hugo --gc --minify -b $DEPLOY_PRIME_URL" 26 | 27 | [context.branch-deploy.environment] 28 | HUGO_VERSION = "0.120.3" 29 | 30 | [context.next.environment] 31 | HUGO_ENABLEGITINFO = "true" 32 | -------------------------------------------------------------------------------- /website/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "website", 3 | "version": "1.0.0", 4 | "devDependencies": { 5 | "ansi-regex": ">=5.0.1", 6 | "autoprefixer": "^10.4.17", 7 | "postcss": "^8.4.35", 8 | "postcss-cli": "^11.0.0", 9 | "hugo-extended": "0.122.0" 10 | }, 11 | 12 | "scripts": { 13 | "clean": "rm -rf node_modules" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /website/static/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/banner.png -------------------------------------------------------------------------------- /website/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/favicon.ico -------------------------------------------------------------------------------- /website/static/favicons/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/favicons/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /website/static/favicons/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | transparent 10 | 11 | 12 | -------------------------------------------------------------------------------- /website/static/favicons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/favicons/favicon-16x16.png -------------------------------------------------------------------------------- /website/static/favicons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/favicons/favicon-32x32.png -------------------------------------------------------------------------------- /website/static/favicons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/favicons/favicon.ico -------------------------------------------------------------------------------- /website/static/favicons/pwa-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/favicons/pwa-192x192.png -------------------------------------------------------------------------------- /website/static/favicons/pwa-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/favicons/pwa-512x512.png -------------------------------------------------------------------------------- /website/static/favicons/tile150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/favicons/tile150x150.png -------------------------------------------------------------------------------- /website/static/favicons/tile310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/favicons/tile310x150.png -------------------------------------------------------------------------------- /website/static/favicons/tile310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/favicons/tile310x310.png -------------------------------------------------------------------------------- /website/static/favicons/tile70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/favicons/tile70x70.png -------------------------------------------------------------------------------- /website/static/full_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/full_logo.png -------------------------------------------------------------------------------- /website/static/karpenter-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/karpenter-overview.png -------------------------------------------------------------------------------- /website/static/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/logo.png -------------------------------------------------------------------------------- /website/static/metrics-node-table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/metrics-node-table.png -------------------------------------------------------------------------------- /website/static/metrics-percentile-graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/metrics-percentile-graph.png -------------------------------------------------------------------------------- /website/static/metrics-pod-summary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/metrics-pod-summary.png -------------------------------------------------------------------------------- /website/static/nodeclaims.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/nodeclaims.png -------------------------------------------------------------------------------- /website/static/termination-state-machine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/termination-state-machine.png -------------------------------------------------------------------------------- /website/static/threat-model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws/karpenter-provider-aws/014a6cddd44e8579e40d9583437cb690cf399445/website/static/threat-model.png --------------------------------------------------------------------------------