接入到ASM中的ACK Pro版集群在启用动态资源超卖模式下,注入到应用Deployment中的Sidecar代理支持超卖模式的资源类型,以提升集群资源利用率。本文介绍如何在Sidecar中配置ACK动态超卖资源。
前提条件
- 已创建ACK Pro版集群。具体操作,请参见创建ACK Pro版集群。说明 本功能仅支持ACK Pro版集群。
- ACK Pro版集群已支持动态资源超卖功能。具体操作,请参见动态资源超卖。
- 已添加ACK Pro版集群到ASM实例,且ASM实例版本为1.16及以上。具体操作,请参见添加集群到ASM实例。
动态资源超卖功能介绍
在Kubernetes系统中,Kubelet通过参考Pod的QoS等级来管理单机容器的资源质量,例如OOM(Out of Memory)优先级控制等。Pod的QoS级别分为Guaranteed、Burstable和BestEffort。QoS级别取决于Pod配置的Request和Limit(CPU、内存)。
ack-koordinator提供动态资源超卖功能,通过对节点负载数据的实时收集,可以充分挖掘集群中已分配但未使用的资源量,以实现对集群资源的动态超卖。为体现与原生资源类型的差异性,ack-koordinator使用Batch优先级的概念描述该部分超卖资源,对应的字段为batch-cpu和batch-memory。更多信息,请参见动态资源超卖。
操作步骤
- 部署ConfigMap ack-slo-config。
- 使用以下内容,创建configmap.yaml。通过修改ConfigMap中的配置项,可以实现对资源的灵活管理。关于配置项的说明,请参见动态资源超卖。
apiVersion: v1 kind: ConfigMap metadata: name: ack-slo-config namespace: kube-system data: colocation-config: | { "enable": true, "metricAggregateDurationSeconds": 60, "cpuReclaimThresholdPercent": 60, "memoryReclaimThresholdPercent": 70, "memoryCalculatePolicy": "usage" }
- 在命名空间kube-system下,查看是否存在ConfigMap ack-slo-config。
- 若存在ConfigMap ack-slo-config,请使用PATCH方式进行更新,避免干扰ConfigMap中其他配置项。
kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)"
- 若不存在ConfigMap ack-slo-config,请执行以下命令,创建ConfigMap。
kubectl apply -f configmap.yaml
- 若存在ConfigMap ack-slo-config,请使用PATCH方式进行更新,避免干扰ConfigMap中其他配置项。
- 使用以下内容,创建configmap.yaml。
- 执行以下命令,查看当前Batch资源总量。
# 请将$nodeName替换为要查询的目标节点名称。 kubectl get node $nodeName -o yaml
预期输出:#Node status: allocatable: # 单位为千分之一核,以下表示50核。 kubernetes.io/batch-cpu: 50000 # 单位为字节,以下表示50 GB。 kubernetes.io/batch-memory: 53687091200
- 为Sidecar设定ACK动态超卖资源。您可以设置注入的Istio代理以及isito-init初始化容器的ACK动态超卖资源。更多信息,请参见配置Sidecar代理。
- 登录ASM控制台,在左侧导航栏,选择 。
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
- 在Sidecar代理配置页面的全局页签,单击资源设置,选中为Sidecar设定ACK动态超卖资源,配置相关信息,然后在页面下方,单击更新设置。一般不强制资源限制和所需资源配置为相同值。建议您参照工作负载类型,对资源限制和所需资源进行配置。
- 若QoS为Guaranteed类型的工作负载,建议您两者配置为相同值。
- 若为其他类型的Pod,建议您保持与原生资源类型中所需资源小于资源限制的约定。
本示例配置如下。
配置项 配置子项 说明 注入的Istio代理资源设置(ACK动态超卖资源) 资源限制 配置CPU为2000千分之一核,内存为2048 MiB。 所需资源 配置CPU为200 千分之一核,内存为256 MiB。 istio-init初始化容器资源(ACK动态超卖资源) 资源限制 配置CPU为1000千分之一核,内存为1024 MiB。 所需资源 配置CPU为100 千分之一核,内存为128 MiB。
- 部署应用并申请Batch资源。
- 使用以下内容,创建demo.yaml。以下YAML将创建应用Deployment并申请Batch资源。在Label中指定QoS等级,并在Request和Limit中添加对应的Batch资源配置,即可使Pod使用动态超卖资源。
apiVersion: apps/v1 kind: Deployment metadata: name: sleep spec: replicas: 1 selector: matchLabels: app: sleep template: metadata: labels: app: sleep # 必填,标记为低优先级Pod。 koordinator.sh/qosClass: "BE" spec: terminationGracePeriodSeconds: 0 containers: - name: sleep image: curlimages/curl command: ["/bin/sleep", "infinity"] imagePullPolicy: IfNotPresent resources: requests: # 单位为千分之一核,如下表示1核。 kubernetes.io/batch-cpu: "1k" # 单位为字节,如下表示1 GB。 kubernetes.io/batch-memory: "1Gi" limits: kubernetes.io/batch-cpu: "1k" kubernetes.io/batch-memory: "1Gi"
- 执行以下命令,部署demo作为目标评测应用。
kubectl apply -f demo.yaml
- 使用以下内容,创建demo.yaml。
- 可选:查看BE Pod资源限制是否生效。部署应用并申请Batch资源后,您可以查看Pod资源限制的生效情况。更多信息,请参见动态资源超卖。
- 登录到Pod所在的节点,执行以下命令,查看CPU资源限制参数。
cat /sys/fs/cgroup/cpu,cpuacct/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod****.slice/cri-containerd-****.scope/cpu.cfs_quota_us
预期输出:# 容器对应的CPU Cgroup为1核。 100000
- 登录到Pod所在的节点,执行以下命令,查看Memory资源限制参数。
cat /sys/fs/cgroup/memory/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod****.slice/cri-containerd-****.scope/memory.limit_in_bytes
预期输出:# 容器对应的Memory Cgroup为1 GB。 1073741824
- 登录到Pod所在的节点,执行以下命令,查看CPU资源限制参数。