Menu Close

3.2.2. スケジューラーポリシーファイルの作成

デフォルトのスケジューリング動作を変更するには、必要な述語および優先順位を使用して JSON ファイルを作成します。次に、JSON ファイルから設定マップを生成し、設定マップを使用するように cluster スケジューラーオブジェクトを指定します。

手順

スケジューラーポリシーを設定するには、以下を実行します。

  1. 必要な述語と優先順位を使って policy.cfg という名前の JSON ファイルを作成します。

    スケジューラー JSON ファイルのサンプル

    {
    "kind" : "Policy",
    "apiVersion" : "v1",
    "predicates" : [ 1
            {"name" : "MaxGCEPDVolumeCount"},
            {"name" : "GeneralPredicates"},
            {"name" : "MaxAzureDiskVolumeCount"},
            {"name" : "MaxCSIVolumeCountPred"},
            {"name" : "CheckVolumeBinding"},
            {"name" : "MaxEBSVolumeCount"},
            {"name" : "MatchInterPodAffinity"},
            {"name" : "CheckNodeUnschedulable"},
            {"name" : "NoDiskConflict"},
            {"name" : "NoVolumeZoneConflict"},
            {"name" : "PodToleratesNodeTaints"}
            ],
    "priorities" : [ 2
            {"name" : "LeastRequestedPriority", "weight" : 1},
            {"name" : "BalancedResourceAllocation", "weight" : 1},
            {"name" : "ServiceSpreadingPriority", "weight" : 1},
            {"name" : "NodePreferAvoidPodsPriority", "weight" : 1},
            {"name" : "NodeAffinityPriority", "weight" : 1},
            {"name" : "TaintTolerationPriority", "weight" : 1},
            {"name" : "ImageLocalityPriority", "weight" : 1},
            {"name" : "SelectorSpreadPriority", "weight" : 1},
            {"name" : "InterPodAffinityPriority", "weight" : 1},
            {"name" : "EqualPriority", "weight" : 1}
            ]
    }

    1
    必要に応じて述語を追加します。
    2
    必要に応じて優先順位を追加します。
  2. スケジューラー JSON ファイルに基づいて設定マップを作成します。

    $ oc create configmap -n openshift-config --from-file=policy.cfg <configmap-name> 1
    1
    設定マップの名前を入力します。

    以下は例になります。

    $ oc create configmap -n openshift-config --from-file=policy.cfg scheduler-policy

    出力例

    configmap/scheduler-policy created

    ヒント

    または、以下の YAML を適用して設定マップを作成できます。

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: scheduler-policy
      namespace: openshift-config
    data: 1
      policy.cfg: |
        {
        "kind": "Policy",
        "apiVersion": "v1",
        "predicates": [
            {
                "name": "RequireRegion",
                "argument": {
                    "labelPreference":
                        {"label": "region"},
                        {"presence": true}
                }
             }
          ],
        "priorities": [
            {
                "name":"ZonePreferred",
                "weight" : 1,
                "argument": {
                    "labelPreference":
                        {"label": "zone"},
                        {"presence": true}
                   }
               }
           ]
        }
    1
    述語と優先順位を持つ JSON 形式の policy.cfg ファイル。
  3. スケジューラー Operator カスタムリソースを編集して設定マップを追加します。

    $ oc patch Scheduler cluster --type='merge' -p '{"spec":{"policy":{"name":"<configmap-name>"}}}' --type=merge 1
    1
    設定マップの名前を指定します。

    以下に例を示します。

    $ oc patch Scheduler cluster --type='merge' -p '{"spec":{"policy":{"name":"scheduler-policy"}}}' --type=merge
    ヒント

    あるいは、以下の YAML を適用して設定マップを追加できます。

    apiVersion: config.openshift.io/v1
    kind: Scheduler
    metadata:
      name: cluster
    spec:
      mastersSchedulable: false
      policy:
        name: scheduler-policy 1
    1
    スケジューラーポリシー設定マップの名前を追加します。

    Scheduler 設定リソースに変更を加えた後に、openshift-kube-apiserver Pod の再デプロイを待機します。これには数分の時間がかかる場合があります。Pod が再デプロイされるまで、新規スケジューラーは有効になりません。

  4. openshift-kube-scheduler namespace のスケジューラー Pod のログを表示して、スケジューラーポリシーが設定されていることを確認します。以下のコマンドは、スケジューラーによって登録される述語と優先順位をチェックします。

    $ oc logs <scheduler-pod> | grep predicates

    以下は例になります。

    $ oc logs openshift-kube-scheduler-ip-10-0-141-29.ec2.internal | grep predicates

    出力例

    Creating scheduler with fit predicates 'map[MaxGCEPDVolumeCount:{} MaxAzureDiskVolumeCount:{} CheckNodeUnschedulable:{} NoDiskConflict:{} NoVolumeZoneConflict:{} GeneralPredicates:{} MaxCSIVolumeCountPred:{} CheckVolumeBinding:{} MaxEBSVolumeCount:{} MatchInterPodAffinity:{} PodToleratesNodeTaints:{}]' and priority functions 'map[InterPodAffinityPriority:{} LeastRequestedPriority:{} ServiceSpreadingPriority:{} ImageLocalityPriority:{} SelectorSpreadPriority:{} EqualPriority:{} BalancedResourceAllocation:{} NodePreferAvoidPodsPriority:{} NodeAffinityPriority:{} TaintTolerationPriority:{}]'