Menu Close

5.10.2. ノードのリソースの自動割り当て

OpenShift Container Platform は、特定のマシン設定プールに関連付けられたノードに最適な system-reserved CPU およびメモリーリソースを自動的に判別し、ノードの起動時にそれらの値を使用してノードを更新できます。

ノード上で system-reserved リソースを自動的に判断して割り当てるには、KubeletConfig カスタムリソース (CR) を作成して autoSizingReserved: true パラメーターを設定します。各ノードのスクリプトにより、各ノードにインストールされている CPU およびメモリーの容量に基づいて、予約されたそれぞれのリソースに最適な値が計算されます。増加した容量を考慮に入れたスクリプトでは、予約リソースにもこれに対応する増加を反映させることが必要になります。

最適な system-reserved 設定を自動的に判別することで、クラスターが効率的に実行され、CRI-O や kubelet などのシステムコンポーネントのリソース不足によりノードが失敗することを防ぐことができます。この際、値を手動で計算し、更新する必要はありません。

この機能はデフォルトで無効にされています。

前提条件

  1. 設定したいノードタイプの静的な MachineConfigPool オブジェクトに関連付けられたラベルを取得します。以下のいずれかの手順を実行します。

    1. マシン設定プールを表示します。

      $ oc describe machineconfigpool <name>

      以下は例になります。

      $ oc describe machineconfigpool worker

      出力例

      Name:         worker
      Namespace:
      Labels:       machineconfiguration.openshift.io/mco-built-in=
                    pools.operator.machineconfiguration.openshift.io/worker=
      Annotations:  <none>
      API Version:  machineconfiguration.openshift.io/v1
      Kind:         MachineConfigPool
      Metadata:
       ...
        creationTimestamp: 2019-02-08T14:52:39Z
        generation: 1
        labels:
          pools.operator.machineconfiguration.openshift.io/worker: "" 1
       ...

      1
      ラベルが追加されると、labels の下に表示されます。
    2. ラベルが存在しない場合は、キー/値のペアを追加します。

      $ oc label machineconfigpool worker custom-kubelet=small-pods
      ヒント

      あるいは、以下の YAML を適用してラベルを追加できます。

      apiVersion: machineconfiguration.openshift.io/v1
      kind: MachineConfigPool
      metadata:
        labels:
          custom-kubelet: small-pods
        name: worker

手順

  1. 設定変更のためのカスタムリソース (CR) を作成します。

    リソース割り当て CR の設定例

    apiVersion: machineconfiguration.openshift.io/v1
    kind: KubeletConfig
    metadata:
      name: dynamic-node 1
    spec:
      autoSizingReserved: true 2
      machineConfigPoolSelector:
        matchLabels:
          pools.operator.machineconfiguration.openshift.io/worker: "" 3

    1
    CR に名前を割り当てます。
    2
    true に設定された autoSizingReserved パラメーターを追加し、 OpenShift Container Platform が指定されたラベルに関連付けられたノード上で system-reserved リソースを自動的に判別し、割り当てることができます。それらのノードでの自動割り当てを無効にするには、このパラメーターを false に設定します。
    3
    マシン設定プールからラベルを指定します。

    上記の例では、すべてのワーカーノードでリソースの自動割り当てを有効にします。OpenShift Container Platform はノードをドレイン (解放) し、kubelet 設定を適用してノードを再起動します。

  2. system-reserved 値を確認します。

    1. 設定したノードにログインします。

      $ oc debug node/<node_name>
    2. kubelet プロセスの詳細を表示します。

      # ps -ef | grep kubelet

      出力例

      root        1613       1 11 06:49 ?        00:00:05 kubelet --config=/etc/kubernetes/kubelet.conf --bootstrap-kubeconfig=/etc/kubernetes/kubeconfig --kubeconfig=/var/lib/kubelet/kubeconfig --container-runtime=remote --container-runtime-endpoint=/var/run/crio/crio.sock --runtime-cgroups=/system.slice/crio.service --node-labels=node-role.kubernetes.io/worker,node.openshift.io/os_id=rhcos --node-ip= --minimum-container-ttl-duration=6m0s --volume-plugin-dir=/etc/kubernetes/kubelet-plugins/volume/exec --cloud-provider=azure --cloud-config=/etc/kubernetes/cloud.conf --pod-infra-container-image=quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:7b8e2e2857d8ac3499c9eb4e449cc3296409f1da21aa21d0140134d611e65b84 --system-reserved=cpu=0.07,memory=2.5Gi --v=2

      上記の例では、ワーカーノードには 0.07 CPU および 2.5 Gi のメモリーが割り当てられます。更新が適用されるまでに数分の時間がかかることがあります。