设置Provisioner

Karpenter通过Provisioner CRD来进行配置,一个EKS集群可以有多个Provisoner,这里我们只创建一个默认的Provisoner来演示。

运行以下命令:

cat <<EOF | kubectl apply -f -
apiVersion: karpenter.sh/v1alpha5
kind: Provisioner
metadata:
  name: default
spec:
  labels:
    intent: apps
  provider:
    instanceProfile: KarpenterNodeInstanceProfile-${CLUSTER_NAME}
    tags:
      accountingEC2Tag: KarpenterDevEnvironmentEC2
  ttlSecondsAfterEmpty: 30
EOF

一些参数说明如下:

  • Instance Profile: 通过Karpenter启动的实例必须有相应的权限来访问EC2网络等。
  • Requirements Section: 用于配置实例属性,例如实例类型和az。例如,如果指定了topology.kubernetes.io/zone=us-east-1c,则Karpenter创建出来的机器都会在这个az;可以设置 karpenter.sh/capacity-type来指定Karpenter拉起spot机器,如果不设置这个参数,默认是ondemand类型。
  • ttlSecondsAfterEmpty: 如果检测到实例上没有运行pod,过了对应时间后再终止实例
  • Tags: 由Karpenter启动的机器会打个对应的标签,方便管理员管理EC2。例如上面配置创建的实例都会有如下标签:

image-20220530213437536

所有参数的说明,参考文档: https://karpenter.sh/v0.10.1/aws/provisioning/