{{ if .Values.spec.karpenterInstanceProfile }} apiVersion: karpenter.k8s.aws/v1alpha1 kind: AWSNodeTemplate metadata: name: karpenter-bottlerocket labels: {{- toYaml .Values.labels | nindent 4 }} spec: amiFamily: Bottlerocket instanceProfile: '{{ .Values.spec.karpenterInstanceProfile }}' #instanceProfile: {{ .Values.spec.clusterName }}-managed-ondemand subnetSelector: kubernetes.io/cluster/{{ .Values.spec.clusterName }}: '*' #aws:cloudformation:stack-name: '{{ .Values.spec.clusterName }}' kubernetes.io/role/internal-elb: '1' # to select only private subnets securityGroupSelector: aws:eks:cluster-name: '{{ .Values.spec.clusterName }}' # Choose only security groups of nodes #kubernetes.io/cluster/{{ .Values.spec.clusterName }}: '*' #aws:eks:cluster-name: '{{ .Values.spec.clusterName }}' userData: | [settings.kubernetes] kube-api-qps = 30 [settings.kubernetes.eviction-hard] "memory.available" = "20%" # amiSelector: # karpenter.sh/discovery: my-cluster tags: karpenter.sh/cluster_name: {{.Values.spec.clusterName}} karpenter.sh/provisioner: burnham metadataOptions: httpEndpoint: enabled httpProtocolIPv6: disabled httpPutResponseHopLimit: 2 httpTokens: required --- apiVersion: karpenter.k8s.aws/v1alpha1 kind: AWSNodeTemplate metadata: name: karpenter-default labels: {{- toYaml .Values.labels | nindent 4 }} spec: #amiFamily: Bottlerocket #instanceProfile: '{{ .Values.spec.karpenterInstanceProfile }}' instanceProfile: {{ .Values.spec.clusterName }}-managed-ondemand subnetSelector: kubernetes.io/cluster/{{ .Values.spec.clusterName }}: '*' kubernetes.io/role/internal-elb: '1' # to select only private subnets securityGroupSelector: aws:eks:cluster-name: '{{ .Values.spec.clusterName }}' # Choose only security groups of nodes tags: karpenter.sh/cluster_name: {{.Values.spec.clusterName}} karpenter.sh/provisioner: default metadataOptions: httpEndpoint: enabled httpProtocolIPv6: disabled httpPutResponseHopLimit: 2 httpTokens: required --- apiVersion: karpenter.sh/v1alpha5 kind: Provisioner metadata: name: burnham labels: {{- toYaml .Values.labels | nindent 4 }} spec: requirements: # - key: 'node.kubernetes.io/instance-type' # operator: In # values: ['m5.xlarge', 'm5a.xlarge', 'm5ad.xlarge', 'm5d.xlarge', 't2.xlarge', 't3.xlarge', 't3a.xlarge'] - key: 'kubernetes.io/arch' operator: In values: ['amd64'] - key: karpenter.sh/capacity-type operator: In values: ['on-demand', 'spot'] providerRef: #name: karpenter-bottlerocket name: karpenter-default ttlSecondsAfterEmpty: 0 ttlSecondsUntilExpired: 2592000 # 30 Days = 60 * 60 * 24 * 30 Seconds; # Priority given to the provisioner when the scheduler considers which provisioner # to select. Higher weights indicate higher priority when comparing provisioners. # Specifying no weight is equivalent to specifying a weight of 0. weight: 10 limits: resources: cpu: '200' labels: billing-team: burnham team: burnham type: karpenter taints: - key: burnham value: 'true' effect: NoSchedule --- apiVersion: karpenter.sh/v1alpha5 kind: Provisioner metadata: name: default labels: {{- toYaml .Values.labels | nindent 4 }} spec: consolidation: enabled: true #ttlSecondsAfterEmpty: 60 # mutual exclusive with consolitation requirements: - key: karpenter.k8s.aws/instance-family operator: NotIn values: - a1 - c1 - c3 - inf1 - t3 - t2 - key: karpenter.k8s.aws/instance-cpu operator: Lt values: - '33' - key: 'kubernetes.io/arch' operator: In values: ['amd64'] - key: karpenter.sh/capacity-type operator: In values: ['on-demand'] providerRef: name: karpenter-default ttlSecondsUntilExpired: 2592000 # 30 Days = 60 * 60 * 24 * 30 Seconds; # Priority given to the provisioner when the scheduler considers which provisioner # to select. Higher weights indicate higher priority when comparing provisioners. # Specifying no weight is equivalent to specifying a weight of 0. weight: 1 limits: resources: cpu: '2k' labels: billing-team: default team: default type: karpenter # taints: # - key: karpenter # value: 'true' # effect: NoSchedule # Karpenter provides the ability to specify a few additional Kubelet args. # These are all optional and provide support for additional customization and use cases. kubeletConfiguration: #clusterDNS: ["10.0.1.100"] containerRuntime: containerd systemReserved: cpu: '1' memory: 5Gi ephemeral-storage: 2Gi #maxPods: 20 {{ end }}