Skip to content

Commit 05d1301

Browse files
author
照微
committed
[Core] Add RBGStrategy, following OEP-0006
1 parent 6a8fea2 commit 05d1301

18 files changed

Lines changed: 1600 additions & 24 deletions

File tree

charts/ome-resources/templates/ome-controller/rbac/role.yaml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,3 +288,24 @@ rules:
288288
- get
289289
- patch
290290
- update
291+
- apiGroups:
292+
- workloads.x-k8s.io
293+
resources:
294+
- rolebasedgroups
295+
- rolebasedgroups/finalizers
296+
verbs:
297+
- create
298+
- delete
299+
- get
300+
- list
301+
- patch
302+
- update
303+
- watch
304+
- apiGroups:
305+
- workloads.x-k8s.io
306+
resources:
307+
- rolebasedgroups/status
308+
verbs:
309+
- get
310+
- patch
311+
- update

cmd/manager/main.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
3434
kueuev1beta1 "sigs.k8s.io/kueue/apis/kueue/v1beta1"
3535
lws "sigs.k8s.io/lws/api/leaderworkerset/v1"
36+
rbgv1alpha2 "sigs.k8s.io/rbgs/api/workloads/v1alpha2"
3637
schedulerpluginsv1alpha1 "sigs.k8s.io/scheduler-plugins/apis/scheduling/v1alpha1"
3738
volcanobatch "volcano.sh/apis/pkg/apis/batch/v1alpha1"
3839
volcano "volcano.sh/apis/pkg/apis/scheduling/v1beta1"
@@ -220,6 +221,7 @@ func main() {
220221
{ray.SchemeGroupVersion, constants.RayClusterKind, ray.AddToScheme},
221222
{knservingv1.SchemeGroupVersion, constants.KnativeServiceKind, knservingv1.AddToScheme},
222223
{lws.SchemeGroupVersion, constants.LWSKind, lws.AddToScheme},
224+
{rbgv1alpha2.GroupVersion, constants.RoleBasedGroupKind, rbgv1alpha2.AddToScheme},
223225
{volcano.SchemeGroupVersion, constants.VolcanoQueueKind, volcano.AddToScheme},
224226
{volcanobatch.SchemeGroupVersion, constants.VolcanoJobKind, volcanobatch.AddToScheme},
225227
{kedav1.SchemeGroupVersion, constants.KEDAScaledObjectKind, kedav1.AddToScheme},

config/rbac/role.yaml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,3 +288,24 @@ rules:
288288
- get
289289
- patch
290290
- update
291+
- apiGroups:
292+
- workloads.x-k8s.io
293+
resources:
294+
- rolebasedgroups
295+
- rolebasedgroups/finalizers
296+
verbs:
297+
- create
298+
- delete
299+
- get
300+
- list
301+
- patch
302+
- update
303+
- watch
304+
- apiGroups:
305+
- workloads.x-k8s.io
306+
resources:
307+
- rolebasedgroups/status
308+
verbs:
309+
- get
310+
- patch
311+
- update

go.mod

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ require (
1414
github.com/aws/smithy-go v1.24.0
1515
github.com/fsnotify/fsnotify v1.9.0
1616
github.com/gin-gonic/gin v1.10.0
17-
github.com/go-logr/logr v1.4.2
17+
github.com/go-logr/logr v1.4.3
1818
github.com/go-playground/validator/v10 v10.20.0
1919
github.com/google/go-cmp v0.7.0
2020
github.com/google/uuid v1.6.0
@@ -33,7 +33,7 @@ require (
3333
github.com/sirupsen/logrus v1.9.3
3434
github.com/spf13/afero v1.15.0
3535
github.com/spf13/cobra v1.8.1
36-
github.com/spf13/pflag v1.0.5
36+
github.com/spf13/pflag v1.0.10
3737
github.com/spf13/viper v1.19.0
3838
github.com/stretchr/testify v1.10.0
3939
go.uber.org/fx v1.22.2
@@ -52,18 +52,21 @@ require (
5252
k8s.io/client-go v0.33.7
5353
k8s.io/klog/v2 v2.130.1
5454
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff
55-
k8s.io/utils v0.0.0-20241210054802-24370beab758
55+
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397
5656
knative.dev/pkg v0.0.0-20231115001034-97c7258e3a98
5757
knative.dev/serving v0.39.3
5858
sigs.k8s.io/controller-runtime v0.19.7
5959
sigs.k8s.io/gateway-api v1.2.1
6060
sigs.k8s.io/kueue v0.10.6
6161
sigs.k8s.io/lws v0.5.1
62+
sigs.k8s.io/rbgs/api v0.0.0-00010101000000-000000000000
6263
sigs.k8s.io/scheduler-plugins v0.30.12
6364
sigs.k8s.io/yaml v1.4.0
6465
volcano.sh/apis v1.9.0
6566
)
6667

68+
replace sigs.k8s.io/rbgs/api => github.com/sgl-project/rbg-api v0.7.0-alpha.3
69+
6770
require (
6871
cel.dev/expr v0.20.0 // indirect
6972
cloud.google.com/go/auth v0.16.1 // indirect
@@ -149,7 +152,7 @@ require (
149152
github.com/mattn/go-isatty v0.0.20 // indirect
150153
github.com/mitchellh/mapstructure v1.5.0 // indirect
151154
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
152-
github.com/modern-go/reflect2 v1.0.2 // indirect
155+
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
153156
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
154157
github.com/opencontainers/go-digest v1.0.0 // indirect
155158
github.com/openzipkin/zipkin-go v0.4.2 // indirect
@@ -188,11 +191,11 @@ require (
188191
go.uber.org/dig v1.18.0 // indirect
189192
go.uber.org/multierr v1.11.0 // indirect
190193
golang.org/x/arch v0.8.0 // indirect
191-
golang.org/x/crypto v0.40.0 // indirect
194+
golang.org/x/crypto v0.41.0 // indirect
192195
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
193-
golang.org/x/net v0.42.0 // indirect
196+
golang.org/x/net v0.43.0 // indirect
194197
golang.org/x/sync v0.16.0 // indirect
195-
golang.org/x/term v0.33.0 // indirect
198+
golang.org/x/term v0.34.0 // indirect
196199
golang.org/x/text v0.28.0 // indirect
197200
golang.org/x/time v0.11.0 // indirect
198201
golang.org/x/tools v0.35.0 // indirect
@@ -209,7 +212,7 @@ require (
209212
k8s.io/component-base v0.33.7 // indirect
210213
knative.dev/networking v0.0.0-20231115015815-3af9769712cd // indirect
211214
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2 // indirect
212-
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
215+
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
213216
sigs.k8s.io/randfill v1.0.0 // indirect
214217
sigs.k8s.io/structured-merge-diff/v4 v4.6.0 // indirect
215218
)

go.sum

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,8 @@ github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KE
197197
github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
198198
github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
199199
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
200-
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
201-
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
200+
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
201+
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
202202
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
203203
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
204204
github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ=
@@ -402,8 +402,9 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w
402402
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
403403
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
404404
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
405-
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
406405
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
406+
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8=
407+
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
407408
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
408409
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
409410
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
@@ -489,6 +490,8 @@ github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6g
489490
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
490491
github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
491492
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
493+
github.com/sgl-project/rbg-api v0.7.0-alpha.3 h1:IQ3/IhfuRHKHXHYZpNZGMv3iogPP77k2lS3RKW6BQJE=
494+
github.com/sgl-project/rbg-api v0.7.0-alpha.3/go.mod h1:rxajGPZkFonk2zkcadmBJrTBwH45AWlAmHKknzb8ThQ=
492495
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
493496
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
494497
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
@@ -506,8 +509,9 @@ github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
506509
github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
507510
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
508511
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
509-
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
510512
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
513+
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
514+
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
511515
github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI=
512516
github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg=
513517
github.com/stoewer/go-strcase v1.3.0 h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs=
@@ -620,8 +624,8 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
620624
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
621625
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
622626
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
623-
golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM=
624-
golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY=
627+
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
628+
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
625629
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
626630
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
627631
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -691,8 +695,8 @@ golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwY
691695
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
692696
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
693697
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
694-
golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
695-
golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
698+
golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
699+
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
696700
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
697701
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
698702
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -766,8 +770,8 @@ golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
766770
golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
767771
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
768772
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
769-
golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg=
770-
golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0=
773+
golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4=
774+
golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
771775
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
772776
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
773777
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -981,8 +985,8 @@ k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
981985
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
982986
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff h1:/usPimJzUKKu+m+TE36gUyGcf03XZEP0ZIKgKj35LS4=
983987
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8=
984-
k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0=
985-
k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
988+
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y=
989+
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
986990
knative.dev/networking v0.0.0-20231115015815-3af9769712cd h1:VDtYz+hybqIAEp8NM2tAi2QV4D8Cc5DWLoXLi5IcZjE=
987991
knative.dev/networking v0.0.0-20231115015815-3af9769712cd/go.mod h1:HQ3rA7qrKVWvZUl6GGQefn/PzNXlX4e94KpbwBEjFcQ=
988992
knative.dev/pkg v0.0.0-20231115001034-97c7258e3a98 h1:uvOLwp5Ar7oJlaYEszh51CemuZc1sRRI14xzKhUEF3U=
@@ -1000,8 +1004,8 @@ sigs.k8s.io/controller-runtime v0.19.7 h1:DLABZfMr20A+AwCZOHhcbcu+TqBXnJZaVBri9K
10001004
sigs.k8s.io/controller-runtime v0.19.7/go.mod h1:iRmWllt8IlaLjvTTDLhRBXIEtkCK6hwVBJJsYS9Ajf4=
10011005
sigs.k8s.io/gateway-api v1.2.1 h1:fZZ/+RyRb+Y5tGkwxFKuYuSRQHu9dZtbjenblleOLHM=
10021006
sigs.k8s.io/gateway-api v1.2.1/go.mod h1:EpNfEXNjiYfUJypf0eZ0P5iXA9ekSGWaS1WgPaM42X0=
1003-
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
1004-
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
1007+
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE=
1008+
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
10051009
sigs.k8s.io/kueue v0.10.6 h1:r/ULCI0wXYvkbl0vliq8aS+AvOVhW2dlxzpRMudhNJ8=
10061010
sigs.k8s.io/kueue v0.10.6/go.mod h1:3yzOvGI0sPOC3VL1ihVIrzc8mkSyCVTL+SrouewwRWw=
10071011
sigs.k8s.io/lws v0.5.1 h1:eaeMNkP0manRluQZLN32atoULaGrzP611gSLdFaHZs4=

pkg/constants/constants.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,12 +444,13 @@ const (
444444
PDDisaggregated DeploymentModeType = "PDDisaggregated"
445445
MultiNode DeploymentModeType = "MultiNode"
446446
VirtualDeployment DeploymentModeType = "VirtualDeployment"
447+
RoleBasedGroup DeploymentModeType = "RoleBasedGroup"
447448
)
448449

449450
// IsValid checks if the deployment mode is valid
450451
func (d DeploymentModeType) IsValid() bool {
451452
switch d {
452-
case Serverless, RawDeployment, MultiNodeRayVLLM, MultiNode, VirtualDeployment:
453+
case Serverless, RawDeployment, MultiNodeRayVLLM, MultiNode, VirtualDeployment, RoleBasedGroup:
453454
return true
454455
default:
455456
return false
@@ -485,6 +486,7 @@ const (
485486
LWSKind = "LeaderWorkerSet"
486487
GatewayKind = "Gateway"
487488
ServiceKind = "Service"
489+
RoleBasedGroupKind = "RoleBasedGroup"
488490
)
489491

490492
// Volcano Job Labels

pkg/controller/v1beta1/inferenceservice/cleanup.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ func (r *InferenceServiceReconciler) getAvailableResourceTypes() ([]schema.Group
147147
{gvk: schema.GroupVersionKind{Group: "leaderworkerset.x-k8s.io", Version: "v1", Kind: "LeaderWorkerSet"}},
148148
{gvk: schema.GroupVersionKind{Group: "keda.sh", Version: "v1alpha1", Kind: "ScaledObject"}},
149149
{gvk: schema.GroupVersionKind{Group: "networking.istio.io", Version: "v1beta1", Kind: "VirtualService"}},
150+
{gvk: schema.GroupVersionKind{Group: "workloads.x-k8s.io", Version: "v1alpha2", Kind: "RoleBasedGroup"}},
150151
}
151152

152153
for _, res := range optionals {

pkg/controller/v1beta1/inferenceservice/components/decoder.go

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ func (d *Decoder) reconcilePodSpec(isvc *v1beta1.InferenceService, objectMeta *m
269269
var runnerSpec *v1beta1.RunnerSpec
270270

271271
switch deploymentMode {
272-
case constants.MultiNode:
272+
case constants.MultiNode, constants.MultiNodeRayVLLM:
273273
// For multi-node, use leader spec
274274
if d.decoderSpec.Leader != nil {
275275
basePodSpec = d.decoderSpec.Leader.PodSpec
@@ -403,3 +403,57 @@ func (d *Decoder) ValidateSpec() error {
403403
// Add more validation logic as needed
404404
return nil
405405
}
406+
407+
// ExtractRoleConfig implements RoleConfigExtractor by reusing the same
408+
// metadata and pod spec building helpers used during single-component
409+
// reconciliation. It does not create or update Kubernetes resources.
410+
func (d *Decoder) ExtractRoleConfig(isvc *v1beta1.InferenceService) (*RoleConfig, error) {
411+
if d.decoderSpec == nil {
412+
return nil, errors.New("decoder spec is nil")
413+
}
414+
415+
if isvc.Spec.Model != nil && len(isvc.Spec.Model.FineTunedWeights) > 0 {
416+
if err := ReconcileFineTunedWeights(&d.BaseComponentFields, isvc); err != nil {
417+
return nil, errors.Wrap(err, "failed to reconcile fine-tuned weights")
418+
}
419+
}
420+
421+
objectMeta, err := d.reconcileObjectMeta(isvc)
422+
if err != nil {
423+
return nil, errors.Wrap(err, "failed to reconcile object metadata")
424+
}
425+
426+
podSpec, err := d.reconcilePodSpec(isvc, &objectMeta)
427+
if err != nil {
428+
return nil, errors.Wrap(err, "failed to reconcile pod spec")
429+
}
430+
431+
workerPodSpec, err := d.reconcileWorkerPodSpec(isvc, &objectMeta)
432+
if err != nil {
433+
return nil, errors.Wrap(err, "failed to reconcile worker pod spec")
434+
}
435+
436+
cfg := &RoleConfig{
437+
ComponentType: v1beta1.DecoderComponent,
438+
DeploymentMode: d.DeploymentMode,
439+
PodSpec: podSpec,
440+
ComponentExtensionSpec: &d.decoderSpec.ComponentExtensionSpec,
441+
ObjectMeta: objectMeta,
442+
}
443+
if d.DeploymentMode == constants.MultiNode {
444+
cfg.LeaderPodSpec = podSpec
445+
cfg.WorkerPodSpec = workerPodSpec
446+
cfg.WorkerSize = d.getWorkerSize()
447+
}
448+
return cfg, nil
449+
}
450+
451+
// UpdateStatus propagates decoder readiness and model status into the
452+
// InferenceService without performing a full resource reconciliation.
453+
func (d *Decoder) UpdateStatus(isvc *v1beta1.InferenceService) error {
454+
objectMeta, err := d.reconcileObjectMeta(isvc)
455+
if err != nil {
456+
return errors.Wrap(err, "failed to reconcile decoder object metadata for status")
457+
}
458+
return d.updateDecoderStatus(isvc, objectMeta)
459+
}

pkg/controller/v1beta1/inferenceservice/components/engine.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,3 +398,57 @@ func (e *Engine) ValidateSpec() error {
398398
// Add more validation logic as needed
399399
return nil
400400
}
401+
402+
// ExtractRoleConfig implements RoleConfigExtractor by reusing the same
403+
// metadata and pod spec building helpers used during single-component
404+
// reconciliation. It does not create or update Kubernetes resources.
405+
func (e *Engine) ExtractRoleConfig(isvc *v1beta1.InferenceService) (*RoleConfig, error) {
406+
if e.engineSpec == nil {
407+
return nil, errors.New("engine spec is nil")
408+
}
409+
410+
if isvc.Spec.Model != nil && len(isvc.Spec.Model.FineTunedWeights) > 0 {
411+
if err := ReconcileFineTunedWeights(&e.BaseComponentFields, isvc); err != nil {
412+
return nil, errors.Wrap(err, "failed to reconcile fine-tuned weights")
413+
}
414+
}
415+
416+
objectMeta, err := e.reconcileObjectMeta(isvc)
417+
if err != nil {
418+
return nil, errors.Wrap(err, "failed to reconcile object metadata")
419+
}
420+
421+
podSpec, err := e.reconcilePodSpec(isvc, &objectMeta)
422+
if err != nil {
423+
return nil, errors.Wrap(err, "failed to reconcile pod spec")
424+
}
425+
426+
workerPodSpec, err := e.reconcileWorkerPodSpec(isvc, &objectMeta)
427+
if err != nil {
428+
return nil, errors.Wrap(err, "failed to reconcile worker pod spec")
429+
}
430+
431+
cfg := &RoleConfig{
432+
ComponentType: v1beta1.EngineComponent,
433+
DeploymentMode: e.DeploymentMode,
434+
PodSpec: podSpec,
435+
ComponentExtensionSpec: &e.engineSpec.ComponentExtensionSpec,
436+
ObjectMeta: objectMeta,
437+
}
438+
if e.DeploymentMode == constants.MultiNode {
439+
cfg.LeaderPodSpec = podSpec
440+
cfg.WorkerPodSpec = workerPodSpec
441+
cfg.WorkerSize = e.getWorkerSize()
442+
}
443+
return cfg, nil
444+
}
445+
446+
// UpdateStatus propagates engine readiness and model status into the
447+
// InferenceService without performing a full resource reconciliation.
448+
func (e *Engine) UpdateStatus(isvc *v1beta1.InferenceService) error {
449+
objectMeta, err := e.reconcileObjectMeta(isvc)
450+
if err != nil {
451+
return errors.Wrap(err, "failed to reconcile engine object metadata for status")
452+
}
453+
return e.updateEngineStatus(isvc, objectMeta)
454+
}

0 commit comments

Comments
 (0)