Skip to content

Commit 775922c

Browse files
authored
feat: add llmaz support (#4)
1 parent dc2e5f1 commit 775922c

File tree

11 files changed

+931
-38
lines changed

11 files changed

+931
-38
lines changed

.github/workflows/aws.yaml

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
name: Build and Push AWS Karpenter Provider Image
2+
3+
on:
4+
workflow_dispatch:
5+
push:
6+
branches:
7+
- main
8+
- release-*
9+
10+
jobs:
11+
build:
12+
runs-on: ubuntu-latest
13+
14+
env:
15+
KO_DOCKER_REPO: docker.io/inftyai/karpenter-provider-aws
16+
17+
steps:
18+
- name: Checkout forked karpenter
19+
uses: actions/checkout@v4
20+
21+
- name: Set up Go 1.24
22+
uses: actions/setup-go@v5
23+
with:
24+
go-version: "1.24"
25+
26+
- name: Generate commit info and image tag
27+
id: tag
28+
run: |
29+
BRANCH="${GITHUB_REF##*/}"
30+
COMMIT=$(git rev-parse HEAD)
31+
TIMESTAMP=$(git show -s --format=%ct "$COMMIT")
32+
VERSION_DATE=$(date -u -d "@$TIMESTAMP" +'%Y%m%d%H%M%S')
33+
PSEUDO_VERSION="v0.0.0-${VERSION_DATE}-${COMMIT:0:12}"
34+
35+
if [[ "$BRANCH" == "main" ]]; then
36+
TAG="latest"
37+
IMAGE_TAG="latest"
38+
elif [[ "$BRANCH" == release-* ]]; then
39+
TAG="${BRANCH#release-}" # e.g. v0.36.2
40+
IMAGE_TAG="${TAG#v}" # e.g. 0.36.2
41+
else
42+
TAG="fork-${PSEUDO_VERSION}"
43+
IMAGE_TAG="${TAG}" # keep full tag
44+
fi
45+
46+
{
47+
echo "commit=$COMMIT"
48+
echo "version=$PSEUDO_VERSION"
49+
echo "tag=$TAG"
50+
echo "image_tag=$IMAGE_TAG"
51+
} >> "$GITHUB_OUTPUT"
52+
echo "✅ Using image tag: $IMAGE_TAG"
53+
54+
- name: Clone karpenter-provider-aws
55+
run: |
56+
git clone https://github.com/aws/karpenter-provider-aws.git
57+
cd karpenter-provider-aws
58+
59+
TAG="${{ steps.tag.outputs.tag }}"
60+
if [[ "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
61+
echo "🔄 Attempting to checkout provider tag: $TAG"
62+
if git rev-parse "refs/tags/$TAG" >/dev/null 2>&1; then
63+
git checkout "tags/$TAG" -b "build-from-tag-$TAG"
64+
else
65+
echo "❌ Tag '$TAG' not found in karpenter-provider-aws repo."
66+
exit 1
67+
fi
68+
else
69+
echo "🔄 Checking out provider branch: main"
70+
git checkout main
71+
fi
72+
73+
- name: Replace karpenter module with forked commit version
74+
run: |
75+
cd karpenter-provider-aws
76+
go mod edit -replace sigs.k8s.io/karpenter=github.com/InftyAI/karpenter@${{ steps.tag.outputs.version }}
77+
go mod tidy
78+
79+
- name: Install build tools via make toolchain
80+
run: |
81+
cd karpenter-provider-aws
82+
make toolchain
83+
84+
- name: Login to DockerHub
85+
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 #v3
86+
with:
87+
username: ${{ secrets.DOCKERHUB_USERNAME }}
88+
password: ${{ secrets.DOCKERHUB_TOKEN }}
89+
90+
- name: Build and push image using ko
91+
run: |
92+
cd karpenter-provider-aws
93+
ko build --bare \
94+
--tags ${{ steps.tag.outputs.image_tag }} \
95+
github.com/aws/karpenter-provider-aws/cmd/controller
96+
97+
- name: Show pushed image
98+
run: |
99+
echo "✅ Image pushed to:"
100+
echo "${{ env.KO_DOCKER_REPO }}:${{ steps.tag.outputs.image_tag }}"

go.mod

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ require (
99
github.com/docker/docker v28.2.2+incompatible
1010
github.com/go-logr/logr v1.4.3
1111
github.com/imdario/mergo v0.3.16
12+
github.com/inftyai/llmaz v0.1.4
1213
github.com/mitchellh/hashstructure/v2 v2.0.2
1314
github.com/onsi/ginkgo/v2 v2.23.4
1415
github.com/onsi/gomega v1.37.0
@@ -20,12 +21,12 @@ require (
2021
go.uber.org/zap v1.27.0
2122
golang.org/x/text v0.26.0
2223
golang.org/x/time v0.12.0
23-
k8s.io/api v0.32.3
24-
k8s.io/apiextensions-apiserver v0.32.3
25-
k8s.io/apimachinery v0.32.3
26-
k8s.io/client-go v0.32.3
24+
k8s.io/api v0.32.5
25+
k8s.io/apiextensions-apiserver v0.32.5
26+
k8s.io/apimachinery v0.32.5
27+
k8s.io/client-go v0.32.5
2728
k8s.io/cloud-provider v0.32.3
28-
k8s.io/component-base v0.32.3
29+
k8s.io/component-base v0.32.5
2930
k8s.io/csi-translation-lib v0.32.3
3031
k8s.io/klog/v2 v2.130.1
3132
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738
@@ -36,12 +37,12 @@ require (
3637
github.com/beorn7/perks v1.0.1 // indirect
3738
github.com/cespare/xxhash/v2 v2.3.0 // indirect
3839
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
39-
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
40+
github.com/emicklei/go-restful/v3 v3.12.0 // indirect
4041
github.com/evanphx/json-patch/v5 v5.9.11 // indirect
4142
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
4243
github.com/go-logr/zapr v1.3.0
4344
github.com/go-openapi/jsonpointer v0.21.0 // indirect
44-
github.com/go-openapi/jsonreference v0.20.2 // indirect
45+
github.com/go-openapi/jsonreference v0.21.0 // indirect
4546
github.com/go-openapi/swag v0.23.0 // indirect
4647
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
4748
github.com/gogo/protobuf v1.3.2 // indirect
@@ -77,7 +78,7 @@ require (
7778
gopkg.in/yaml.v3 v3.0.1 // indirect
7879
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
7980
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
80-
sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
81+
sigs.k8s.io/structured-merge-diff/v4 v4.7.0 // indirect
8182
sigs.k8s.io/yaml v1.4.0
8283
)
8384

@@ -87,6 +88,7 @@ require (
8788
github.com/rogpeppe/go-internal v1.13.1 // indirect
8889
go.uber.org/automaxprocs v1.6.0 // indirect
8990
golang.org/x/sync v0.15.0 // indirect
91+
sigs.k8s.io/lws v0.5.1 // indirect
9092
)
9193

9294
retract (

go.sum

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,14 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r
99
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
1010
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
1111
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
12-
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
1312
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1413
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1514
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
1615
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1716
github.com/docker/docker v28.2.2+incompatible h1:CjwRSksz8Yo4+RmQ339Dp/D2tGO5JxwYeqtMOEe0LDw=
1817
github.com/docker/docker v28.2.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
19-
github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
20-
github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
18+
github.com/emicklei/go-restful/v3 v3.12.0 h1:y2DdzBAURM29NFF94q6RaY4vjIH1rtwDapwQtU84iWk=
19+
github.com/emicklei/go-restful/v3 v3.12.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
2120
github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U=
2221
github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
2322
github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU=
@@ -30,12 +29,10 @@ github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
3029
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
3130
github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ=
3231
github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg=
33-
github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
3432
github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
3533
github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
36-
github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
37-
github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
38-
github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
34+
github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=
35+
github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4=
3936
github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
4037
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
4138
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
@@ -62,6 +59,8 @@ github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
6259
github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
6360
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
6461
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
62+
github.com/inftyai/llmaz v0.1.4 h1:8loib3UMUxbETDchYkYhKrBV/6SmmNxRrJtiiBI0YE4=
63+
github.com/inftyai/llmaz v0.1.4/go.mod h1:Em0c6giN3lPfjLbxdjjeXMHVwa6lM4XvUm6NlqKAGxg=
6564
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
6665
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
6766
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
@@ -70,11 +69,8 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI
7069
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
7170
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
7271
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
73-
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
7472
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
7573
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
76-
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
77-
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
7874
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
7975
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
8076
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
@@ -124,12 +120,7 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An
124120
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
125121
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
126122
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
127-
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
128-
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
129123
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
130-
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
131-
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
132-
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
133124
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
134125
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
135126
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
@@ -196,21 +187,20 @@ gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSP
196187
gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
197188
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
198189
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
199-
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
200190
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
201191
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
202-
k8s.io/api v0.32.3 h1:Hw7KqxRusq+6QSplE3NYG4MBxZw1BZnq4aP4cJVINls=
203-
k8s.io/api v0.32.3/go.mod h1:2wEDTXADtm/HA7CCMD8D8bK4yuBUptzaRhYcYEEYA3k=
204-
k8s.io/apiextensions-apiserver v0.32.3 h1:4D8vy+9GWerlErCwVIbcQjsWunF9SUGNu7O7hiQTyPY=
205-
k8s.io/apiextensions-apiserver v0.32.3/go.mod h1:8YwcvVRMVzw0r1Stc7XfGAzB/SIVLunqApySV5V7Dss=
206-
k8s.io/apimachinery v0.32.3 h1:JmDuDarhDmA/Li7j3aPrwhpNBA94Nvk5zLeOge9HH1U=
207-
k8s.io/apimachinery v0.32.3/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
208-
k8s.io/client-go v0.32.3 h1:RKPVltzopkSgHS7aS98QdscAgtgah/+zmpAogooIqVU=
209-
k8s.io/client-go v0.32.3/go.mod h1:3v0+3k4IcT9bXTc4V2rt+d2ZPPG700Xy6Oi0Gdl2PaY=
192+
k8s.io/api v0.32.5 h1:uqjjsYo1kTJr5NIcoIaP9F+TgXgADH7nKQx91FDAhtk=
193+
k8s.io/api v0.32.5/go.mod h1:bXXFU3fGCZ/eFMZvfHZC69PeGbXEL4zzjuPVzOxHF64=
194+
k8s.io/apiextensions-apiserver v0.32.5 h1:o0aKvmzIIs8Uk54pidk32pxET+Pg2ULnh9WI1PuKTwE=
195+
k8s.io/apiextensions-apiserver v0.32.5/go.mod h1:5fpedJa3HJJFBukAZ6ur91DEDye5gYuXISPbOiNLYpU=
196+
k8s.io/apimachinery v0.32.5 h1:6We3aJ6crC0ap8EhsEXcgX3LpI6SEjubpiOMXLROwPM=
197+
k8s.io/apimachinery v0.32.5/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
198+
k8s.io/client-go v0.32.5 h1:huFmQMzgWu0z4kbWsuZci+Gt4Fo72I4CcrvhToZ/Qp0=
199+
k8s.io/client-go v0.32.5/go.mod h1:Qchw6f9WIVrur7DKojAHpRgGLcANT0RLIvF39Jz58xA=
210200
k8s.io/cloud-provider v0.32.3 h1:WC7KhWrqXsU4b0E4tjS+nBectGiJbr1wuc1TpWXvtZM=
211201
k8s.io/cloud-provider v0.32.3/go.mod h1:/fwBfgRPuh16n8vLHT+PPT+Bc4LAEaJYj38opO2wsYY=
212-
k8s.io/component-base v0.32.3 h1:98WJvvMs3QZ2LYHBzvltFSeJjEx7t5+8s71P7M74u8k=
213-
k8s.io/component-base v0.32.3/go.mod h1:LWi9cR+yPAv7cu2X9rZanTiFKB2kHA+JjmhkKjCZRpI=
202+
k8s.io/component-base v0.32.5 h1:2HiX+m3s9Iz5CMqdCVDH2V942UqzQvjuhcXb4W+KCsg=
203+
k8s.io/component-base v0.32.5/go.mod h1:jDsPNFFElv9m27TcYxlpEX7TZ3vdgx2g4PaqMUHpV/Y=
214204
k8s.io/csi-translation-lib v0.32.3 h1:fKdc9LMVEMk18xsgoPm1Ga8GjfhI7AM3UX8gnIeXZKs=
215205
k8s.io/csi-translation-lib v0.32.3/go.mod h1:VX6+hCKgQyFnUX3VrnXZAgYYBXkrqx4BZk9vxr9qRcE=
216206
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
@@ -223,7 +213,11 @@ sigs.k8s.io/controller-runtime v0.20.4 h1:X3c+Odnxz+iPTRobG4tp092+CvBU9UK0t/bRf+
223213
sigs.k8s.io/controller-runtime v0.20.4/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY=
224214
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
225215
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
226-
sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA=
227-
sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
216+
sigs.k8s.io/lws v0.5.1 h1:eaeMNkP0manRluQZLN32atoULaGrzP611gSLdFaHZs4=
217+
sigs.k8s.io/lws v0.5.1/go.mod h1:qprXSTTFnfmPZY3V3sUfk6ZPmAodsdoKS8XVElJ9kN0=
218+
sigs.k8s.io/randfill v0.0.0-20250304075658-069ef1bbf016 h1:kXv6kKdoEtedwuqMmkqhbkgvYKeycVbC8+iPCP9j5kQ=
219+
sigs.k8s.io/randfill v0.0.0-20250304075658-069ef1bbf016/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
220+
sigs.k8s.io/structured-merge-diff/v4 v4.7.0 h1:qPeWmscJcXP0snki5IYF79Z8xrl8ETFxgMd7wez1XkI=
221+
sigs.k8s.io/structured-merge-diff/v4 v4.7.0/go.mod h1:dDy58f92j70zLsuZVuUX5Wp9vtxXpaZnkPGWeqDfCps=
228222
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
229223
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=

kwok/charts/templates/clusterrole.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ rules:
4747
- apiGroups: ["policy"]
4848
resources: ["poddisruptionbudgets"]
4949
verbs: ["get", "list", "watch"]
50+
- apiGroups: ["llmaz.io"]
51+
resources: ["openmodels"]
52+
verbs: ["get", "list", "watch"]
5053
# Write
5154
- apiGroups: ["karpenter.sh"]
5255
resources: ["nodeclaims", "nodeclaims/status"]

pkg/controllers/provisioning/provisioner.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ type Provisioner struct {
7979
kubeClient client.Client
8080
batcher *Batcher[types.UID]
8181
volumeTopology *scheduler.VolumeTopology
82+
modelInference *scheduler.ModelInference
8283
cluster *state.Cluster
8384
recorder events.Recorder
8485
cm *pretty.ChangeMonitor
@@ -94,6 +95,7 @@ func NewProvisioner(kubeClient client.Client, recorder events.Recorder,
9495
cloudProvider: cloudProvider,
9596
kubeClient: kubeClient,
9697
volumeTopology: scheduler.NewVolumeTopology(kubeClient),
98+
modelInference: scheduler.NewModelInference(kubeClient),
9799
cluster: cluster,
98100
recorder: recorder,
99101
cm: pretty.NewChangeMonitor(),
@@ -266,6 +268,12 @@ func (p *Provisioner) NewScheduler(
266268
return nil, fmt.Errorf("injecting volume topology requirements, %w", err)
267269
}
268270

271+
// inject model inference requirements
272+
pods, err = p.injectInferenceFlavorRequirements(ctx, pods)
273+
if err != nil {
274+
return nil, fmt.Errorf("injecting model inference requirements, %w", err)
275+
}
276+
269277
// Calculate cluster topology, if a context error occurs, it is wrapped and returned
270278
topology, err := scheduler.NewTopology(ctx, p.kubeClient, p.cluster, stateNodes, nodePools, instanceTypes, pods, opts...)
271279
if err != nil {
@@ -471,6 +479,7 @@ func (p *Provisioner) Validate(ctx context.Context, pod *corev1.Pod) error {
471479
validateNodeSelector(ctx, pod),
472480
validateAffinity(ctx, pod),
473481
p.volumeTopology.ValidatePersistentVolumeClaims(ctx, pod),
482+
p.modelInference.ValidateInferenceFlavors(ctx, pod),
474483
)
475484
}
476485

@@ -500,6 +509,21 @@ func (p *Provisioner) injectVolumeTopologyRequirements(ctx context.Context, pods
500509
return schedulablePods, nil
501510
}
502511

512+
func (p *Provisioner) injectInferenceFlavorRequirements(ctx context.Context, pods []*corev1.Pod) ([]*corev1.Pod, error) {
513+
var schedulablePods []*corev1.Pod
514+
for _, pod := range pods {
515+
if err := p.modelInference.Inject(ctx, pod); err != nil {
516+
if errors.Is(err, context.DeadlineExceeded) {
517+
return nil, err
518+
}
519+
log.FromContext(ctx).WithValues("Pod", klog.KObj(pod)).Error(err, "failed getting model inference requirements")
520+
} else {
521+
schedulablePods = append(schedulablePods, pod)
522+
}
523+
}
524+
return schedulablePods, nil
525+
}
526+
503527
func validateNodeSelector(ctx context.Context, p *corev1.Pod) (errs error) {
504528
terms := lo.MapToSlice(p.Spec.NodeSelector, func(k string, v string) corev1.NodeSelectorTerm {
505529
return corev1.NodeSelectorTerm{

0 commit comments

Comments
 (0)