Skip to content

Latest commit

 

History

History
 
 

kwok

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Kwok Provider

Before using the kwok provider, make sure that you don't have an installed version of Karpenter in your cluster.

Requirements

  • Have an image repository that you can build, push, and pull images from.
    • For an example on how to set up an image repository refer to karpenter.sh
  • Have a cluster that you can install Karpenter on to.
    • For an example on how to make a cluster in AWS, refer to karpenter.sh

If you use a kind cluster, please set the the following environment variables:

export KWOK_REPO=kind.local
export KIND_CLUSTER_NAME=<kind cluster name, for example, chart-testing>

Installing

make install-kwok
make apply # Run this command again to redeploy if the code has changed

Create a NodePool

Once kwok is installed and Karpenter successfully applies to the cluster, you should now be able to create a NodePool.

cat <<EOF | envsubst | kubectl apply -f -
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: default
spec:
  template:
    spec:
      requirements:
        - key: kubernetes.io/arch
          operator: In
          values: ["amd64"]
        - key: kubernetes.io/os
          operator: In
          values: ["linux"]
        - key: karpenter.sh/capacity-type
          operator: In
          values: ["spot"]
      nodeClassRef:
        name: default
        kind: KWOKNodeClass
        group: karpenter.kwok.sh
      expireAfter: 720h # 30 * 24h = 720h
  limits:
    cpu: 1000
  disruption:
    consolidationPolicy: WhenEmptyOrUnderutilized
    consolidateAfter: 10s
---
apiVersion: karpenter.kwok.sh/v1alpha1
kind: KWOKNodeClass
metadata:
  name: default
EOF

Taint the existing nodes

kubectl taint nodes <existing node name> CriticalAddonsOnly:NoSchedule

After doing this, you can create a deployment to test node scaling with kwok provider.

Specifying Instance Types

By default, the KWOK provider will create a hypothetical set of instance types that it uses for node provisioning. You can specify a custom set of instance types by providing a JSON file with the list of supported instance options. To do so, set the --instance-types-file-path flag or INSTANCE_TYPES_FILE_PATH environment variable to your custom file's path.

There is an example instance types file in examples/instance_types.json that you can regenerate with make gen_instance_types.

Testing

To test the provider, run make e2etests in the root of the repository.

If you want to test a specific e2e case, run the following command:

export FOCUS="<e2e case name>"
make e2etests

Notes

The kwok provider will have additional labels karpenter.kwok.sh/instance-type, karpenter.kwok.sh/instance-size, karpenter.kwok.sh/instance-family, karpenter.kwok.sh/instance-cpu, and karpenter.sh/instance-memory. These are only available in the kwok provider to select fake generated instance types. These labels will not work with a real Karpenter installation.

Uninstalling

make delete
make uninstall-kwok