Skip to content

Commit 7ac1c83

Browse files
author
Corneil du Plessis
committed
Added k8s requests and limits for ephemeral-storage , hugepages-2Mi and hugepages-1Gi
Fixes spring-attic#441
1 parent ff82f6f commit 7ac1c83

File tree

3 files changed

+203
-5
lines changed

3 files changed

+203
-5
lines changed

spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/DeploymentPropertiesResolver.java

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,24 @@ Map<String, Quantity> deduceResourceLimits(Map<String, String> kubernetesDeploye
173173
cpu = properties.getLimits().getCpu();
174174
}
175175

176+
String ephemeralStorage = PropertyParserUtils.getDeploymentPropertyValue(kubernetesDeployerProperties, this.propertyPrefix + ".limits.ephemeral-storage");
177+
178+
if(!StringUtils.hasText(ephemeralStorage)) {
179+
ephemeralStorage = properties.getLimits().getEphemeralStorage();
180+
}
181+
182+
String hugePages2Mi = PropertyParserUtils.getDeploymentPropertyValue(kubernetesDeployerProperties, this.propertyPrefix + ".limits.hugepages-2Mi");
183+
184+
if(!StringUtils.hasText(hugePages2Mi)) {
185+
hugePages2Mi = properties.getLimits().getHugepages2Mi();
186+
}
187+
188+
String hugePages1Gi = PropertyParserUtils.getDeploymentPropertyValue(kubernetesDeployerProperties, this.propertyPrefix + ".limits.hugepages-1Gi");
189+
190+
if(!StringUtils.hasText(hugePages1Gi)) {
191+
hugePages1Gi = properties.getLimits().getHugepages1Gi();
192+
}
193+
176194
String gpuVendor = PropertyParserUtils.getDeploymentPropertyValue(kubernetesDeployerProperties,
177195
this.propertyPrefix + ".limits.gpuVendor");
178196

@@ -197,10 +215,25 @@ Map<String, Quantity> deduceResourceLimits(Map<String, String> kubernetesDeploye
197215
limits.put("cpu", new Quantity(cpu));
198216
}
199217

218+
if(StringUtils.hasText(ephemeralStorage)) {
219+
limits.put("ephemeral-storage", new Quantity(ephemeralStorage));
220+
}
221+
222+
if(StringUtils.hasText(hugePages2Mi)) {
223+
limits.put("hugepages-2Mi", new Quantity(hugePages2Mi));
224+
}
225+
226+
if(StringUtils.hasText(hugePages1Gi)) {
227+
limits.put("hugepages-1Gi", new Quantity(hugePages1Gi));
228+
}
229+
200230
if (StringUtils.hasText(gpuVendor) && StringUtils.hasText(gpuCount)) {
201231
limits.put(gpuVendor + "/gpu", new Quantity(gpuCount));
202232
}
203233

234+
if(logger.isDebugEnabled()) {
235+
logger.debug("limits:" + limits);
236+
}
204237
return limits;
205238
}
206239

@@ -254,8 +287,27 @@ Map<String, Quantity> deduceResourceRequests(Map<String, String> kubernetesDeplo
254287
if (cpuOverride == null) {
255288
cpuOverride = properties.getRequests().getCpu();
256289
}
290+
String ephemeralStorage = PropertyParserUtils.getDeploymentPropertyValue(kubernetesDeployerProperties, this.propertyPrefix + ".requests.ephemeral-storage");
257291

258-
logger.debug("Using requests - cpu: " + cpuOverride + " mem: " + memOverride);
292+
if(!StringUtils.hasText(ephemeralStorage)) {
293+
ephemeralStorage = properties.getLimits().getEphemeralStorage();
294+
}
295+
296+
String hugePages2Mi = PropertyParserUtils.getDeploymentPropertyValue(kubernetesDeployerProperties, this.propertyPrefix + ".requests.hugepages-2Mi");
297+
298+
if(!StringUtils.hasText(hugePages2Mi)) {
299+
hugePages2Mi = properties.getLimits().getHugepages2Mi();
300+
}
301+
302+
String hugePages1Gi = PropertyParserUtils.getDeploymentPropertyValue(kubernetesDeployerProperties, this.propertyPrefix + ".requests.hugepages-1Gi");
303+
304+
if(!StringUtils.hasText(hugePages1Gi)) {
305+
hugePages1Gi = properties.getLimits().getHugepages1Gi();
306+
}
307+
308+
if(logger.isDebugEnabled()) {
309+
logger.debug("Using requests - cpu: " + cpuOverride + " mem: " + memOverride + " ephemeral-storage:" + ephemeralStorage + " hugepages-2Mi:" + hugePages2Mi + " hugepages-1Gi:" + hugePages1Gi);
310+
}
259311

260312
Map<String,Quantity> requests = new HashMap<String, Quantity>();
261313

@@ -267,6 +319,21 @@ Map<String, Quantity> deduceResourceRequests(Map<String, String> kubernetesDeplo
267319
requests.put("cpu", new Quantity(cpuOverride));
268320
}
269321

322+
if(StringUtils.hasText(ephemeralStorage)) {
323+
requests.put("ephemeral-storage", new Quantity(ephemeralStorage));
324+
}
325+
326+
if(StringUtils.hasText(hugePages2Mi)) {
327+
requests.put("hugepages-2Mi", new Quantity(hugePages2Mi));
328+
}
329+
330+
if(StringUtils.hasText(hugePages1Gi)) {
331+
requests.put("hugepages-1Gi", new Quantity(hugePages1Gi));
332+
}
333+
334+
if(logger.isDebugEnabled()) {
335+
logger.debug("requests:" + requests);
336+
}
270337
return requests;
271338
}
272339

spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesDeployerProperties.java

Lines changed: 87 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,20 @@ public static class LimitsResources {
9090
*/
9191
private String memory;
9292

93+
/**
94+
* Container resource ephemeral-storage limit.
95+
*/
96+
private String ephemeralStorage;
97+
98+
/**
99+
* Container resource hugepages-2Mi limit.
100+
*/
101+
private String hugepages2Mi;
102+
103+
/**
104+
* Container resource hugepages-1Gi limit.
105+
*/
106+
private String hugepages1Gi;
93107
/**
94108
* Container GPU vendor name for limit
95109
*/
@@ -113,9 +127,12 @@ public LimitsResources() {
113127
* Use the default constructor and set() methods instead.
114128
*/
115129
@Deprecated
116-
public LimitsResources(String cpu, String memory) {
130+
public LimitsResources(String cpu, String memory, String ephemeralStorage, String hugepages2Mi, String hugepages1Gi) {
117131
this.cpu = cpu;
118132
this.memory = memory;
133+
this.ephemeralStorage = ephemeralStorage;
134+
this.hugepages2Mi = hugepages2Mi;
135+
this.hugepages1Gi = hugepages1Gi;
119136
}
120137

121138
public String getCpu() {
@@ -134,6 +151,30 @@ public void setMemory(String memory) {
134151
this.memory = memory;
135152
}
136153

154+
public String getEphemeralStorage() {
155+
return ephemeralStorage;
156+
}
157+
158+
public void setEphemeralStorage(String ephemeralStorage) {
159+
this.ephemeralStorage = ephemeralStorage;
160+
}
161+
162+
public String getHugepages2Mi() {
163+
return hugepages2Mi;
164+
}
165+
166+
public void setHugepages2Mi(String hugepages2Mi) {
167+
this.hugepages2Mi = hugepages2Mi;
168+
}
169+
170+
public String getHugepages1Gi() {
171+
return hugepages1Gi;
172+
}
173+
174+
public void setHugepages1Gi(String hugepages1Gi) {
175+
this.hugepages1Gi = hugepages1Gi;
176+
}
177+
137178
public String getGpuVendor() {
138179
return gpuVendor;
139180
}
@@ -157,21 +198,39 @@ public void setGpuCount(String gpuCount) {
157198
public static class RequestsResources {
158199

159200
/**
160-
* Container request limit.
201+
* Container cpu request.
161202
*/
162203
private String cpu;
163204

164205
/**
165-
* Container memory limit.
206+
* Container memory request.
166207
*/
167208
private String memory;
168209

210+
/**
211+
* Container resource ephemeral-storage request.
212+
*/
213+
private String ephemeralStorage;
214+
215+
/**
216+
* Container resource hugepages-2Mi request.
217+
*/
218+
private String hugepages2Mi;
219+
220+
/**
221+
* Container resource hugepages-1Gi request.
222+
*/
223+
private String hugepages1Gi;
224+
169225
public RequestsResources() {
170226
}
171227

172-
public RequestsResources(String cpu, String memory) {
228+
public RequestsResources(String cpu, String memory, String ephemeralStorage, String hugepages2Mi, String hugepages1Gi) {
173229
this.cpu = cpu;
174230
this.memory = memory;
231+
this.ephemeralStorage = ephemeralStorage;
232+
this.hugepages2Mi = hugepages2Mi;
233+
this.hugepages1Gi = hugepages1Gi;
175234
}
176235

177236
public String getCpu() {
@@ -189,6 +248,30 @@ public String getMemory() {
189248
public void setMemory(String memory) {
190249
this.memory = memory;
191250
}
251+
252+
public String getEphemeralStorage() {
253+
return ephemeralStorage;
254+
}
255+
256+
public void setEphemeralStorage(String ephemeralStorage) {
257+
this.ephemeralStorage = ephemeralStorage;
258+
}
259+
260+
public String getHugepages2Mi() {
261+
return hugepages2Mi;
262+
}
263+
264+
public void setHugepages2Mi(String hugepages2Mi) {
265+
this.hugepages2Mi = hugepages2Mi;
266+
}
267+
268+
public String getHugepages1Gi() {
269+
return hugepages1Gi;
270+
}
271+
272+
public void setHugepages1Gi(String hugepages1Gi) {
273+
this.hugepages1Gi = hugepages1Gi;
274+
}
192275
}
193276

194277
public static class StatefulSet {

spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/RunAbstractKubernetesDeployerTests.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,4 +170,52 @@ public void requestMemory_deploymentProperty_usesDeploymentProperty() {
170170
Map<String, Quantity> requests = this.deploymentPropertiesResolver.deduceResourceRequests(deploymentRequest.getDeploymentProperties());
171171
assertThat(requests.get("memory")).isEqualTo(new Quantity("256Mi"));
172172
}
173+
174+
@Test
175+
public void requestEphemeralStorage_deploymentProperty_usesDeploymentProperty() {
176+
kubernetesDeployerProperties.getRequests().setEphemeralStorage("2Gi");
177+
deploymentProperties.put("spring.cloud.deployer.kubernetes.requests.ephemeral-storage", "2Gi");
178+
Map<String, Quantity> requests = this.deploymentPropertiesResolver.deduceResourceRequests(deploymentRequest.getDeploymentProperties());
179+
assertThat(requests.get("ephemeral-storage")).isEqualTo(new Quantity("2Gi"));
180+
}
181+
182+
@Test
183+
public void limitEphemeralStorage_deploymentProperty_usesDeploymentProperty() {
184+
kubernetesDeployerProperties.getLimits().setEphemeralStorage("2Gi");
185+
deploymentProperties.put("spring.cloud.deployer.kubernetes.limits.ephemeral-storage", "2Gi");
186+
Map<String, Quantity> limits = this.deploymentPropertiesResolver.deduceResourceLimits(deploymentRequest.getDeploymentProperties());
187+
assertThat(limits.get("ephemeral-storage")).isEqualTo(new Quantity("2Gi"));
188+
}
189+
190+
@Test
191+
public void requestHugepages1Gi_deploymentProperty_usesDeploymentProperty() {
192+
kubernetesDeployerProperties.getRequests().setHugepages1Gi("4");
193+
deploymentProperties.put("spring.cloud.deployer.kubernetes.requests.hugepages-1Gi", "4");
194+
Map<String, Quantity> requests = this.deploymentPropertiesResolver.deduceResourceRequests(deploymentRequest.getDeploymentProperties());
195+
assertThat(requests.get("hugepages-1Gi")).isEqualTo(new Quantity("4"));
196+
}
197+
198+
@Test
199+
public void limitHugepages1Gi_deploymentProperty_usesDeploymentProperty() {
200+
kubernetesDeployerProperties.getLimits().setHugepages1Gi("4");
201+
deploymentProperties.put("spring.cloud.deployer.kubernetes.limits.hugepages-1Gi", "4");
202+
Map<String, Quantity> limits = this.deploymentPropertiesResolver.deduceResourceLimits(deploymentRequest.getDeploymentProperties());
203+
assertThat(limits.get("hugepages-1Gi")).isEqualTo(new Quantity("4"));
204+
}
205+
206+
@Test
207+
public void requestHugepages2Mi_deploymentProperty_usesDeploymentProperty() {
208+
kubernetesDeployerProperties.getRequests().setHugepages2Mi("40");
209+
deploymentProperties.put("spring.cloud.deployer.kubernetes.requests.hugepages-2Mi", "40");
210+
Map<String, Quantity> requests = this.deploymentPropertiesResolver.deduceResourceRequests(deploymentRequest.getDeploymentProperties());
211+
assertThat(requests.get("hugepages-2Mi")).isEqualTo(new Quantity("40"));
212+
}
213+
214+
@Test
215+
public void limitHugepages2Mi_deploymentProperty_usesDeploymentProperty() {
216+
kubernetesDeployerProperties.getLimits().setHugepages2Mi("40");
217+
deploymentProperties.put("spring.cloud.deployer.kubernetes.limits.hugepages-2Mi", "40");
218+
Map<String, Quantity> limits = this.deploymentPropertiesResolver.deduceResourceLimits(deploymentRequest.getDeploymentProperties());
219+
assertThat(limits.get("hugepages-2Mi")).isEqualTo(new Quantity("40"));
220+
}
173221
}

0 commit comments

Comments
 (0)