From b785ad9759e00d3ccb7bacef66f3e7884fd38082 Mon Sep 17 00:00:00 2001 From: dummy-head Date: Wed, 29 Nov 2017 23:53:17 -0800 Subject: [PATCH] Reserved memory for captain and nginx as we don't every want them OOM --- app-backend/src/docker/DockerApi.js | 14 ++++++++++++-- app-backend/src/user/LoadBalancerManager.js | 8 ++++++-- app-backend/src/utils/CaptainInstaller.js | 6 +++++- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/app-backend/src/docker/DockerApi.js b/app-backend/src/docker/DockerApi.js index 7a504ee..d91f894 100644 --- a/app-backend/src/docker/DockerApi.js +++ b/app-backend/src/docker/DockerApi.js @@ -415,8 +415,15 @@ class DockerApi { * value: 'some value' * } * ] + * @param resourcesObject: + * [ + * { + * Limits: { NanoCPUs , MemoryBytes} + * Reservation: { NanoCPUs , MemoryBytes} + * + * ] */ - createServiceOnNodeId(imageName, serviceName, portsToMap, nodeId, volumeToMount, arrayOfEnvKeyAndValue) { + createServiceOnNodeId(imageName, serviceName, portsToMap, nodeId, volumeToMount, arrayOfEnvKeyAndValue, resourcesObject) { const self = this; @@ -437,6 +444,7 @@ class DockerApi { ContainerSpec: { Image: imageName }, + Resources: resourcesObject, Placement: { Constraints: nodeId ? ['node.id == ' + nodeId] : [] } @@ -875,6 +883,8 @@ class DockerApi { * } * ] * @param instanceCount: String '12' or null + * @param nodeId: nodeId of the node this service will be locked to or null + * @param namespace: String 'captain' or null * @returns {Promise.<>} */ updateService(serviceName, imageName, volumes, networks, arrayOfEnvKeyAndValue, secrets, authObject, instanceCount, nodeId, namespace) { @@ -942,7 +952,7 @@ class DockerApi { // named volumes are created here: // /var/lib/docker/volumes/YOUR_VOLUME_NAME/_data mts.push({ - Source: (namespace ? (namespace + '--' ) : '' ) + v.volumeName, + Source: (namespace ? (namespace + '--') : '') + v.volumeName, Target: v.containerPath, Type: TYPE_VOLUME, ReadOnly: false diff --git a/app-backend/src/user/LoadBalancerManager.js b/app-backend/src/user/LoadBalancerManager.js index 8595816..2210c32 100644 --- a/app-backend/src/user/LoadBalancerManager.js +++ b/app-backend/src/user/LoadBalancerManager.js @@ -251,7 +251,7 @@ class LoadBalancerManager { } - ensureBaseNginxConf(){ + ensureBaseNginxConf() { return Promise.resolve() .then(function () { @@ -280,7 +280,11 @@ class LoadBalancerManager { }, { containerPort: 443, hostPort: 443 - }], nodeId) + }], nodeId, null, null, { + Reservation: { + MemoryBytes: 30 * 1024 * 1024 + } + }) .then(function () { let waitTimeInMillis = 5000; diff --git a/app-backend/src/utils/CaptainInstaller.js b/app-backend/src/utils/CaptainInstaller.js index 927d676..2cb040e 100644 --- a/app-backend/src/utils/CaptainInstaller.js +++ b/app-backend/src/utils/CaptainInstaller.js @@ -111,7 +111,11 @@ module.exports.install = function () { }); return DockerApi.get().createServiceOnNodeId(captainNameAndVersion, - CaptainConstants.captainServiceName, ports, nodeId, volumeToMount, env); + CaptainConstants.captainServiceName, ports, nodeId, volumeToMount, env, { + Reservation: { + MemoryBytes: 100 * 1024 * 1024 + } + }); }) .catch(function (error) {