配置ClusterExtensionProfile或ExtensionProfile
对于将工作负载调度到CCI 2.0的场景,用户可以通过配置ClusterExtensionProfile或ExtensionProfile对象来调度到CCI 2.0的Pod,灵活使用Cluster级别的ClusterExtensionProfile,Namespaced级别的ExtensionProfile对调度到CCI 2.0的pod进行配置,从而减少对业务YAML的修改。
配置ClusterExtensionProfile
- 生成YAML文件。
YAML示例:
apiVersion: bursting.cci.io/v1 kind: ClusterExtensionProfile metadata: name: test-cluster-profile spec: actions: annotations: annotation1: value1 hostPathReplacement: - emptyDir: sizeLimit: 10Gi name: volume1 policyType: replaceByEmptyDir labels: label1: value1 namespaceLabels: matchLabels: key2: value2 policy: override
- 使用以下命令创建配置。
kubectl apply -f <test-cluster-profile> #所创建的YAML文件名,替换为实际值
- (可选)使用以下命令查询是否配置成功。
kubectl get cextp
配置ExtensionProfile
- 生成YAML文件。
YAML示例:
apiVersion: bursting.cci.io/v1 kind: ExtensionProfile metadata: name: test-profile spec: actions: annotations: annotation1: value1 hostPathReplacement: - emptyDir: sizeLimit: 10Gi name: volume1 policyType: replaceByEmptyDir labels: label1: value1 namespaceLabels: matchLabels: key2: value2 policy: override
- 使用以下命令创建配置。
kubectl apply -f <test-profile> #所创建的YAML文件名,替换为实际值
- (可选)使用以下命令查询是否配置成功。
kubectl get extp
spec配置说明
主要参数 |
参数说明 |
---|---|
policy |
支持配置策略为addOnly或override,如果某项配置与Pod原有定义冲突,配置为addOnly不会覆盖Pod原有定义,配置为override会覆盖Pod原有定义。默认配置为addOnly。 |
namespaceLabels字段 |
用于根据命名空间的Label筛选命名空间。 |
objectLabels字段 |
用于根据Pod的Label筛选Pod。
注意:
matchLabels和matchExpressions的用法和匹配策略可参考K8S文档官方文档。 |
actions参数说明:
主要参数 |
参数说明 |
---|---|
annotations |
用于给Pod追加Annotations。 |
labels |
用于给Pod追加Labels。 |
imageReplacement |
用于给Pod添加镜像地址转换策略。 |
hostPathReplacement |
用于给Pod添加Hostpath卷转换策略。 |
evictions |
用于配置Pod磁盘压力驱逐策略。 |
podSidecars |
用于给Pod添加sidecar。 |
profile生效规则
- 仅会在Pod创建时对新建的Pod生效,不会修改已存在的Pod。
- 一个Pod最多仅会生效一个ClusterExtensionProfile和一个ExtensionProfile,若两种类型的profile都存在匹配上的,会先生效ClusterExtensionProfile,再生效ExtensionProfile。
- 若Pod所在Namespace的Labels能被多个ClusterExtensionProfile匹配,仅会生效一个最精确匹配的profile。
- 若Pod的Labels能被多个ExtensionProfile匹配,仅会生效一个最精确匹配的一个profile。
- 最精确匹配的定义:
- profile的objectLabels或namespaceLabels中所有matchLabels和matchExpression的数量之和大的更精确。
- 数量一样的选择profile name字母序最小的。
支持磁盘压力后Pod驱逐
在未使用镜像快照的场景下,当节点磁盘空间小于100MiB时,会为Pod上报NodeFsDiskPressure的Condition;在使用镜像快照的场景下,当节点临时存储磁盘空间小于100MiB时或容器镜像磁盘空间小于100MiB时,会分别上报NodeFsDiskPressure或ImageFsDiskPressure的Condition。当节点临时存储磁盘空大于100MiB时或容器镜像磁盘空间大于100MiB时,对应的Condition会被移除。
当上述磁盘空间不足的情况发生时,默认情况下,系统不会做任何处理,可能会影响业务运行。基于Kubernetes的驱逐和调度机制,通过对指定的ClusterExtensionProfile或ExtensionProfile配置驱逐策略,实现自动驱逐Pod。
一般情况下,业务通过Deployment的方式部署。如果被驱逐的Pod由Deployment管理,Deployment会自动创建新的Pod。
actions: evictions: - type: "Hard" signal: "DiskPressure"
- 方式一:通过ClusterExtensionProfile配置指定命名空间标签的Pod驱逐策略
apiVersion: bursting.cci.io/v1 kind: ClusterExtensionProfile metadata: name: eviction-cluster-profile spec: actions: evictions: - type: "Hard" signal: "DiskPressure" namespaceLabels: matchLabels: key: value
- 方式二:通过ExtensionProfile配置在特定命名空间下的指定Label标识的Pod驱逐策略
apiVersion: bursting.cci.io/v1 kind: ExtensionProfile metadata: name: eviction-cluster-profile namespace: default spec: actions: evictions: - type: "Hard" signal: "DiskPressure" objectLabels: matchExpressions: - key: key2 operator: In values: - v2 - v3 - key: key3 operator: Exists matchLabels: key1: value1 policy: addOnly