7.10. 使用 Cluster Resource Override Operator 的集群级别的过量使用
Cluster Resource Override Operator 是一个准入 Webhook,可让您控制过量使用的程度,并在集群中的所有节点上管理容器密度。Operator 控制特定项目中节点可以如何超过定义的内存和 CPU 限值。
您必须使用 OpenShift Container Platform 控制台或 CLI 安装 Cluster Resource override Operator,如下所示。在安装过程中,您会创建一个 ClusterResourceOverride 自定义资源 (CR),其中设置过量使用级别,如下例所示:
apiVersion: operator.autoscaling.openshift.io/v1
kind: ClusterResourceOverride
metadata:
name: cluster
spec:
podResourceOverride:
spec:
memoryRequestToLimitPercent: 50
cpuRequestToLimitPercent: 25
limitCPUToMemoryPercent: 200
# ...
如果容器上没有设置限值,则 Cluster Resourceoverride Operator 覆盖无效。创建一个针对单独项目的带有默认限制的 LimitRange 对象,或在 Pod specs 中配置要应用的覆盖的限制。
配置后,可通过将以下标签应用到每个项目的命名空间对象来启用每个项目的覆盖:
apiVersion: v1
kind: Namespace
metadata:
# ...
labels:
clusterresourceoverrides.admission.autoscaling.openshift.io/enabled: "true"
# ...
Operator 监视 ClusterResourceOverride CR, 并确保 ClusterResourceOverride 准入 Webhook 被安装到与 Operator 相同的命名空间。
7.10.1. 使用 Web 控制台安装 Cluster Resource Override Operator 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台来安装 Cluster Resource Override Operator,以帮助控制集群中的过量使用。
先决条件
-
如果容器上未设置限值,Cluster Resourceoverride Operator 将没有作用。您必须使用一个
LimitRange对象为项目指定默认限值,或在Podspec 中配置要应用的覆盖的限制。
流程
使用 OpenShift Container Platform web 控制台安装 Cluster Resource Override Operator:
在 OpenShift Container Platform web 控制台中进入 Home
Projects - 点击 Create Project。
-
指定
clusterresourceoverride-operator作为项目的名称。 - 点击 Create。
进入 Operators
OperatorHub。 - 从可用 Operator 列表中选择 ClusterResourceOverride Operator,再点击 Install。
- 在 Install Operator 页面中,确保为 Installation Mode 选择了 A specific Namespace on the cluster。
- 确保为 Installed Namespace 选择了 clusterresourceoverride-operator。
- 指定更新频道和批准策略。
- 点击 Install。
在 Installed Operators 页面中,点 ClusterResourceOverride。
- 在 ClusterResourceOverride Operator 详情页面中,点 Create ClusterResourceOverride。
在 Create ClusterResourceOverride 页面中,点 YAML 视图并编辑 YAML 模板,以根据需要设置过量使用值:
apiVersion: operator.autoscaling.openshift.io/v1 kind: ClusterResourceOverride metadata: name: cluster1 spec: podResourceOverride: spec: memoryRequestToLimitPercent: 502 cpuRequestToLimitPercent: 253 limitCPUToMemoryPercent: 2004 # ...- 点击 Create。
通过检查集群自定义资源的状态来检查准入 Webhook 的当前状态:
- 在 ClusterResourceOverride Operator 页面中,点击 cluster。
在 ClusterResourceOverride Details 页中,点 YAML。当 webhook 被调用时,
mutatingWebhookConfigurationRef项会出现。apiVersion: operator.autoscaling.openshift.io/v1 kind: ClusterResourceOverride metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"operator.autoscaling.openshift.io/v1","kind":"ClusterResourceOverride","metadata":{"annotations":{},"name":"cluster"},"spec":{"podResourceOverride":{"spec":{"cpuRequestToLimitPercent":25,"limitCPUToMemoryPercent":200,"memoryRequestToLimitPercent":50}}}} creationTimestamp: "2019-12-18T22:35:02Z" generation: 1 name: cluster resourceVersion: "127622" selfLink: /apis/operator.autoscaling.openshift.io/v1/clusterresourceoverrides/cluster uid: 978fc959-1717-4bd1-97d0-ae00ee111e8d spec: podResourceOverride: spec: cpuRequestToLimitPercent: 25 limitCPUToMemoryPercent: 200 memoryRequestToLimitPercent: 50 status: # ... mutatingWebhookConfigurationRef:1 apiVersion: admissionregistration.k8s.io/v1 kind: MutatingWebhookConfiguration name: clusterresourceoverrides.admission.autoscaling.openshift.io resourceVersion: "127621" uid: 98b3b8ae-d5ce-462b-8ab5-a729ea8f38f3 # ...- 1
- 引用
ClusterResourceOverride准入Webhook。
7.10.2. 使用 CLI 安装 Cluster Resource Override Operator 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform CLI 来安装 Cluster Resource Override Operator,以帮助控制集群中的过量使用。
先决条件
-
如果容器上未设置限值,Cluster Resourceoverride Operator 将没有作用。您必须使用一个
LimitRange对象为项目指定默认限值,或在Podspec 中配置要应用的覆盖的限制。
流程
使用 CLI 安装 Cluster Resource Override Operator:
为 Cluster Resource Override Operator 创建命名空间:
为 Cluster Resource Override Operator 创建一个
Namespace空间对象 YAML 文件(如cro-namespace.yaml):apiVersion: v1 kind: Namespace metadata: name: clusterresourceoverride-operator创建命名空间:
$ oc create -f <file-name>.yaml例如:
$ oc create -f cro-namespace.yaml
创建一个 Operator 组:
为 Cluster Resource Override Operator 创建一个
OperatorGroup对象 YAML 文件(如 cro-og.yaml):apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: clusterresourceoverride-operator namespace: clusterresourceoverride-operator spec: targetNamespaces: - clusterresourceoverride-operator创建 Operator 组:
$ oc create -f <file-name>.yaml例如:
$ oc create -f cro-og.yaml
创建一个订阅:
为 Cluster Resourceoverride Operator 创建一个
Subscription对象 YAML 文件(如 cro-sub.yaml):apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: clusterresourceoverride namespace: clusterresourceoverride-operator spec: channel: "4.15" name: clusterresourceoverride source: redhat-operators sourceNamespace: openshift-marketplace创建订阅:
$ oc create -f <file-name>.yaml例如:
$ oc create -f cro-sub.yaml
在
clusterresourceoverride-operator命名空间中创建ClusterResourceOverride自定义资源(CR)对象:进入
clusterresourceoverride-operator命名空间。$ oc project clusterresourceoverride-operator为 Cluster Resourceoverride Operator 创建
ClusterResourceOverride对象 YAML 文件(如 cro-cr.yaml):apiVersion: operator.autoscaling.openshift.io/v1 kind: ClusterResourceOverride metadata: name: cluster1 spec: podResourceOverride: spec: memoryRequestToLimitPercent: 502 cpuRequestToLimitPercent: 253 limitCPUToMemoryPercent: 2004 创建
ClusterResourceOverride对象:$ oc create -f <file-name>.yaml例如:
$ oc create -f cro-cr.yaml
通过检查集群自定义资源的状态来验证准入 Webhook 的当前状态。
$ oc get clusterresourceoverride cluster -n clusterresourceoverride-operator -o yaml当 webhook 被调用时,
mutatingWebhookConfigurationRef项会出现。输出示例
apiVersion: operator.autoscaling.openshift.io/v1 kind: ClusterResourceOverride metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"operator.autoscaling.openshift.io/v1","kind":"ClusterResourceOverride","metadata":{"annotations":{},"name":"cluster"},"spec":{"podResourceOverride":{"spec":{"cpuRequestToLimitPercent":25,"limitCPUToMemoryPercent":200,"memoryRequestToLimitPercent":50}}}} creationTimestamp: "2019-12-18T22:35:02Z" generation: 1 name: cluster resourceVersion: "127622" selfLink: /apis/operator.autoscaling.openshift.io/v1/clusterresourceoverrides/cluster uid: 978fc959-1717-4bd1-97d0-ae00ee111e8d spec: podResourceOverride: spec: cpuRequestToLimitPercent: 25 limitCPUToMemoryPercent: 200 memoryRequestToLimitPercent: 50 status: # ... mutatingWebhookConfigurationRef:1 apiVersion: admissionregistration.k8s.io/v1 kind: MutatingWebhookConfiguration name: clusterresourceoverrides.admission.autoscaling.openshift.io resourceVersion: "127621" uid: 98b3b8ae-d5ce-462b-8ab5-a729ea8f38f3 # ...- 1
- 引用
ClusterResourceOverride准入Webhook。
7.10.3. 配置集群级别的过量使用 复制链接链接已复制到粘贴板!
Cluster Resource Override Operator 需要一个 ClusterResourceOverride 自定义资源 (CR),以及您希望 Operator 来控制过量使用的每个项目的标识。
先决条件
-
如果容器上未设置限值,Cluster Resourceoverride Operator 将没有作用。您必须使用一个
LimitRange对象为项目指定默认限值,或在Podspec 中配置要应用的覆盖的限制。
流程
修改集群级别的过量使用:
编辑
ClusterResourceOverrideCR:apiVersion: operator.autoscaling.openshift.io/v1 kind: ClusterResourceOverride metadata: name: cluster spec: podResourceOverride: spec: memoryRequestToLimitPercent: 501 cpuRequestToLimitPercent: 252 limitCPUToMemoryPercent: 2003 # ...确保在每个您希望 Cluster Resourceoverride Operator 来控制过量使用的项目中都添加了以下标识:
apiVersion: v1 kind: Namespace metadata: # ... labels: clusterresourceoverrides.admission.autoscaling.openshift.io/enabled: "true"1 # ...- 1
- 把这个标识添加到每个项目。