5.9. Cluster Resource Override Operator を使用したクラスターレベルのオーバーコミット
Cluster Resource Override Operator を使用すると、オーバーコミットのレベルを制御し、クラスター内のすべてのノードにおけるコンテナー密度を管理できます。Operator (アドミッション Webhook) は、特定のプロジェクト内のノードが定義されたメモリーおよび CPU 制限を超えることを制御します。
Operator は、開発者コンテナーに設定されている要求と制限の比率を変更します。制限とデフォルトを指定するプロジェクトごとの制限範囲と組み合わせることで、必要なレベルのオーバーコミットを実現できます。
次のセクションに示すように、OpenShift Container Platform コンソールまたは CLI を使用して、Cluster Resource Override Operator をインストールする必要があります。Cluster Resource Override Operator をデプロイすると、この Operator が特定の namespace 内のすべての新しい 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
# ...
ここでは、以下のようになります。
metadata.name-
オブジェクトの名前を指定します。名前は
clusterでなければなりません。 spec.podResourceOverride.spec.memoryRequestToLimitPercent- コンテナーのメモリー制限が指定されているか、デフォルトに設定されている場合、メモリー要求は制限のパーセンテージ (1-100) に対して上書きされます。デフォルトは 50 です。
spec.podResourceOverride.spec.cpuRequestToLimitPercent- コンテナーの CPU 制限が指定されているか、デフォルトに設定されている場合、CPU 要求は、1-100 までの制限のパーセンテージに対応して上書きされます。デフォルトは 25 です。
spec.podResourceOverride.spec.limitCPUToMemoryPercent- コンテナーのメモリー制限が指定されているか、デフォルトに設定されている場合、CPU 制限は、指定されている場合にメモリーのパーセンテージに対して上書きされます。1Gi の RAM の 100 パーセントでのスケーリングは、1 CPU コアに等しくなります。これは、CPU 要求を上書きする前に処理されます (設定されている場合)。デフォルトは 200 です。
コンテナーに制限が設定されていない場合、Cluster Resource Override Operator のオーバーライドは効果がありません。個別プロジェクトごとのデフォルト制限を使用して LimitRange オブジェクトを作成するか、Pod 仕様で制限を設定し、上書きが適用されるようにします。
設定したら、オーバーライドを適用する各プロジェクトの Namespace オブジェクトに次のラベルを適用することで、プロジェクトごとにオーバーライドを有効にできます。たとえば、インフラストラクチャーコンポーネントがオーバーライドの対象にならないようにオーバーライドを設定できます。
apiVersion: v1
kind: Namespace
metadata:
# ...
labels:
clusterresourceoverrides.admission.autoscaling.openshift.io/enabled: "true"
# ...
Operator は ClusterResourceOverride CR の有無を監視し、ClusterResourceOverride 受付 Webhook が Operator と同じ namespace にインストールされるようにします。
たとえば、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"
# ...
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
# ...
ここでは、以下のようになります。
spec.containers.resources.limits.cpu-
ClusterResourceOverrideオブジェクトのlimitCPUToMemoryPercentパラメーターが200に設定されているため、CPU 制限が1に上書きされたことを指定します。メモリー制限の 200% は 512 Mi であり、CPU で言えば 1 CPU コアです。 仕様.コンテナー.リソース.メモリー.CPU-
ClusterResourceOverrideオブジェクトでcpuRequestToLimitが25に設定されているため、CPU 要求が250m になったことを指定します。1 CPU コアの 25% は 250m です。
5.9.1. Web コンソールを使用した Cluster Resource Override Operator のインストール リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform の Web コンソールを使用して Cluster Resource Override Operator をインストールすることで、クラスター内のオーバーコミットを制御することができます。
デフォルトでは、インストールプロセスによって、clusterresourceoverride-operator namespace のワーカーノードに Cluster Resource Override Operator Pod が作成されます。必要に応じて、この Pod をインフラストラクチャーノードなどの別のノードに移動できます。インフラストラクチャーノードは、環境の実行に必要なサブスクリプションの合計数にカウントされません。詳細は、「Cluster Resource Override Operator Pod の移動」を参照してください。
前提条件
-
制限がコンテナーに設定されていない場合、Cluster Resource Override Operator は影響を与えません。
LimitRangeオブジェクトを使用してプロジェクトのデフォルト制限を指定するか、Pod仕様で制限を設定して上書きが適用されるようにする必要があります。
手順
OpenShift Container Platform Web コンソールで、Home
Projects に移動します。 - Create Project をクリックします。
-
clusterresourceoverride-operatorをプロジェクトの名前として指定します。 - Create をクリックします。
Ecosystem
Software Catalog に移動します。 - 利用可能な Operator のリストから ClusterResourceOverride Operator を選択し、Install をクリックします。
- Install Operator ページで、A specific Namespace on the cluster が Installation Mode に選択されていることを確認します。
- clusterresourceoverride-operator が Installed Namespace に選択されていることを確認します。
- Update Channel および Approval Strategy を選択します。
- Install をクリックします。
Installed Operators ページで、ClusterResourceOverride をクリックします。
- ClusterResourceOverride Operator 詳細ページで、Create ClusterResourceOverride をクリックします。
Create ClusterResourceOverride ページで、YAML view をクリックして、YAML テンプレートを編集し、必要に応じてオーバーコミット値を設定します。
apiVersion: operator.autoscaling.openshift.io/v1 kind: ClusterResourceOverride metadata: name: cluster spec: podResourceOverride: spec: memoryRequestToLimitPercent: 50 cpuRequestToLimitPercent: 25 limitCPUToMemoryPercent: 200ここでは、以下のようになります。
metadata.name-
CR の名前を指定します。名前は
clusterでなければなりません。 spec.podResourceOverride.spec.memoryRequestToLimitPercent-
コンテナーのメモリー制限を上書きする場合、その上書き率を 1-100% の範囲で指定します。デフォルトは
50です。このパラメーターは任意です。 spec.podResourceOverride.spec.cpuRequestToLimitPercent-
コンテナーの CPU 制限を上書きする場合、その上書き率を 1-100% の範囲で指定します。デフォルトは
25です。このパラメーターは任意です。 spec.podResourceOverride.spec.limitCPUToMemoryPercent-
コンテナーのメモリー制限を上書きする場合、その上書き率を指定します。1 Gi の RAM を 100 パーセントでスケーリングすることは、1 CPU コアに相当します。これは CPU 要求をオーバーライドする前に処理されます (設定した場合)。デフォルトは
200です。このパラメーターは任意です。
- Create をクリックします。
クラスターカスタムリソースのステータスをチェックして、受付 Webhook の現在の状態を確認します。
- ClusterResourceOverride Operator ページで、cluster をクリックします。
ClusterResourceOverride Details ページで、YAML をクリックします。
mutatingWebhookConfigurationRefセクションは、Webhook が呼び出されたときに表示されます。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 # ...ここでは、以下のようになります。
status.mutatingWebhookConfigurationRef-
ClusterResourceOverride のアドミッション Webhook を指定します。