Cluster Resource Override Operator 是一个准入 Webhook,可让您控制过量使用的程度,并在集群中的所有节点上管理容器密度。Operator 控制特定项目中节点可以如何超过定义的内存和 CPU 限值。
Operator 修改开发人员容器上设置的请求和限值之间的比率。与指定限制和默认值的每个项目限制范围结合使用,您可以达到所需的过量使用程度。
您必须使用 OpenShift Container Platform 控制台或 CLI 安装 Cluster Resource override Operator,如下所示。部署 Cluster Resource Override Operator 后,Operator 会修改特定命名空间中的所有新 pod。在部署 Operator 前,Operator 不会编辑存在的 pod。
在安装过程中,您会创建一个 ClusterResourceOverride
自定义资源 (CR),其中设置过量使用级别,如下例所示:
apiVersion: operator.autoscaling.openshift.io/v1
kind: ClusterResourceOverride
metadata:
name: cluster
spec:
podResourceOverride:
spec:
memoryRequestToLimitPercent: 50
cpuRequestToLimitPercent: 25
limitCPUToMemoryPercent: 200
# ...
apiVersion: operator.autoscaling.openshift.io/v1
kind: ClusterResourceOverride
metadata:
name: cluster
1
spec:
podResourceOverride:
spec:
memoryRequestToLimitPercent: 50
2
cpuRequestToLimitPercent: 25
3
limitCPUToMemoryPercent: 200
4
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
- 1
名称必须是 cluster
。
- 2
可选。如果指定或默认指定了容器内存限值,则该内存请求会覆盖到限值的这个百分比,从 1 到 100 之间。默认值为 50.
- 3
可选。如果指定或默认指定了容器 CPU 限值,则将 CPU 请求覆盖到限值的这个百分比,从 1 到 100 之间。默认值为 25。
- 4
可选。如果指定或默认指定了容器内存限值,则 CPU 限值将覆盖的内存限值的百分比(如果指定)。以 100% 扩展 1Gi RAM, 等于 1 个 CPU 内核。这会在覆盖 CPU 请求前进行(如果配置了)。默认值为 200。
如果容器上没有设置限值,则 Cluster Resourceoverride Operator 覆盖无效。创建一个针对单独项目的带有默认限制的 LimitRange
对象,或在 Pod
specs 中配置要应用的覆盖的限制。
配置后,您可以通过将以下标签应用到要应用覆盖的每个项目的 Namespace
对象来在每个项目上启用覆盖。例如,您可以配置覆盖,以便基础架构组件不会受到覆盖的影响。
apiVersion: v1
kind: Namespace
metadata:
# ...
labels:
clusterresourceoverrides.admission.autoscaling.openshift.io/enabled: "true"
# ...
apiVersion: v1
kind: Namespace
metadata:
labels:
clusterresourceoverrides.admission.autoscaling.openshift.io/enabled: "true"
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Operator 监视 ClusterResourceOverride
CR, 并确保 ClusterResourceOverride
准入 Webhook 被安装到与 Operator 相同的命名空间。
例如,pod 有以下资源限值:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
namespace: my-namespace
# ...
spec:
containers:
- name: hello-openshift
image: openshift/hello-openshift
resources:
limits:
memory: "512Mi"
cpu: "2000m"
# ...
apiVersion: v1
kind: Pod
metadata:
name: my-pod
namespace: my-namespace
spec:
containers:
- name: hello-openshift
image: openshift/hello-openshift
resources:
limits:
memory: "512Mi"
cpu: "2000m"
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Cluster Resource Override Operator 截获原始 pod 请求,然后根据 ClusterResourceOverride
对象中设置的配置覆盖资源。
apiVersion: v1
kind: Pod
metadata:
name: my-pod
namespace: my-namespace
# ...
spec:
containers:
- image: openshift/hello-openshift
name: hello-openshift
resources:
limits:
cpu: "1"
memory: 512Mi
requests:
cpu: 250m
memory: 256Mi
# ...
apiVersion: v1
kind: Pod
metadata:
name: my-pod
namespace: my-namespace
spec:
containers:
- image: openshift/hello-openshift
name: hello-openshift
resources:
limits:
cpu: "1"
1
memory: 512Mi
requests:
cpu: 250m
2
memory: 256Mi
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
- 1
CPU 限制已被覆盖到 1
,因为在 ClusterResourceOverride
对象中将 limitCPUToMemoryPercent
参数设置为 200
。因此,CPU 术语的 200% 的内存限值为 512Mi,1 个 CPU 内核。
- 2
CPU 请求现在为 250m
,因为 ClusterResourceOverride
对象中的 cpuRequestToLimit
设置为 25
。因此,1 个 CPU 内核的 25% 为 250m。
您可以使用 OpenShift Container Platform Web 控制台来安装 Cluster Resource Override Operator,以帮助控制集群中的过量使用。
先决条件
-
如果容器上未设置限值,Cluster Resourceoverride Operator 将没有作用。您必须使用一个
LimitRange
对象为项目指定默认限值,或在 Pod
spec 中配置要应用的覆盖的限制。
在 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: cluster
spec:
podResourceOverride:
spec:
memoryRequestToLimitPercent: 50
cpuRequestToLimitPercent: 25
limitCPUToMemoryPercent: 200
# ...
apiVersion: operator.autoscaling.openshift.io/v1
kind: ClusterResourceOverride
metadata:
name: cluster
1
spec:
podResourceOverride:
spec:
memoryRequestToLimitPercent: 50
2
cpuRequestToLimitPercent: 25
3
limitCPUToMemoryPercent: 200
4
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
- 1
名称必须是 cluster
。
- 2
可选。指定在 1-100 之间覆盖容器内存限值的百分比(如果使用的话)。默认值为 50.
- 3
可选。指定在 1-100 之间覆盖容器 CPU 限值的百分比(如果使用的话)。默认值为 25。
- 4
可选。如果使用,请指定覆盖容器内存限值的百分比。以 100% 扩展 1Gi RAM, 等于 1 个 CPU 内核。这会在覆盖 CPU 请求前进行处理(如果已配置)。默认值为 200。
-
点击 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:
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
name: clusterresourceoverrides.admission.autoscaling.openshift.io
resourceVersion: "127621"
uid: 98b3b8ae-d5ce-462b-8ab5-a729ea8f38f3
# ...
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
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
- 1
引用 ClusterResourceOverride
准入Webhook。
您可以使用 OpenShift Container Platform CLI 来安装 Cluster Resource Override Operator,以帮助控制集群中的过量使用。
先决条件
-
如果容器上未设置限值,Cluster Resourceoverride Operator 将没有作用。您必须使用一个
LimitRange
对象为项目指定默认限值,或在 Pod
spec 中配置要应用的覆盖的限制。
为 Cluster Resource Override Operator 创建命名空间:
为 Cluster Resource Override Operator 创建一个 Namespace
空间对象 YAML 文件(如 cro-namespace.yaml
):
apiVersion: v1
kind: Namespace
metadata:
name: clusterresourceoverride-operator
apiVersion: v1
kind: Namespace
metadata:
name: clusterresourceoverride-operator
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
创建命名空间:
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yaml
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
例如:
oc create -f cro-namespace.yaml
$ oc create -f cro-namespace.yaml
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
创建一个 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
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
name: clusterresourceoverride-operator
namespace: clusterresourceoverride-operator
spec:
targetNamespaces:
- clusterresourceoverride-operator
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
创建 Operator 组:
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yaml
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
例如:
oc create -f cro-og.yaml
$ oc create -f cro-og.yaml
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
创建一个订阅:
为 Cluster Resourceoverride Operator 创建一个 Subscription
对象 YAML 文件(如 cro-sub.yaml):
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: clusterresourceoverride
namespace: clusterresourceoverride-operator
spec:
channel: "stable"
name: clusterresourceoverride
source: redhat-operators
sourceNamespace: openshift-marketplace
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: clusterresourceoverride
namespace: clusterresourceoverride-operator
spec:
channel: "stable"
name: clusterresourceoverride
source: redhat-operators
sourceNamespace: openshift-marketplace
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
创建订阅:
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yaml
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
例如:
oc create -f cro-sub.yaml
$ oc create -f cro-sub.yaml
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
在 clusterresourceoverride-operator
命名空间中创建 ClusterResourceOverride
自定义资源(CR)对象:
进入 clusterresourceoverride-operator
命名空间。
oc project clusterresourceoverride-operator
$ oc project clusterresourceoverride-operator
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
为 Cluster Resourceoverride Operator 创建 ClusterResourceOverride
对象 YAML 文件(如 cro-cr.yaml):
apiVersion: operator.autoscaling.openshift.io/v1
kind: ClusterResourceOverride
metadata:
name: cluster
spec:
podResourceOverride:
spec:
memoryRequestToLimitPercent: 50
cpuRequestToLimitPercent: 25
limitCPUToMemoryPercent: 200
apiVersion: operator.autoscaling.openshift.io/v1
kind: ClusterResourceOverride
metadata:
name: cluster
1
spec:
podResourceOverride:
spec:
memoryRequestToLimitPercent: 50
2
cpuRequestToLimitPercent: 25
3
limitCPUToMemoryPercent: 200
4
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
- 1
名称必须是 cluster
。
- 2
可选。指定在 1-100 之间覆盖容器内存限值的百分比(如果使用的话)。默认值为 50.
- 3
可选。指定在 1-100 之间覆盖容器 CPU 限值的百分比(如果使用的话)。默认值为 25。
- 4
可选。如果使用,请指定覆盖容器内存限值的百分比。以 100% 扩展 1Gi RAM, 等于 1 个 CPU 内核。这会在覆盖 CPU 请求前进行处理(如果已配置)。默认值为 200。
创建 ClusterResourceOverride
对象:
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yaml
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
例如:
oc create -f cro-cr.yaml
$ oc create -f cro-cr.yaml
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
通过检查集群自定义资源的状态来验证准入 Webhook 的当前状态。
oc get clusterresourceoverride cluster -n clusterresourceoverride-operator -o yaml
$ oc get clusterresourceoverride cluster -n clusterresourceoverride-operator -o yaml
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
当 webhook 被调用时,mutatingWebhookConfigurationRef
项会出现。
- 1
引用 ClusterResourceOverride
准入Webhook。
Cluster Resource Override Operator 需要一个 ClusterResourceOverride
自定义资源 (CR),以及您希望 Operator 来控制过量使用的每个项目的标识。
先决条件
-
如果容器上未设置限值,Cluster Resourceoverride Operator 将没有作用。您必须使用一个
LimitRange
对象为项目指定默认限值,或在 Pod
spec 中配置要应用的覆盖的限制。
编辑 ClusterResourceOverride
CR:
apiVersion: operator.autoscaling.openshift.io/v1
kind: ClusterResourceOverride
metadata:
name: cluster
spec:
podResourceOverride:
spec:
memoryRequestToLimitPercent: 50
cpuRequestToLimitPercent: 25
limitCPUToMemoryPercent: 200
# ...
apiVersion: operator.autoscaling.openshift.io/v1
kind: ClusterResourceOverride
metadata:
name: cluster
spec:
podResourceOverride:
spec:
memoryRequestToLimitPercent: 50
1
cpuRequestToLimitPercent: 25
2
limitCPUToMemoryPercent: 200
3
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
- 1
可选。指定在 1-100 之间覆盖容器内存限值的百分比(如果使用的话)。默认值为 50.
- 2
可选。指定在 1-100 之间覆盖容器 CPU 限值的百分比(如果使用的话)。默认值为 25。
- 3
可选。如果使用,请指定覆盖容器内存限值的百分比。以 100% 扩展 1Gi RAM, 等于 1 个 CPU 内核。这会在覆盖 CPU 请求前进行处理(如果已配置)。默认值为 200。
确保在每个您希望 Cluster Resourceoverride Operator 来控制过量使用的项目中都添加了以下标识:
apiVersion: v1
kind: Namespace
metadata:
# ...
labels:
clusterresourceoverrides.admission.autoscaling.openshift.io/enabled: "true"
# ...
apiVersion: v1
kind: Namespace
metadata:
labels:
clusterresourceoverrides.admission.autoscaling.openshift.io/enabled: "true"
1
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow