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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 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

相关文章
|
4月前
|
存储 消息中间件 容器
当一个 Pod 中包含多个容器时,容器间共享一些重要的资源和环境,这使得它们能够更有效地协同工作和交互。
当一个 Pod 中包含多个容器时,容器间共享一些重要的资源和环境,这使得它们能够更有效地协同工作和交互。
|
4月前
|
存储 资源调度 运维
【容器化运维的艺术】揭秘镜像仓库与资源调度的完美协同!
【8月更文挑战第25天】随着容器技术的发展,企业日益倾向于采用容器化方式部署应用,以提升部署效率及资源管理灵活性。其中,镜像仓库和资源调度成为核心组件。镜像仓库实现容器镜像的集中存储与管理,确保版本一致性和安全性;资源调度则依据实际需求优化容器运行位置与资源配置,提高资源利用率和应用性能。二者协同作用,显著简化应用部署流程,为企业创造更大价值。
74 3
|
4月前
|
存储 Kubernetes 数据中心
在K8S中,同⼀个Pod内不同容器哪些资源是共用的,哪些资源是隔离的?
在K8S中,同⼀个Pod内不同容器哪些资源是共用的,哪些资源是隔离的?
|
4月前
|
缓存 Kubernetes 数据中心
在Docker中,如何控制容器占用系统资源(CPU,内存)的份额?
在Docker中,如何控制容器占用系统资源(CPU,内存)的份额?
|
4月前
|
弹性计算 Kubernetes 开发者
利用容器化服务实现游戏服务器的动态资源配置
【8月更文第12天】在游戏行业中,用户基数的变化往往呈现出明显的波动性,特别是在推广活动期间,用户基数会显著增加,而在非推广期则会有所下降。为了应对这种变化,游戏开发者需要一种能够根据用户基数动态调整服务器资源的解决方案,以确保用户体验的同时最大限度地节省成本。容器化服务因其灵活的资源管理和成本控制能力,成为了理想的解决方案。
66 2
|
5月前
|
Linux Docker 容器
容器资源限制
容器资源限制
40 2
|
4月前
|
存储 缓存 监控
在Linux中,如何优化虚拟机和容器的性能和资源使用?
在Linux中,如何优化虚拟机和容器的性能和资源使用?
|
6月前
|
C++ 容器
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
|
7月前
|
存储 安全 数据中心
【Docker 专栏】Docker 容器与宿主机的资源隔离机制
【5月更文挑战第8天】Docker容器利用Namespace和Cgroups实现资源隔离,保证CPU、内存、网络和存储的独立,提升资源利用率和系统安全性。资源隔离有助于简化应用部署与管理,但也带来资源竞争、监控管理及安全挑战。理解并善用资源隔离机制能实现更高效、安全的容器运行。随着技术进步,Docker容器资源隔离将持续优化。
565 2
【Docker 专栏】Docker 容器与宿主机的资源隔离机制
|
5月前
|
存储 语音技术 Python
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)