@@ -225,7 +225,7 @@ protected Pair<Long, Long> calculateNewClusterCountAndCapacity(Long newWorkerSiz
225225 cores = serviceOffering .getCpu () * totalClusterSize ;
226226 memory = serviceOffering .getRamSize () * totalClusterSize ;
227227 } else {
228- long nodeCount = getNodeCountForType (nodeType , kubernetesCluster );
228+ long nodeCount = KubernetesClusterManagerImpl . getNodeCountForType (nodeType , kubernetesCluster );
229229 Long existingOfferingId = getExistingOfferingIdForNodeType (nodeType , kubernetesCluster );
230230 if (existingOfferingId == null ) {
231231 existingOfferingId = serviceOffering .getId ();
@@ -243,17 +243,6 @@ protected Pair<Long, Long> calculateNewClusterCountAndCapacity(Long newWorkerSiz
243243 return new Pair <>(cores , memory );
244244 }
245245
246- private long getNodeCountForType (KubernetesClusterNodeType nodeType , KubernetesCluster kubernetesCluster ) {
247- if (WORKER == nodeType ) {
248- return kubernetesCluster .getNodeCount ();
249- } else if (CONTROL == nodeType ) {
250- return kubernetesCluster .getControlNodeCount ();
251- } else if (ETCD == nodeType ) {
252- return kubernetesCluster .getEtcdNodeCount ();
253- }
254- return kubernetesCluster .getTotalNodeCount ();
255- }
256-
257246 protected Pair <Long , Long > calculateClusterNewCapacity (KubernetesCluster kubernetesCluster ,
258247 Pair <Long , Long > previousNodeTypeCapacity ,
259248 Pair <Long , Long > newNodeTypeCapacity ) {
@@ -337,17 +326,19 @@ private void validateKubernetesClusterScaleSizeParameters() throws CloudRuntimeE
337326 // Check capacity and transition state
338327 final long newVmRequiredCount = clusterSize - originalClusterSize ;
339328 final ServiceOffering clusterServiceOffering = serviceOfferingDao .findById (kubernetesCluster .getServiceOfferingId ());
340- if (clusterServiceOffering == null ) {
329+ final ServiceOffering existingWorkerOffering = serviceOfferingDao .findById (kubernetesCluster .getWorkerNodeServiceOfferingId ());
330+ final ServiceOffering effectiveOffering = existingWorkerOffering != null ? existingWorkerOffering : clusterServiceOffering ;
331+ if (effectiveOffering == null ) {
341332 logTransitStateToFailedIfNeededAndThrow (Level .WARN , String .format ("Scaling failed for Kubernetes cluster : %s, cluster service offering not found" , kubernetesCluster .getName ()));
342333 }
343334 if (newVmRequiredCount > 0 ) {
344335 final DataCenter zone = dataCenterDao .findById (kubernetesCluster .getZoneId ());
345336 VMTemplateVO clusterTemplate = templateDao .findById (kubernetesCluster .getTemplateId ());
346337 try {
347338 if (originalState .equals (KubernetesCluster .State .Running )) {
348- plan (newVmRequiredCount , zone , clusterServiceOffering , kubernetesCluster .getDomainId (), kubernetesCluster .getAccountId (), clusterTemplate .getHypervisorType (), clusterTemplate .getArch ());
339+ plan (newVmRequiredCount , zone , effectiveOffering , kubernetesCluster .getDomainId (), kubernetesCluster .getAccountId (), clusterTemplate .getHypervisorType (), clusterTemplate .getArch ());
349340 } else {
350- plan (kubernetesCluster .getTotalNodeCount () + newVmRequiredCount , zone , clusterServiceOffering , kubernetesCluster .getDomainId (), kubernetesCluster .getAccountId (), clusterTemplate .getHypervisorType (), clusterTemplate .getArch ());
341+ plan (kubernetesCluster .getTotalNodeCount () + newVmRequiredCount , zone , effectiveOffering , kubernetesCluster .getDomainId (), kubernetesCluster .getAccountId (), clusterTemplate .getHypervisorType (), clusterTemplate .getArch ());
351342 }
352343 } catch (InsufficientCapacityException e ) {
353344 logTransitStateToFailedIfNeededAndThrow (Level .WARN , String .format ("Scaling failed for Kubernetes cluster : %s in zone : %s, insufficient capacity" , kubernetesCluster .getName (), zone .getName ()));
@@ -370,7 +361,7 @@ private void scaleKubernetesClusterOffering(KubernetesClusterNodeType nodeType,
370361 kubernetesCluster = updateKubernetesClusterEntryForNodeType (null , nodeType , serviceOffering , updateNodeOffering , updateClusterOffering );
371362 return ;
372363 }
373- final long size = getNodeCountForType (nodeType , kubernetesCluster );
364+ final long size = KubernetesClusterManagerImpl . getNodeCountForType (nodeType , kubernetesCluster );
374365 List <KubernetesClusterVmMapVO > vmList = kubernetesClusterVmMapDao .listByClusterIdAndVmType (kubernetesCluster .getId (), nodeType );
375366 final long tobeScaledVMCount = Math .min (vmList .size (), size );
376367 for (long i = 0 ; i < tobeScaledVMCount ; i ++) {
@@ -610,6 +601,9 @@ public boolean scaleCluster() throws CloudRuntimeException {
610601 private ServiceOffering getExistingServiceOfferingForNodeType (KubernetesClusterNodeType nodeType , KubernetesCluster kubernetesCluster ) {
611602 Long existingOfferingId = getExistingOfferingIdForNodeType (nodeType , kubernetesCluster );
612603 if (existingOfferingId == null ) {
604+ if (KubernetesClusterManagerImpl .getNodeCountForType (nodeType , kubernetesCluster ) <= 0 ) {
605+ return null ;
606+ }
613607 logAndThrow (Level .ERROR , String .format ("The Kubernetes cluster %s does not have a service offering set for node type %s" ,
614608 kubernetesCluster .getName (), nodeType .name ()));
615609 }
0 commit comments