Skip to content

Commit 9976bd0

Browse files
capri-xiyuerobscottaslakknutsen
authored
feat: TargetPortNumber int32 to become TargetPorts []Port (#1354)
* TargetPortNumber int32 to become TargetPorts []Port # Conflicts: # api/v1/inferencepool_types.go # api/v1/zz_generated.deepcopy.go # client-go/applyconfiguration/api/v1/inferencepoolspec.go # Conflicts: # api/v1/zz_generated.deepcopy.go # client-go/applyconfiguration/api/v1/inferencepoolspec.go * partially fix ut # Conflicts: # pkg/epp/controller/inferencepool_reconciler_test.go * change inferencepool ut temporarily * change comments * changed yaml * added temporary fix * Update api/v1/inferencepool_types.go Co-authored-by: Rob Scott <[email protected]> * fixed ut and e2e to adopt naming change * added listtype tag * revert back: * updated to include list map * Update site-src/guides/inferencepool-rollout.md Co-authored-by: Aslak Knutsen <[email protected]> * rebase * partially fix conflicts * rebase with conversion change * updated generate * added ut * rebase main * fixed merge error * updated helm chart * updated message * updated to use alias * fixed ut * merge conflicts * fixed kubectl cli linter * make it back to pointer * fixed kal linter * fixed conversion * revert v1a2 to use pointer * change extension to be non-nil pointer * make v1a2 the extension * added godocs * updated comments * updated comments * updated conversion * added nil check * added nil check * fixed linter --------- Co-authored-by: Rob Scott <[email protected]> Co-authored-by: Aslak Knutsen <[email protected]>
1 parent bc242de commit 9976bd0

32 files changed

+219
-98
lines changed

api/v1/inferencepool_types.go

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,19 +66,29 @@ type InferencePoolSpec struct {
6666
// +required
6767
Selector LabelSelector `json:"selector,omitempty,omitzero"`
6868

69-
// TargetPortNumber defines the port number to access the selected model server Pods.
70-
// The number must be in the range 1 to 65535.
71-
//
72-
// +kubebuilder:validation:Minimum=1
73-
// +kubebuilder:validation:Maximum=65535
69+
// TargetPorts defines a list of ports that are exposed by this InferencePool.
70+
// Currently, the list may only include a single port definition.
71+
// +kubebuilder:validation:MinItems=1
72+
// +kubebuilder:validation:MaxItems=1
73+
// +listType=map
74+
// +listMapKey=number
7475
// +required
75-
TargetPortNumber int32 `json:"targetPortNumber,omitempty"`
76+
TargetPorts []Port `json:"targetPorts,omitempty"`
7677

7778
// Extension configures an endpoint picker as an extension service.
78-
// +optional
79+
// +required
7980
ExtensionRef Extension `json:"extensionRef,omitempty,omitzero"`
8081
}
8182

83+
// Port defines the network port that will be exposed by this InferencePool.
84+
type Port struct {
85+
// Number defines the port number to access the selected model server Pods.
86+
// The number must be in the range 1 to 65535.
87+
//
88+
// +required
89+
Number PortNumber `json:"number,omitempty"`
90+
}
91+
8292
// Extension specifies how to configure an extension that runs the endpoint picker.
8393
type Extension struct {
8494
// Group is the group of the referent.

api/v1/zz_generated.deepcopy.go

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apix/v1alpha2/inferencepool_conversion.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func (src *InferencePool) ConvertTo(dst *v1.InferencePool) error {
3131
if dst == nil {
3232
return errors.New("dst cannot be nil")
3333
}
34-
v1Extension, err := convertExtensionRefToV1(src.Spec.ExtensionRef)
34+
v1Extension, err := convertExtensionRefToV1(&src.Spec.ExtensionRef)
3535
if err != nil {
3636
return err
3737
}
@@ -41,7 +41,7 @@ func (src *InferencePool) ConvertTo(dst *v1.InferencePool) error {
4141
}
4242
dst.TypeMeta = src.TypeMeta
4343
dst.ObjectMeta = src.ObjectMeta
44-
dst.Spec.TargetPortNumber = src.Spec.TargetPortNumber
44+
dst.Spec.TargetPorts = []v1.Port{{Number: v1.PortNumber(src.Spec.TargetPortNumber)}}
4545
dst.Spec.ExtensionRef = v1Extension
4646
dst.Status = *v1Status
4747
if src.Spec.Selector != nil {
@@ -68,7 +68,7 @@ func (dst *InferencePool) ConvertFrom(src *v1.InferencePool) error {
6868
}
6969
dst.TypeMeta = src.TypeMeta
7070
dst.ObjectMeta = src.ObjectMeta
71-
dst.Spec.TargetPortNumber = src.Spec.TargetPortNumber
71+
dst.Spec.TargetPortNumber = int32(src.Spec.TargetPorts[0].Number)
7272
dst.Spec.ExtensionRef = extensionRef
7373
dst.Status = *status
7474
if src.Spec.Selector.MatchLabels != nil {
@@ -82,7 +82,7 @@ func (dst *InferencePool) ConvertFrom(src *v1.InferencePool) error {
8282

8383
func convertStatusToV1(src *InferencePoolStatus) (*v1.InferencePoolStatus, error) {
8484
if src == nil {
85-
return nil, nil
85+
return nil, errors.New("src cannot be nil")
8686
}
8787
u, err := toUnstructured(src)
8888
if err != nil {
@@ -93,7 +93,7 @@ func convertStatusToV1(src *InferencePoolStatus) (*v1.InferencePoolStatus, error
9393

9494
func convertStatusFromV1(src *v1.InferencePoolStatus) (*InferencePoolStatus, error) {
9595
if src == nil {
96-
return nil, nil
96+
return nil, errors.New("src cannot be nil")
9797
}
9898
u, err := toUnstructured(src)
9999
if err != nil {
@@ -104,7 +104,7 @@ func convertStatusFromV1(src *v1.InferencePoolStatus) (*InferencePoolStatus, err
104104

105105
func convertExtensionRefToV1(src *Extension) (v1.Extension, error) {
106106
if src == nil {
107-
return v1.Extension{}, nil
107+
return v1.Extension{}, errors.New("src cannot be nil")
108108
}
109109
u, err := toUnstructured(src)
110110
if err != nil {
@@ -117,19 +117,19 @@ func convertExtensionRefToV1(src *Extension) (v1.Extension, error) {
117117
return *out, nil
118118
}
119119

120-
func convertExtensionRefFromV1(src *v1.Extension) (*Extension, error) {
120+
func convertExtensionRefFromV1(src *v1.Extension) (Extension, error) {
121121
if src == nil {
122-
return nil, nil
122+
return Extension{}, errors.New("src cannot be nil")
123123
}
124-
u, err := toUnstructured(src)
124+
u, err := toUnstructured(&src)
125125
if err != nil {
126-
return nil, err
126+
return Extension{}, err
127127
}
128128
extension, err := convert[Extension](u)
129129
if err != nil {
130-
return nil, err
130+
return Extension{}, err
131131
}
132-
return extension, nil
132+
return *extension, nil
133133
}
134134

135135
func toUnstructured(obj any) (*unstructured.Unstructured, error) {

apix/v1alpha2/inferencepool_conversion_test.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func TestInferencePoolConvertTo(t *testing.T) {
6060
"app": "my-model-server",
6161
},
6262
TargetPortNumber: 8080,
63-
ExtensionRef: &Extension{
63+
ExtensionRef: Extension{
6464
Group: &group,
6565
Kind: &kind,
6666
Name: "my-epp-service",
@@ -99,7 +99,7 @@ func TestInferencePoolConvertTo(t *testing.T) {
9999
"app": "my-model-server",
100100
},
101101
},
102-
TargetPortNumber: 8080,
102+
TargetPorts: []v1.Port{{Number: v1.PortNumber(int32(8080))}},
103103
ExtensionRef: v1.Extension{
104104
Group: &v1Group,
105105
Kind: v1Kind,
@@ -127,7 +127,7 @@ func TestInferencePoolConvertTo(t *testing.T) {
127127
wantErr: false,
128128
},
129129
{
130-
name: "conversion from v1alpha2 to v1 with nil extensionRef",
130+
name: "conversion from v1alpha2 to v1 with empty extensionRef",
131131
src: &InferencePool{
132132
TypeMeta: metav1.TypeMeta{
133133
Kind: "InferencePool",
@@ -174,7 +174,7 @@ func TestInferencePoolConvertTo(t *testing.T) {
174174
"app": "my-model-server",
175175
},
176176
},
177-
TargetPortNumber: 8080,
177+
TargetPorts: []v1.Port{{Number: v1.PortNumber(int32(8080))}},
178178
},
179179
Status: v1.InferencePoolStatus{
180180
Parents: []v1.PoolStatus{
@@ -234,7 +234,7 @@ func TestInferencePoolConvertFrom(t *testing.T) {
234234
"app": "my-model-server",
235235
},
236236
},
237-
TargetPortNumber: 8080,
237+
TargetPorts: []v1.Port{{Number: v1.PortNumber(int32(8080))}},
238238
ExtensionRef: v1.Extension{
239239
Group: &v1Group,
240240
Kind: v1Kind,
@@ -273,7 +273,7 @@ func TestInferencePoolConvertFrom(t *testing.T) {
273273
"app": "my-model-server",
274274
},
275275
TargetPortNumber: 8080,
276-
ExtensionRef: &Extension{
276+
ExtensionRef: Extension{
277277
Group: &group,
278278
Kind: &kind,
279279
Name: "my-epp-service",
@@ -300,7 +300,7 @@ func TestInferencePoolConvertFrom(t *testing.T) {
300300
wantErr: false,
301301
},
302302
{
303-
name: "conversion from v1 to v1alpha2 with nil extensionRef",
303+
name: "conversion from v1 to v1alpha2 with empty extensionRef",
304304
src: &v1.InferencePool{
305305
TypeMeta: metav1.TypeMeta{
306306
Kind: "InferencePool",
@@ -316,7 +316,7 @@ func TestInferencePoolConvertFrom(t *testing.T) {
316316
"app": "my-model-server",
317317
},
318318
},
319-
TargetPortNumber: 8080,
319+
TargetPorts: []v1.Port{{Number: v1.PortNumber(int32(8080))}},
320320
},
321321
Status: v1.InferencePoolStatus{
322322
Parents: []v1.PoolStatus{
@@ -348,7 +348,6 @@ func TestInferencePoolConvertFrom(t *testing.T) {
348348
"app": "my-model-server",
349349
},
350350
TargetPortNumber: 8080,
351-
ExtensionRef: &Extension{},
352351
},
353352
Status: InferencePoolStatus{
354353
Parents: []PoolStatus{

apix/v1alpha2/inferencepool_types.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ type InferencePoolSpec struct {
7070
TargetPortNumber int32 `json:"targetPortNumber"`
7171

7272
// Extension configures an endpoint picker as an extension service.
73-
ExtensionRef *Extension `json:"extensionRef,omitempty"`
73+
// +required
74+
ExtensionRef Extension `json:"extensionRef,omitempty"`
7475
}
7576

7677
// Extension specifies how to configure an extension that runs the endpoint picker.

apix/v1alpha2/zz_generated.deepcopy.go

Lines changed: 1 addition & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

client-go/applyconfiguration/api/v1/inferencepoolspec.go

Lines changed: 13 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

client-go/applyconfiguration/api/v1/port.go

Lines changed: 43 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

client-go/applyconfiguration/utils.go

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/epp/runner/runner.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ var (
148148
"The configuration specified as text, in lieu of a file")
149149

150150
modelServerMetricsPort = flag.Int("model-server-metrics-port", 0, "Port to scrape metrics from pods. "+
151-
"Default value will be set to InferencePool.Spec.TargetPortNumber if not set.")
151+
"Default value will be set to the InferencePool.Spec.TargetPorts[0].Number if not set.")
152152
modelServerMetricsPath = flag.String("model-server-metrics-path", "/metrics", "Path to scrape metrics from pods")
153153
modelServerMetricsScheme = flag.String("model-server-metrics-scheme", "http", "Scheme to scrape metrics from pods")
154154
modelServerMetricsHttpsInsecureSkipVerify = flag.Bool("model-server-metrics-https-insecure-skip-verify", true, "When using 'https' scheme for 'model-server-metrics-scheme', configure 'InsecureSkipVerify' (default to true)")

0 commit comments

Comments
 (0)