From fe81ae0af332ef91d09d081561a0fa0aa9f5d537 Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Tue, 7 May 2024 11:46:48 -0400 Subject: [PATCH] Reuse k8s cluster public IP for etcd nodes and rename etcd nodes --- ...esClusterResourceModifierActionWorker.java | 2 +- .../KubernetesClusterStartWorker.java | 39 ++++--------------- ui/public/locales/en.json | 1 - ui/src/components/view/InfoCard.vue | 18 --------- 4 files changed, 8 insertions(+), 52 deletions(-) diff --git a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterResourceModifierActionWorker.java b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterResourceModifierActionWorker.java index 94e8fedce02..07195b04c1a 100644 --- a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterResourceModifierActionWorker.java +++ b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterResourceModifierActionWorker.java @@ -786,7 +786,7 @@ public class KubernetesClusterResourceModifierActionWorker extends KubernetesClu prefix = kubernetesCluster.getUuid(); } } - prefix = "etcd-" + prefix; + prefix = prefix + "-etcd" ; if (prefix.length() > 40) { prefix = prefix.substring(0, 40); } diff --git a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterStartWorker.java b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterStartWorker.java index d5a580e05d0..e2949aaec37 100644 --- a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterStartWorker.java +++ b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterStartWorker.java @@ -32,7 +32,6 @@ import java.util.Objects; import java.util.stream.Collectors; import com.cloud.exception.NetworkRuleConflictException; -import com.cloud.utils.Ternary; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.InternalIdentity; import org.apache.cloudstack.framework.ca.Certificate; @@ -518,20 +517,12 @@ public class KubernetesClusterStartWorker extends KubernetesClusterResourceModif return additionalControlVms; } - private Ternary, List, List> provisionEtcdCluster(final Network network, final Long domainId, final Long accountId) + private Pair, List> provisionEtcdCluster(final Network network, final Long domainId, final Long accountId) throws InsufficientCapacityException, ResourceUnavailableException, ManagementServerException { List etcdNodeVms = new ArrayList<>(); - List etcdNodeIps = getEtcdNodePublicIpAddresses(network, kubernetesCluster.getEtcdNodeCount()); List etcdNodeGuestIps = getEtcdNodeGuestIps(network, kubernetesCluster.getEtcdNodeCount()); List etcdHostnames = getEtcdNodeHostnames(); for (int i = 0; i < kubernetesCluster.getEtcdNodeCount(); i++) { - IpAddress ip = etcdNodeIps.get(i); - if (Objects.isNull(ip)) { - String errMsg = String.format("No public IP found for the network: %s, to create Etcd node for " + - "Kubernetes cluster: %s", network, kubernetesCluster.getName()); - LOGGER.error(errMsg); - logAndThrow(Level.ERROR, errMsg); - } UserVm vm = createEtcdNode(etcdNodeGuestIps, etcdHostnames, i, domainId, accountId); addKubernetesClusterVm(kubernetesCluster.getId(), vm.getId(), false, false, true, true); startKubernetesVM(vm, domainId, accountId); @@ -544,19 +535,7 @@ public class KubernetesClusterStartWorker extends KubernetesClusterResourceModif LOGGER.info(String.format("Provisioned additional control VM : %s in to the Kubernetes cluster : %s", vm.getDisplayName(), kubernetesCluster.getName())); } } - return new Ternary<>(etcdNodeVms, etcdNodeGuestIps, etcdNodeIps); - } - - private List getEtcdNodePublicIpAddresses(final Network network, final long etcdNodeCount) throws InsufficientAddressCapacityException, ResourceUnavailableException, ResourceAllocationException { - List ipAddresses = new ArrayList<>(); - for (int i = 1; i <= etcdNodeCount; i++) { - if (network.getVpcId() == null) { - ipAddresses.add(acquirePublicIpForIsolatedNetwork(network)); - } else { - ipAddresses.add(acquireVpcTierKubernetesPublicIp(network, true)); - } - } - return ipAddresses; + return new Pair<>(etcdNodeVms, etcdNodeGuestIps); } private List getEtcdNodeGuestIps(final Network network, final long etcdNodeCount) { @@ -614,7 +593,7 @@ public class KubernetesClusterStartWorker extends KubernetesClusterResourceModif setupKubernetesClusterIsolatedNetworkRules(publicIp, network, clusterVMIds, true); } - protected void setupKubernetesEtcdNetworkRules(List etcdNodeIps, List etcdVms, Network network) throws ManagementServerException, ResourceUnavailableException { + protected void setupKubernetesEtcdNetworkRules(List etcdVms, Network network) throws ManagementServerException, ResourceUnavailableException { if (!Network.GuestType.Isolated.equals(network.getGuestType())) { if (LOGGER.isDebugEnabled()) { LOGGER.debug(String.format("Network : %s for Kubernetes cluster : %s is not an isolated network, therefore, no need for network rules", network.getName(), kubernetesCluster.getName())); @@ -622,18 +601,16 @@ public class KubernetesClusterStartWorker extends KubernetesClusterResourceModif } List etcdVmIds = etcdVms.stream().map(UserVm::getId).collect(Collectors.toList()); Integer startPort = KubernetesClusterService.KubernetesEtcdNodeStartPort.value(); + IpAddress publicIp = ipAddressDao.findByIpAndDcId(kubernetesCluster.getZoneId(), publicIpAddress); for (int i = 0; i < etcdVmIds.size(); i++) { - IpAddress publicIp = etcdNodeIps.get(i); + startPort += i; try { provisionFirewallRules(publicIp, owner, startPort, startPort); - provisionFirewallRules(publicIp, owner, ETCD_NODE_CLIENT_REQUEST_PORT, ETCD_NODE_PEER_COMM_PORT); } catch (NoSuchFieldException | IllegalAccessException | ResourceUnavailableException | NetworkRuleConflictException e) { throw new ManagementServerException(String.format("Failed to provision firewall rules for etcd nodes for the Kubernetes cluster : %s", kubernetesCluster.getName()), e); } provisionPublicIpPortForwardingRule(publicIp, network, owner, etcdVmIds.get(i), startPort, DEFAULT_SSH_PORT); - provisionPublicIpPortForwardingRule(publicIp, network, owner, etcdVmIds.get(i), ETCD_NODE_CLIENT_REQUEST_PORT, ETCD_NODE_CLIENT_REQUEST_PORT); - provisionPublicIpPortForwardingRule(publicIp, network, owner, etcdVmIds.get(i), ETCD_NODE_PEER_COMM_PORT, ETCD_NODE_PEER_COMM_PORT); } } @@ -737,12 +714,10 @@ public class KubernetesClusterStartWorker extends KubernetesClusterResourceModif List etcdVms = new ArrayList<>(); List etcdGuestNodeIps = new ArrayList<>(); - List etcdPublicNodeIps = new ArrayList<>(); if (kubernetesCluster.getEtcdNodeCount() > 0) { - Ternary, List, List> etcdNodesAndIps = provisionEtcdCluster(network, domainId, accountId); + Pair, List> etcdNodesAndIps = provisionEtcdCluster(network, domainId, accountId); etcdVms = etcdNodesAndIps.first(); etcdGuestNodeIps = etcdNodesAndIps.second(); - etcdPublicNodeIps = etcdNodesAndIps.third(); } List clusterVMs = new ArrayList<>(); @@ -781,7 +756,7 @@ public class KubernetesClusterStartWorker extends KubernetesClusterResourceModif logTransitStateAndThrow(Level.ERROR, String.format("Failed to setup Kubernetes cluster : %s, unable to setup network rules", kubernetesCluster.getName()), kubernetesCluster.getId(), KubernetesCluster.Event.CreateFailed, e); } try { - setupKubernetesEtcdNetworkRules(etcdPublicNodeIps, etcdVms, network); + setupKubernetesEtcdNetworkRules(etcdVms, network); } catch (ManagementServerException e) { logTransitStateAndThrow(Level.ERROR, String.format("Failed to setup Kubernetes cluster : %s, unable to setup network rules for etcd nodes", kubernetesCluster.getName()), kubernetesCluster.getId(), KubernetesCluster.Event.CreateFailed, e); } diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index 803565313ef..65b44209b38 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -2443,7 +2443,6 @@ "label.quotagb": "Quota in GB", "label.encryption": "Encryption", "label.etcdnodes": "Number of etcd nodes", -"label.etcd.ips": "etcd Node(s) IP address(es)", "label.versioning": "Versioning", "label.objectlocking": "Object Lock", "label.bucket.policy": "Bucket Policy", diff --git a/ui/src/components/view/InfoCard.vue b/ui/src/components/view/InfoCard.vue index 07d6058126c..2720f960b99 100644 --- a/ui/src/components/view/InfoCard.vue +++ b/ui/src/components/view/InfoCard.vue @@ -188,24 +188,6 @@ -
-
{{ $t('label.etcd.ips') }}
-
-
-
- - -   - -
-
-
-
{{ $t('label.cpu') }}