设置Provisioner

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

一些参数说明如下:

  • Requirements Section: 用于配置实例属性,例如实例类型和az。例如,如果指定了topology.kubernetes.io/zone=us-east-1c,则Karpenter创建出来的机器都会在这个az;可以设置 karpenter.sh/capacity-type来指定Karpenter拉起spot机器,如果不设置这个参数,默认是ondemand类型。

所有参数的说明,参考文档: https://karpenter.sh/docs/concepts/provisioners/