2016-11-18 119 views

回答

4

如果您正在为Java和Scala使用fabric8 kubernetes-client API,这里有一段代码演示了如何将资源需求添加到在pod中运行的容器。此代码从斯卡拉被复制,但Java代码将是非常相似:

// other fabric8 imports not included; just focusing on resource 
// requirements logic in this example 
import io.fabric8.kubernetes.api.model.Quantity 
import io.fabric8.kubernetes.api.model.ResourceRequirementsBuilder 

// Use Java style Map (as opposed to Scala's Map class) 
val reqMap: java.util.Map[String, Quantity] = 
    new java.util.HashMap[String, Quantity]() 

// add CPU and memory requirements to the map 
reqMap.put("cpu", new Quantity("1")) 
reqMap.put("memory", new Quantity("1500Mi")) 

// Build a ResourceRequirements object from the map 
val reqs = new ResourceRequirementsBuilder() 
    .withRequests(reqMap) 
    .build() 

// pass the ResourceRequirements object to the container spec 
val pod = new PodBuilder() 
    .withNewMetadata() 
    .withName(podName) 
    .endMetadata() 
    .withNewSpec() 
    .withRestartPolicy("OnFailure") 
    .addNewContainer() 
    .withName(containerName) 
    .withImage(containerImage) 
    .withImagePullPolicy("Always") 
    .withResources(reqs)   // <-- resource reqs here 
    .withCommand(commandName) 
    .withArgs(commandArguments) 
    .endContainer() 
    .endSpec() 
    .build() 

// create the new pod with resource requirements via the 
// fabric8 kube client: 
client.pods().inNamespace(nameSpace).withName(podName).create(pod) 
+0

这很有用:)我通常发现,遵循[规范](http://kubernetes.io/docs/user-guide/pods/multi-container/#the-spec-schema)以及YAML数据类型(list/map/...)在使用fabric8流利的构建器时很有指导意义。 –

0
if(EmptyUtil.isNotNull(template.getComputeRequest()) || 
      EmptyUtil.isNotNull(template.getComputeLimit())) { 
     containerBuilder.withResources(buildResources(template.getComputeRequest(), template.getComputeLimit())); 
    } 


private ResourceRequirements buildResources(InstanceType request, InstanceType limit){ 
    _logger.info("Building computeResources"); 
    ResourceRequirementsBuilder requirementsBuilder = new ResourceRequirementsBuilder(isValidationEnabled); 

    if(EmptyUtil.isNotNull(request)){ 
     requirementsBuilder.withRequests(K8ComputeResourceUtil.buildCompute(request)); 
    } 

    if(EmptyUtil.isNotNull(limit)){ 
     requirementsBuilder.withLimits(K8ComputeResourceUtil.buildCompute(limit)); 
    } 

    return requirementsBuilder.build(); 
} 



public static Map<String, Quantity> buildCompute(InstanceType compute){ 

    Map<String, Quantity> computeResourceMap = new HashMap<>(); 

    if(EmptyUtil.isNotNull(compute.getCpu())) { 
     computeResourceMap.putAll(buildCpu(compute.getCpu())); 
    } 

    if(EmptyUtil.isNotNull(compute.getMemory())) { 
     computeResourceMap.putAll(buildMemory(compute.getMemory())); 
    } 

    return computeResourceMap; 
} 

private static Map<String, Quantity> buildCpu(Float cpu){ 
    Map<String, Quantity> cpuMap = new HashMap<>(); 
    try { 
     Quantity cpuQuantity = new Quantity(); 
     if (EmptyUtil.isNotNull(cpu)) { 
      cpuQuantity.setAmount(String.valueOf(cpu)); 
      cpuMap.put(K8Constants.CPU, cpuQuantity); 
     } 
    } catch (NumberFormatException nfe){ 
     _logger.error("Failed to convert cpu '{}'", cpu, nfe); 
    } 

    return cpuMap; 
} 

private static Map<String, Quantity> buildMemory(Integer memory){ 
    Map<String, Quantity> cpuMap = new HashMap<>(); 
    try { 
     Quantity cpu = new Quantity(); 
     if (EmptyUtil.isNotNull(memory)) { 
      cpu.setAmount(String.valueOf(memory)); 
      cpuMap.put(K8Constants.MEMORY, cpu); 
     } 
    } catch (NumberFormatException nfe){ 
     _logger.error("Failed to convert memory '{}'", memory, nfe); 
    } 

    return cpuMap; 
} 

在这里我有一些制造商建立CPU和内存。 这只是为了理解流程。 你可以给整数或字符串的CPU /内存值。

相关问题