Skip to content

Commit c3b83a4

Browse files
committed
Prefer CKS ISO arch instead of the system VM setting
1 parent 337b0ee commit c3b83a4

File tree

3 files changed

+38
-4
lines changed

3 files changed

+38
-4
lines changed

plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -433,8 +433,13 @@ private IpAddress getSourceNatIp(Network network) {
433433
return null;
434434
}
435435

436-
public VMTemplateVO getKubernetesServiceTemplate(DataCenter dataCenter, Hypervisor.HypervisorType hypervisorType) {
437-
String preferredArchitecture = ResourceManager.SystemVmPreferredArchitecture.valueIn(dataCenter.getId());
436+
public VMTemplateVO getKubernetesServiceTemplate(DataCenter dataCenter, Hypervisor.HypervisorType hypervisorType,
437+
KubernetesSupportedVersion clusterKubernetesVersion) {
438+
String systemVMPreferredArchitecture = ResourceManager.SystemVmPreferredArchitecture.valueIn(dataCenter.getId());
439+
VMTemplateVO cksIso = clusterKubernetesVersion != null ?
440+
templateDao.findById(clusterKubernetesVersion.getIsoId()) :
441+
null;
442+
String preferredArchitecture = getCksClusterPreferredArch(systemVMPreferredArchitecture, cksIso);
438443
VMTemplateVO template = templateDao.findSystemVMReadyTemplate(dataCenter.getId(), hypervisorType, preferredArchitecture);
439444
if (DataCenter.Type.Edge.equals(dataCenter.getType()) && template != null && !template.isDirectDownload()) {
440445
logger.debug(String.format("Template %s can not be used for edge zone %s", template, dataCenter));
@@ -446,6 +451,14 @@ public VMTemplateVO getKubernetesServiceTemplate(DataCenter dataCenter, Hypervis
446451
return template;
447452
}
448453

454+
protected String getCksClusterPreferredArch(String systemVMPreferredArchitecture, VMTemplateVO cksIso) {
455+
if (cksIso == null) {
456+
return systemVMPreferredArchitecture;
457+
}
458+
String cksIsoArchName = cksIso.getArch().name();
459+
return cksIsoArchName.equals(systemVMPreferredArchitecture) ? systemVMPreferredArchitecture : cksIsoArchName;
460+
}
461+
449462
protected void validateIsolatedNetworkIpRules(long ipId, FirewallRule.Purpose purpose, Network network, int clusterTotalNodeCount) {
450463
List<FirewallRuleVO> rules = firewallRulesDao.listByIpAndPurposeAndNotRevoked(ipId, purpose);
451464
for (FirewallRuleVO rule : rules) {
@@ -1303,7 +1316,7 @@ public KubernetesCluster createManagedKubernetesCluster(CreateKubernetesClusterC
13031316
}
13041317

13051318
final Network defaultNetwork = getKubernetesClusterNetworkIfMissing(cmd.getName(), zone, owner, (int)controlNodeCount, (int)clusterSize, cmd.getExternalLoadBalancerIpAddress(), cmd.getNetworkId());
1306-
final VMTemplateVO finalTemplate = getKubernetesServiceTemplate(zone, deployDestination.getCluster().getHypervisorType());
1319+
final VMTemplateVO finalTemplate = getKubernetesServiceTemplate(zone, deployDestination.getCluster().getHypervisorType(), clusterKubernetesVersion);
13071320

13081321
compareKubernetesIsoArchToSelectedTemplateArch(clusterKubernetesVersion, finalTemplate);
13091322

plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterActionWorker.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
import javax.inject.Inject;
3131

32+
import com.cloud.kubernetes.version.KubernetesSupportedVersionVO;
3233
import org.apache.logging.log4j.Level;
3334
import org.apache.logging.log4j.Logger;
3435
import org.apache.logging.log4j.LogManager;
@@ -194,7 +195,8 @@ protected void init() {
194195
DataCenterVO dataCenterVO = dataCenterDao.findById(zoneId);
195196
VMTemplateVO template = templateDao.findById(templateId);
196197
Hypervisor.HypervisorType type = template.getHypervisorType();
197-
this.clusterTemplate = manager.getKubernetesServiceTemplate(dataCenterVO, type);
198+
KubernetesSupportedVersionVO kubernetesSupportedVersion = kubernetesSupportedVersionDao.findById(this.kubernetesCluster.getKubernetesVersionId());
199+
this.clusterTemplate = manager.getKubernetesServiceTemplate(dataCenterVO, type, kubernetesSupportedVersion);
198200
this.sshKeyFile = getManagementServerSshPublicKeyFile();
199201
}
200202

plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImplTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import com.cloud.api.query.dao.TemplateJoinDao;
2323
import com.cloud.api.query.vo.TemplateJoinVO;
24+
import com.cloud.cpu.CPU;
2425
import com.cloud.dc.DataCenter;
2526
import com.cloud.exception.InvalidParameterValueException;
2627
import com.cloud.exception.PermissionDeniedException;
@@ -292,4 +293,22 @@ public void removeVmsFromCluster() {
292293
Mockito.when(kubernetesClusterDao.findById(Mockito.anyLong())).thenReturn(cluster);
293294
Assert.assertTrue(kubernetesClusterManager.removeVmsFromCluster(cmd).size() > 0);
294295
}
296+
297+
@Test
298+
public void testGetCksClusterPreferredArchDifferentArchsPreferCKSIsoArch() {
299+
String systemVMArch = "x86_64";
300+
VMTemplateVO cksIso = Mockito.mock(VMTemplateVO.class);
301+
Mockito.when(cksIso.getArch()).thenReturn(CPU.CPUArch.arm64);
302+
String cksClusterPreferredArch = kubernetesClusterManager.getCksClusterPreferredArch(systemVMArch, cksIso);
303+
Assert.assertEquals(CPU.CPUArch.arm64.name(), cksClusterPreferredArch);
304+
}
305+
306+
@Test
307+
public void testGetCksClusterPreferredArchSameArch() {
308+
String systemVMArch = "x86_64";
309+
VMTemplateVO cksIso = Mockito.mock(VMTemplateVO.class);
310+
Mockito.when(cksIso.getArch()).thenReturn(CPU.CPUArch.amd64);
311+
String cksClusterPreferredArch = kubernetesClusterManager.getCksClusterPreferredArch(systemVMArch, cksIso);
312+
Assert.assertEquals(CPU.CPUArch.amd64.name(), cksClusterPreferredArch);
313+
}
295314
}

0 commit comments

Comments
 (0)