2016-11-18 13 views

答えて

4

JavaおよびScala用のfabric8 kubernetes-client APIを使用している場合は、ポッドで実行されているコンテナにリソース要件を追加する方法を示すコードスニペットを示します。このコードは、スカラからコピーされましたが、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

これは便利です:)私は通常、[spec](http://kubernetes.io/docs/user-guide/pods/multi-container/#the-spec-schema)とYAMLデータtype(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/memoryの値を指定できます。

関連する問題