3.4 [kustz] 用字符串定义容器申请资源上下限

简介: 3.4 [kustz] 用字符串定义容器申请资源上下限

3.4 [kustz] 用字符串定义容器申请资源上下限

大家好, 我是老麦, 一个运维小学生。
今天我们来给 kustz 添加资源申请字段。

image.png

Pod 的资源申请, 在调度策略中, 是一个重要的参数数据。 因此其重要性自然不必多说

image.png

容器资源申请

在官网中, 对于资源的申请和管理有详细的描述。
https://kubernetes.io/zh-cn/docs/concepts/configuration/manage-resources-containers/

服务质量 QoS 息息相关, https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/quality-service-pod/

这里简单的归类, 可以速记, 按照服务质量高到低

  1. Guaranteed: request = limit
  2. Burstable: request < limit
  3. BestEffort: 没有 request 和 limit

kustz.yml 配置

还是先来看看 kustz.yml 配置中, 资源的抽象 name: request/limit

# kustz.yml
service:
  resources:
    cpu: 10m/20m
    memory: 10Mi/20Mi
  #   nvidia.com/gpu: 1/1

对应的, 在 /pkg/kustz/kustz.go 中, 增加字段, 如下。

type Service struct {
    Resources map[string]string `json:"resources,omitempty"`
}

编码

这部分的编码还是还是很简单的。 因为在 k8s.io/apimachinery/pkg/api/resource 库中, 已经为我们提供了 数据及单位 的解析封装, 直接调用即可。

所以大部分编码工作还是在字符串的解析上面。

第一步, 在 /pkg/kustz/k_container.go 中, 为容器添加资源字段

func (kz *Config) kubeContainerResources() corev1.ResourceRequirements {
    return tokube.ContainerResources(kz.Service.Resources)
}

第二步, 在 /pkg/tokube/container.go 中, 解析 map[string]string 对象, 获取资源名和值, 并返回 corev1.Resources

func ContainerResources(res map[string]string) corev1.ResourceRequirements {
// ...省略
}

第三步, 在 /pkg/tokube/container.go 中分割我们定义的字符串。

func toResourceQuantity(value string) (request resource.Quantity, limit resource.Quantity) {

    re, li := "", ""
    parts := strings.Split(value, "/")
// ... 省略
    request = resource.MustParse(re)
    limit = resource.MustParse(li)

    return
}

可以看到, 这里使用了官方的函数 resource.MustParse(value) , 直接返回结论, 省了很多事情。

测试

执行命令, 查看结果。

$ make test.deployment

除了默认的 cpu, memory 之外, 我们还添加了 nvidia/gpu 这种 CRD 资源。

GPU 结论可以参考, https://help.aliyun.com/document_detail/94800.html

相关文章
|
存储 消息中间件 容器
当一个 Pod 中包含多个容器时,容器间共享一些重要的资源和环境,这使得它们能够更有效地协同工作和交互。
当一个 Pod 中包含多个容器时,容器间共享一些重要的资源和环境,这使得它们能够更有效地协同工作和交互。
|
存储 人工智能 Python
[oeasy]python061_如何接收输入_input函数_字符串_str_容器_ 输入输出
本文介绍了Python中如何使用`input()`函数接收用户输入。`input()`函数可以从标准输入流获取字符串,并将其赋值给变量。通过键盘输入的值可以实时赋予变量,实现动态输入。为了更好地理解其用法,文中通过实例演示了如何接收用户输入并存储在变量中,还介绍了`input()`函数的参数`prompt`,用于提供输入提示信息。最后总结了`input()`函数的核心功能及其应用场景。更多内容可参考蓝桥、GitHub和Gitee上的相关教程。
346 0
|
存储 资源调度 运维
【容器化运维的艺术】揭秘镜像仓库与资源调度的完美协同!
【8月更文挑战第25天】随着容器技术的发展,企业日益倾向于采用容器化方式部署应用,以提升部署效率及资源管理灵活性。其中,镜像仓库和资源调度成为核心组件。镜像仓库实现容器镜像的集中存储与管理,确保版本一致性和安全性;资源调度则依据实际需求优化容器运行位置与资源配置,提高资源利用率和应用性能。二者协同作用,显著简化应用部署流程,为企业创造更大价值。
241 3
|
存储 Kubernetes 数据中心
在K8S中,同⼀个Pod内不同容器哪些资源是共用的,哪些资源是隔离的?
在K8S中,同⼀个Pod内不同容器哪些资源是共用的,哪些资源是隔离的?
|
缓存 Kubernetes 数据中心
在Docker中,如何控制容器占用系统资源(CPU,内存)的份额?
在Docker中,如何控制容器占用系统资源(CPU,内存)的份额?
|
弹性计算 Kubernetes 开发者
利用容器化服务实现游戏服务器的动态资源配置
【8月更文第12天】在游戏行业中,用户基数的变化往往呈现出明显的波动性,特别是在推广活动期间,用户基数会显著增加,而在非推广期则会有所下降。为了应对这种变化,游戏开发者需要一种能够根据用户基数动态调整服务器资源的解决方案,以确保用户体验的同时最大限度地节省成本。容器化服务因其灵活的资源管理和成本控制能力,成为了理想的解决方案。
371 2
|
Linux Docker 容器
容器资源限制
容器资源限制
197 2
|
存储 安全 数据中心
【Docker 专栏】Docker 容器与宿主机的资源隔离机制
【5月更文挑战第8天】Docker容器利用Namespace和Cgroups实现资源隔离,保证CPU、内存、网络和存储的独立,提升资源利用率和系统安全性。资源隔离有助于简化应用部署与管理,但也带来资源竞争、监控管理及安全挑战。理解并善用资源隔离机制能实现更高效、安全的容器运行。随着技术进步,Docker容器资源隔离将持续优化。
1352 2
【Docker 专栏】Docker 容器与宿主机的资源隔离机制
|
C++ 容器
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
351 1
|
存储 缓存 监控
在Linux中,如何优化虚拟机和容器的性能和资源使用?
在Linux中,如何优化虚拟机和容器的性能和资源使用?