@@ -30,7 +30,21 @@ func (infer *Inference) GenerateOllamaResource(request *module.GeneratorRequest)
3030 }
3131 resources = append (resources , * svc )
3232
33- patcher , err := infer .GenerateEnv (svcName )
33+ // Build Kubernetes Deployment for proxy.
34+ deploymentProxy , err := infer .generateProxyDeployment (request , svcName )
35+ if err != nil {
36+ return nil , nil , err
37+ }
38+ resources = append (resources , * deploymentProxy )
39+
40+ // Build Kubernetes Service for proxy.
41+ svcProxy , svcNameProxy , err := infer .generateProxyService (request )
42+ if err != nil {
43+ return nil , nil , err
44+ }
45+ resources = append (resources , * svcProxy )
46+
47+ patcher , err := infer .GenerateEnv (svcNameProxy )
3448 if err != nil {
3549 return nil , nil , err
3650 }
@@ -200,3 +214,126 @@ func (infer *Inference) generateMatchLabels() map[string]string {
200214 "accessory" : strings .ToLower (infer .Framework ),
201215 }
202216}
217+
218+ // generateMatchLabels generates the match labels for the Kubernetes resources of proxy.
219+ func (infer * Inference ) generateMatchLabelsForProxy () map [string ]string {
220+ return map [string ]string {
221+ "accessory" : strings .ToLower (ProxyName ),
222+ }
223+ }
224+
225+ // generatePodSpec generates the Kubernetes PodSpec for proxy.
226+ func (infer * Inference ) generateProxyPodSpec (_ * module.GeneratorRequest , svcName string ) (v1.PodSpec , error ) {
227+ portName := strings .ToLower (ProxyName ) + inferContainerPortSuffix
228+ if len (portName ) > 15 {
229+ portName = portName [:15 ]
230+ }
231+ containerPort := int32 (ProxyPort )
232+ ports := []v1.ContainerPort {
233+ {
234+ Name : portName ,
235+ ContainerPort : containerPort ,
236+ },
237+ }
238+
239+ envVars := []v1.EnvVar {
240+ {
241+ Name : "MODEL" ,
242+ Value : infer .Model ,
243+ },
244+ {
245+ Name : "FRAMEWORK_URL" ,
246+ Value : svcName ,
247+ },
248+ }
249+
250+ image := ProxyImage
251+ podSpec := v1.PodSpec {
252+ Containers : []v1.Container {
253+ {
254+ Name : strings .ToLower (ProxyName ) + inferContainerSuffix ,
255+ Image : image ,
256+ Ports : ports ,
257+ Env : envVars ,
258+ },
259+ },
260+ }
261+ return podSpec , nil
262+ }
263+
264+ // generateDeployment generates the Kubernetes Deployment resource for proxy.
265+ func (infer * Inference ) generateProxyDeployment (request * module.GeneratorRequest , svcName string ) (* apiv1.Resource , error ) {
266+ podSpec , err := infer .generateProxyPodSpec (request , svcName )
267+ if err != nil {
268+ return nil , nil
269+ }
270+
271+ deployment := & appsv1.Deployment {
272+ TypeMeta : metav1.TypeMeta {
273+ Kind : "Deployment" ,
274+ APIVersion : appsv1 .SchemeGroupVersion .String (),
275+ },
276+ ObjectMeta : metav1.ObjectMeta {
277+ Name : strings .ToLower (ProxyName ) + inferDeploymentSuffix ,
278+ Namespace : request .Project ,
279+ },
280+ Spec : appsv1.DeploymentSpec {
281+ Selector : & metav1.LabelSelector {
282+ MatchLabels : infer .generateMatchLabelsForProxy (),
283+ },
284+ Template : v1.PodTemplateSpec {
285+ ObjectMeta : metav1.ObjectMeta {
286+ Labels : infer .generateMatchLabelsForProxy (),
287+ },
288+ Spec : podSpec ,
289+ },
290+ },
291+ }
292+
293+ resourceID := module .KubernetesResourceID (deployment .TypeMeta , deployment .ObjectMeta )
294+ resource , err := module .WrapK8sResourceToKusionResource (resourceID , deployment )
295+ if err != nil {
296+ return nil , err
297+ }
298+
299+ return resource , nil
300+ }
301+
302+ // generateService generates the Kubernetes Service resource for proxy.
303+ func (infer * Inference ) generateProxyService (request * module.GeneratorRequest ) (* apiv1.Resource , string , error ) {
304+ svcName := strings .ToLower (ProxyName ) + inferServiceSuffix
305+ svcPort := []v1.ServicePort {
306+ {
307+ Port : int32 (CalledPort ),
308+ TargetPort : intstr.IntOrString {
309+ Type : intstr .Int ,
310+ IntVal : int32 (ProxyPort ),
311+ },
312+ },
313+ }
314+
315+ service := & v1.Service {
316+ TypeMeta : metav1.TypeMeta {
317+ Kind : "Service" ,
318+ APIVersion : v1 .SchemeGroupVersion .String (),
319+ },
320+ ObjectMeta : metav1.ObjectMeta {
321+ Name : svcName ,
322+ Namespace : request .Project ,
323+ Labels : infer .generateMatchLabelsForProxy (),
324+ },
325+ Spec : v1.ServiceSpec {
326+ Type : v1 .ServiceTypeClusterIP ,
327+ Ports : svcPort ,
328+ Selector : infer .generateMatchLabelsForProxy (),
329+ },
330+ }
331+
332+ resourceID := module .KubernetesResourceID (service .TypeMeta , service .ObjectMeta )
333+ resource , err := module .WrapK8sResourceToKusionResource (resourceID , service )
334+ if err != nil {
335+ return nil , svcName , err
336+ }
337+
338+ return resource , svcName , nil
339+ }
0 commit comments