Skip to content
Snippets Groups Projects
Commit 5e7c4222 authored by Lukasz Lopatowski's avatar Lukasz Lopatowski
Browse files

Added support for scaling statefulSets and proper error handling

parent 6620f8c0
No related branches found
No related tags found
2 merge requests!273Release 1.8.0 update,!271Resolve "Add application instance scaling support"
Pipeline #95422 passed
...@@ -81,6 +81,16 @@ public class KubernetesApiClientService { ...@@ -81,6 +81,16 @@ public class KubernetesApiClientService {
} }
} }
public void scaleStatefulSet(KCluster kCluster, String namespace, String deploymentName, int replicas) {
try (KubernetesClient client = initClient(kCluster)) {
client.apps()
.statefulSets()
.inNamespace(namespace)
.withName(deploymentName)
.scale(replicas);
}
}
private KubernetesClient initClient(KCluster kCluster) { private KubernetesClient initClient(KCluster kCluster) {
KubernetesClient client; KubernetesClient client;
if (Objects.nonNull(kCluster)) { if (Objects.nonNull(kCluster)) {
......
...@@ -203,7 +203,7 @@ public class NmServiceDeploymentCoordinator implements NmServiceDeploymentProvid ...@@ -203,7 +203,7 @@ public class NmServiceDeploymentCoordinator implements NmServiceDeploymentProvid
} catch (CouldNotRestartServiceException } catch (CouldNotRestartServiceException
| ContainerOrchestratorInternalErrorException e) { | ContainerOrchestratorInternalErrorException e) {
notifyStateChangeListeners(deploymentId, RESTART_FAILED, e.getMessage()); notifyStateChangeListeners(deploymentId, RESTART_FAILED, e.getMessage());
throw new CouldNotRestartServiceException("NM Service restart failed -> " + e.getMessage()); throw new CouldNotRestartServiceException("Service restart failed -> " + e.getMessage());
} }
} }
...@@ -214,7 +214,7 @@ public class NmServiceDeploymentCoordinator implements NmServiceDeploymentProvid ...@@ -214,7 +214,7 @@ public class NmServiceDeploymentCoordinator implements NmServiceDeploymentProvid
notifyStateChangeListeners(deploymentId, PAUSE_INITIATED); notifyStateChangeListeners(deploymentId, PAUSE_INITIATED);
orchestrator.pauseNmService(deploymentId); orchestrator.pauseNmService(deploymentId);
notifyStateChangeListeners(deploymentId, PAUSED); notifyStateChangeListeners(deploymentId, PAUSED);
} catch (KubernetesClientSetupException e) { } catch (CouldNotPauseServiceException e) {
notifyStateChangeListeners(deploymentId, PAUSE_FAILED, e.getMessage()); notifyStateChangeListeners(deploymentId, PAUSE_FAILED, e.getMessage());
throw new CouldNotPauseServiceException("Service scale down failed -> " + e.getMessage()); throw new CouldNotPauseServiceException("Service scale down failed -> " + e.getMessage());
} }
......
...@@ -4,10 +4,12 @@ import lombok.RequiredArgsConstructor; ...@@ -4,10 +4,12 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.geant.nmaas.externalservices.kubernetes.KubernetesClusterNamespaceService; import net.geant.nmaas.externalservices.kubernetes.KubernetesClusterNamespaceService;
import net.geant.nmaas.kubernetes.KubernetesApiClientService; import net.geant.nmaas.kubernetes.KubernetesApiClientService;
import net.geant.nmaas.kubernetes.remote.entities.KCluster;
import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.KServiceOperationsManager; import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.KServiceOperationsManager;
import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.KubernetesRepositoryManager; import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.KubernetesRepositoryManager;
import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.entities.KubernetesNmServiceInfo; import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.entities.KubernetesNmServiceInfo;
import net.geant.nmaas.orchestration.Identifier; import net.geant.nmaas.orchestration.Identifier;
import net.geant.nmaas.orchestration.exceptions.InvalidDeploymentIdException;
import net.geant.nmaas.utils.logging.LogLevel; import net.geant.nmaas.utils.logging.LogLevel;
import net.geant.nmaas.utils.logging.Loggable; import net.geant.nmaas.utils.logging.Loggable;
import org.apache.commons.lang3.NotImplementedException; import org.apache.commons.lang3.NotImplementedException;
...@@ -41,7 +43,15 @@ public class DefaultKServiceOperationsManager implements KServiceOperationsManag ...@@ -41,7 +43,15 @@ public class DefaultKServiceOperationsManager implements KServiceOperationsManag
Stream.of(serviceInfo.getDescriptiveDeploymentId().getValue(), serviceInfo.getKubernetesTemplate().getMainDeploymentName()) Stream.of(serviceInfo.getDescriptiveDeploymentId().getValue(), serviceInfo.getKubernetesTemplate().getMainDeploymentName())
.filter(Objects::nonNull) .filter(Objects::nonNull)
.collect(Collectors.joining("-")); .collect(Collectors.joining("-"));
kubernetesApiClientService.scaleDeployment(serviceInfo.getRemoteCluster(), namespace, kubernetesDeploymentName, replicas); final KCluster remoteCluster = serviceInfo.getRemoteCluster();
if (Objects.nonNull(kubernetesApiClientService.getDeployment(remoteCluster, namespace, kubernetesDeploymentName))) {
kubernetesApiClientService.scaleDeployment(remoteCluster, namespace, kubernetesDeploymentName, replicas);
return;
} else if (Objects.nonNull(kubernetesApiClientService.getStatefulSet(remoteCluster, namespace, kubernetesDeploymentName))) {
kubernetesApiClientService.scaleStatefulSet(remoteCluster, namespace, kubernetesDeploymentName, replicas);
return;
}
throw new InvalidDeploymentIdException("Could not find either deployment or statefulset with given name " + deploymentId);
} }
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment