fabric8 kubernetes Java & Scala客户端API非常适合与kubernetes(或OpenShift)交谈,但其文档非常稀疏。什么是用于将资源需求添加到在kubernetes窗格中运行的容器的代码示例?如何使用fabric8 kubernetes设置资源需求Java和Scala客户端API
2
A
回答
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
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 /内存值。
相关问题
- 1. Fabric8:用于openshift和kubernetes的OSGI捆绑包java客户端
- 2. 如何使用fabric8 java客户端获取kubernetes服务帐户访问令牌?
- 3. 在fabric8 Kubernetes客户端事件()API中,Watcher.Action指示什么?
- 4. 在fabric8 Kubernetes客户端事件()API中的监视器中,我可以观看哪些资源?
- 5. 使用Java客户端API
- 6. 使用fabric8的KubernetesClient,我如何构建一个特定Kubernetes资源的URL?
- 7. 如何使用Go客户端API在kubernetes中创建和使用卷?
- 8. 刷新客户端资源
- 9. 的Django如何设置要求用户在客户端测试
- 10. OpenCL客户端需求
- 11. 如何从java客户端获得受保护的Web资源
- 12. 如何以编程方式获取配置资源与oim 11g客户端api
- 13. 通过java客户端API使用marklogic?
- 14. 与MarkLogic Java客户端API
- 15. Socket.io Scala客户端
- 16. Kubernetes掌舵Java API
- 17. Silverlight客户端性能和资源使用
- 18. Java客户端消费API
- 19. 如何使用Google API客户端库?
- 20. 需要Java websocket客户端
- 21. 使用谷歌API客户端无需客户经理
- 22. 不同客户端的资源文件
- 23. 的Java Jersey客户端API
- 24. boto3从客户端获取资源
- 25. 在Java中设置https客户端
- 26. 如何使用NetBeans Java CVS客户端?
- 27. 如何使用Java配置hadoop-core配置客户端
- 28. 如何同步客户端用户的收件箱和日历资源
- 29. 如何使用kubernetes python客户端来排除节点?
- 30. 使用Python Kubernetes客户端,如何复制'kubectl create -f`?
这很有用:)我通常发现,遵循[规范](http://kubernetes.io/docs/user-guide/pods/multi-container/#the-spec-schema)以及YAML数据类型(list/map/...)在使用fabric8流利的构建器时很有指导意义。 –