Skip to content

Commit 7deb98c

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 7deb98c

File tree

3 files changed

+185
-6
lines changed

3 files changed

+185
-6
lines changed

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

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,21 @@ 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+
if(!StringUtils.hasText(ephemeralStorage)) {
178+
ephemeralStorage = properties.getLimits().getEphemeralStorage();
179+
}
180+
181+
String hugePages2Mi = PropertyParserUtils.getDeploymentPropertyValue(kubernetesDeployerProperties, this.propertyPrefix + ".limits.hugepages-2Mi");
182+
if(!StringUtils.hasText(hugePages2Mi)) {
183+
hugePages2Mi = properties.getLimits().getHugepages2Mi();
184+
}
185+
186+
String hugePages1Gi = PropertyParserUtils.getDeploymentPropertyValue(kubernetesDeployerProperties, this.propertyPrefix + ".limits.hugepages-1Gi");
187+
if(!StringUtils.hasText(hugePages1Gi)) {
188+
hugePages1Gi = properties.getLimits().getHugepages1Gi();
189+
}
190+
176191
String gpuVendor = PropertyParserUtils.getDeploymentPropertyValue(kubernetesDeployerProperties,
177192
this.propertyPrefix + ".limits.gpuVendor");
178193

@@ -196,11 +211,22 @@ Map<String, Quantity> deduceResourceLimits(Map<String, String> kubernetesDeploye
196211
if (StringUtils.hasText(cpu)) {
197212
limits.put("cpu", new Quantity(cpu));
198213
}
214+
if(StringUtils.hasText(ephemeralStorage)) {
215+
limits.put("ephemeral-storage", new Quantity(ephemeralStorage));
216+
}
217+
if(StringUtils.hasText(hugePages2Mi)) {
218+
limits.put("hugepages-2Mi", new Quantity(hugePages2Mi));
219+
}
220+
if(StringUtils.hasText(hugePages1Gi)) {
221+
limits.put("hugepages-1Gi", new Quantity(hugePages1Gi));
222+
}
199223

200224
if (StringUtils.hasText(gpuVendor) && StringUtils.hasText(gpuCount)) {
201225
limits.put(gpuVendor + "/gpu", new Quantity(gpuCount));
202226
}
203-
227+
if(logger.isDebugEnabled()) {
228+
logger.debug("limits:" + limits);
229+
}
204230
return limits;
205231
}
206232

@@ -254,8 +280,23 @@ Map<String, Quantity> deduceResourceRequests(Map<String, String> kubernetesDeplo
254280
if (cpuOverride == null) {
255281
cpuOverride = properties.getRequests().getCpu();
256282
}
283+
String ephemeralStorage = PropertyParserUtils.getDeploymentPropertyValue(kubernetesDeployerProperties, this.propertyPrefix + ".requests.ephemeral-storage");
284+
if(!StringUtils.hasText(ephemeralStorage)) {
285+
ephemeralStorage = properties.getLimits().getEphemeralStorage();
286+
}
257287

258-
logger.debug("Using requests - cpu: " + cpuOverride + " mem: " + memOverride);
288+
String hugePages2Mi = PropertyParserUtils.getDeploymentPropertyValue(kubernetesDeployerProperties, this.propertyPrefix + ".requests.hugepages-2Mi");
289+
if(!StringUtils.hasText(hugePages2Mi)) {
290+
hugePages2Mi = properties.getLimits().getHugepages2Mi();
291+
}
292+
293+
String hugePages1Gi = PropertyParserUtils.getDeploymentPropertyValue(kubernetesDeployerProperties, this.propertyPrefix + ".requests.hugepages-1Gi");
294+
if(!StringUtils.hasText(hugePages1Gi)) {
295+
hugePages1Gi = properties.getLimits().getHugepages1Gi();
296+
}
297+
if(logger.isDebugEnabled()) {
298+
logger.debug("Using requests - cpu: " + cpuOverride + " mem: " + memOverride + " ephemeral-storage:" + ephemeralStorage + " hugepages-2Mi:" + hugePages2Mi + " hugepages-1Gi:" + hugePages1Gi);
299+
}
259300

260301
Map<String,Quantity> requests = new HashMap<String, Quantity>();
261302

@@ -267,6 +308,18 @@ Map<String, Quantity> deduceResourceRequests(Map<String, String> kubernetesDeplo
267308
requests.put("cpu", new Quantity(cpuOverride));
268309
}
269310

311+
if(StringUtils.hasText(ephemeralStorage)) {
312+
requests.put("ephemeral-storage", new Quantity(ephemeralStorage));
313+
}
314+
if(StringUtils.hasText(hugePages2Mi)) {
315+
requests.put("hugepages-2Mi", new Quantity(hugePages2Mi));
316+
}
317+
if(StringUtils.hasText(hugePages1Gi)) {
318+
requests.put("hugepages-1Gi", new Quantity(hugePages1Gi));
319+
}
320+
if(logger.isDebugEnabled()) {
321+
logger.debug("requests:" + requests);
322+
}
270323
return requests;
271324
}
272325

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

0 commit comments

Comments
 (0)