Karpenter通过Provisioner CRD
来进行配置,一个EKS集群可以有多个Provisoner,这里我们只创建一个默认的Provisoner来演示。
一个Provisioner可以管理不同的pod,Karpenter根据pod的label / affinity
属性来进行调度,所以Karpenter可以很好的管理多种工作负载的情况
运行以下命令:
cat <<EOF | kubectl apply -f -
apiVersion: karpenter.sh/v1alpha5
kind: Provisioner
metadata:
name: default
spec:
requirements:
- key: karpenter.sh/capacity-type
operator: In
values: ["spot"]
limits:
resources:
cpu: 1000
providerRef:
name: default
consolidation:
enabled: true
---
apiVersion: karpenter.k8s.aws/v1alpha1
kind: AWSNodeTemplate
metadata:
name: default
spec:
subnetSelector:
alpha.eksctl.io/cluster-name: ${CLUSTER_NAME}
securityGroupSelector:
kubernetes.io/cluster/${CLUSTER_NAME}: owned
EOF
一些参数说明如下:
topology.kubernetes.io/zone=us-east-1c
,则Karpenter创建出来的机器都会在这个az;可以设置 karpenter.sh/capacity-type
来指定Karpenter拉起spot机器,如果不设置这个参数,默认是ondemand类型。所有参数的说明,参考文档: https://karpenter.sh/docs/concepts/provisioners/