|Index|SUSE Telco Cloud ドキュメント|完全自動化されたダイレクトネットワークプロビジョニング|Telco機能 (DPDK、SR-IOV、CPUアイソレーション、huge pages、NUMAなど)
適用項目 SUSE Telco Cloud 3.7

55 Telco機能 (DPDK、SR-IOV、CPUアイソレーション、huge pages、NUMAなど)

ダイレクトネットワークプロビジョニングワークフローにより、ダウンストリームクラスターで使用されるTelco機能を自動化し、それらのサーバー上でTelcoワークロードを実行できるようになります。

要件

設定

ホストの登録およびプロビジョニングの基礎として、以下の2つのセクションを使用してください。

本セクションで扱うTelco機能は以下の通りです。

  • DPDKおよびVFの作成

  • SR-IOVおよびワークロードで使用するVFの割り当て

  • CPUの分離およびパフォーマンスチューニング

  • Huge pagesの設定

  • カーネルパラメータのチューニング

注記
注記

Telco機能の詳細については、パートVI「Telco機能の設定」を参照してください。

上記で示したTelco機能を有効にするために必要な変更は、すべてプロビジョニングファイル`capi-provisioning-example.yaml`内の`RKE2ControlPlane`ブロックに含まれています。ファイル`capi-provisioning-example.yaml`内のその他の情報は、プロビジョニングセクション (第52章 「ダイレクトネットワークプロビジョニング(シングルノード)によるダウンストリームクラスターのプロビジョニング」)で提供されている情報と同じです。

プロセスを明確にするため、Telco機能を有効にするためにそのブロック(RKE2ControlPlane)で必要な変更は以下の通りです。

  • インターフェース、ドライバー、およびワークロードに対して作成・公開する`VFs`の数を定義するために使用するイグニッションファイル`/var/lib/rancher/rke2/server/manifests/configmap-sriov-custom-auto.yaml`。

    • 設定マップ sriov-custom-auto-config 内の値のみが、実際の値に置き換えられます。

      • ${RESOURCE_NAME1} — 最初の PF インターフェースに使用されるリソース名(例:sriov-resource-du1)。これはプレフィックス rancher.io に追加され、ワークロードで使用されるラベルとして使用されます(例:rancher.io/sriov-resource-du1)。

      • ${SRIOV-NIC-NAME1} — 使用する最初の PF インターフェースの名前(例:eth0)。

      • ${PF_NAME1} — 使用する最初の物理機能 PF の名前。これを使用して、より複雑なフィルターを生成します(例:eth0#2-5)。

      • ${DRIVER_NAME1} — 最初の VF インターフェースに使用されるドライバー名(例:vfio-pci)。

      • ${NUM_VFS1} — 最初の PF インターフェースに対して作成される VFs の数(例:8)。

  • /var/sriov-auto-filler.sh は、高レベルの設定マップ sriov-custom-auto-config と、低レベルのハードウェア情報を含む sriovnetworknodepolicy との間の変換器として使用されます。このスクリプトは、ユーザーが事前にハードウェア情報を把握する必要がないように、その複雑さを抽象化するために作成されました。このファイルに変更を加える必要はありませんが、sr-iov を有効にして VFs を作成する必要がある場合は、このファイルが存在している必要があります。

  • 以下の機能を有効にするために使用されるカーネル引数:

パラメータ

値

説明

isolcpus

domain,nohz,managed_irq,1-30,33-62

コア 1-30 および 33-62 を分離します。

skew_tick

1

カーネルが分離された CPU 間でタイマー割り込みを分散させることを可能にします。

nohz

on

システムがアイドル状態のときに、カーネルが単一の CPU 上でタイマーティックを実行できるようにします。

nohz_full

1-30,33-62

カーネルブートパラメータは、CPU 分離とともにフル dynticks を構成するための現在の主要なインターフェースです。

rcu_nocbs

1-30,33-62

システムがアイドル状態のときに、カーネルが単一の CPU 上で RCU コールバックを実行できるようにします。

irqaffinity

0,31,32,63

システムがアイドル状態のときに、カーネルが単一の CPU で割り込みを実行できるようにします。

アイドル

poll

アイドル状態から抜ける際のレイテンシを最小限に抑えます。

iommu

pt

dpdkインターフェースにvfioを使用できるようにします。

intel_iommu

on

VFに対してvfioの使用を有効にします。

hugepagesz

1G

「ヒュージページ」のサイズを1 GBに設定できるようにします。

ヒュージページ

40

直前に定義されたサイズ(1 GB)に対して割り当てるよう要求された「ヒュージページ」の数。

hugepagesz

2M

「ヒュージページ」のサイズを2 MBに設定できるようにします。

ヒュージページ

0

直前に定義されたサイズ(2 MB)に対して割り当てるよう要求された「ヒュージページ」の数。

default_hugepagesz

1G

「ヒュージページ」サイズのデフォルト値。

nowatchdog

 

ウォッチドッグを無効にします。

nmi_watchdog

0

NMIウォッチドッグを無効にします。

  • 以下のsystemdサービスを使用して、以下を有効にします。

    • Ironic情報を使用してプロビジョニング処理中に PROVIDERID と node-name を自動的に置き換えるための rke2-preinstall.service。

    • cpu-partitioning.service は、CPU の分離コアを有効にするために使用されます(例:1-30,33-62)。

    • performance-settings.service は、CPUパフォーマンスチューニングを有効にするために使用されます。

    • sriov-custom-auto-vfs.service を実行して sriov Helmチャートをインストールし、カスタムリソースが作成されるまで待機した後、/var/sriov-auto-filler.sh を実行して設定マップ sriov-custom-auto-config の値を置き換え、ワークロードで使用する sriovnetworknodepolicy を作成します。

  • ${RKE2_VERSION}`は、この値を置き換えるために使用する`RKE2`のバージョンです(例: `v1.36.3+rke2r1)。

前述のすべての変更を行うと、capi-provisioning-example.yaml 内の RKE2ControlPlane ブロックは次のようになります。

apiVersion: controlplane.cluster.x-k8s.io/v1beta2
kind: RKE2ControlPlane
metadata:
  name: single-node-cluster
  namespace: default
spec:
  infrastructureRef:
    apiGroup: infrastructure.cluster.x-k8s.io
    kind: Metal3MachineTemplate
    name: single-node-cluster-controlplane
  replicas: 1
  version: ${RKE2_VERSION}
  rolloutStrategy:
    type: "RollingUpdate"
    rollingUpdate:
      maxSurge: 0
  serverConfig:
    cni: calico
    cniMultusEnable: true
  agentConfig:
    format: ignition
    additionalUserData:
      config: |
        variant: fcos
        version: 1.4.0
        storage:
          files:
          - path: /var/lib/rancher/rke2/server/manifests/configmap-sriov-custom-auto.yaml
            overwrite: true
            contents:
              inline: |
                apiVersion: v1
                kind: ConfigMap
                metadata:
                  name: sriov-custom-auto-config
                  namespace: kube-system
                data:
                  config.json: |
                    [
                        {
                          "resourceName": "${RESOURCE_NAME1}",
                          "interface": "${SRIOV-NIC-NAME1}",
                          "pfname": "${PF_NAME1}",
                          "driver": "${DRIVER_NAME1}",
                          "numVFsToCreate": ${NUM_VFS1}
                        },
                        {
                          "resourceName": "${RESOURCE_NAME2}",
                          "interface": "${SRIOV-NIC-NAME2}",
                          "pfname": "${PF_NAME2}",
                          "driver": "${DRIVER_NAME2}",
                          "numVFsToCreate": ${NUM_VFS2}
                        }
                    ]
            mode: 0644
            user:
              name: root
            group:
              name: root
          - path: /var/lib/rancher/rke2/server/manifests/sriov-crd.yaml
            overwrite: true
            contents:
              inline: |
                apiVersion: helm.cattle.io/v1
                kind: HelmChart
                metadata:
                  name: sriov-crd
                  namespace: kube-system
                spec:
                  chart: oci://registry.suse.com/edge/charts/sriov-crd
                  targetNamespace: sriov-network-operator
                  version: 307.1.0+up1.6.0
                  createNamespace: true
          - path: /var/lib/rancher/rke2/server/manifests/sriov-network-operator.yaml
            overwrite: true
            contents:
              inline: |
                apiVersion: helm.cattle.io/v1
                kind: HelmChart
                metadata:
                  name: sriov-network-operator
                  namespace: kube-system
                spec:
                  chart: oci://registry.suse.com/edge/charts/sriov-network-operator
                  targetNamespace: sriov-network-operator
                  version: 307.1.0+up1.6.0
                  createNamespace: true
        kernel_arguments:
          should_exist:
            - intel_iommu=on
            - iommu=pt
            - idle=poll
            - mce=off
            - hugepagesz=1G hugepages=40
            - hugepagesz=2M hugepages=0
            - default_hugepagesz=1G
            - irqaffinity=${NON-ISOLATED_CPU_CORES}
            - isolcpus=domain,nohz,managed_irq,${ISOLATED_CPU_CORES}
            - nohz_full=${ISOLATED_CPU_CORES}
            - rcu_nocbs=${ISOLATED_CPU_CORES}
            - rcu_nocb_poll
            - nosoftlockup
            - nowatchdog
            - nohz=on
            - nmi_watchdog=0
            - skew_tick=1
            - quiet
        systemd:
          units:
          - name: rke2-preinstall.service
            enabled: true
            contents: |
              [Unit]
              Description=rke2-preinstall
              Wants=network-online.target
              Before=rke2-install.service
              ConditionPathExists=!/run/cluster-api/bootstrap-success.complete
              [Service]
              Type=oneshot
              User=root
              ExecStartPre=/bin/sh -c "mount -L config-2 /mnt"
              # Note we use _ as a delimiter for sed here because the providerid includes / characters
              ExecStart=/bin/sh -c "sed -i \"s_PROVIDERID_$(jq -r .providerid /mnt/openstack/latest/meta_data.json)_\" /etc/rancher/rke2/config.yaml"
              ExecStart=/bin/sh -c "echo \"node-name: $(jq -r .name /mnt/openstack/latest/meta_data.json)\" >> /etc/rancher/rke2/config.yaml"
              ExecStart=/bin/sh -c "echo \"node-label:\" >> /etc/rancher/rke2/config.yaml"
              ExecStart=/bin/sh -c "echo \"  - metal3.io/uuid=$(jq -r .uuid /mnt/openstack/latest/meta_data.json)\" >> /etc/rancher/rke2/config.yaml"
              ExecStartPost=/bin/sh -c "umount /mnt"
              [Install]
              WantedBy=multi-user.target
          - name: cpu-partitioning.service
            enabled: true
            contents: |
              [Unit]
              Description=cpu-partitioning
              Wants=network-online.target
              After=network.target network-online.target
              [Service]
              Type=oneshot
              User=root
              ExecStart=/bin/sh -c "echo isolated_cores=${ISOLATED_CPU_CORES} > /etc/tuned/cpu-partitioning-variables.conf"
              ExecStartPost=/bin/sh -c "tuned-adm profile cpu-partitioning"
              ExecStartPost=/bin/sh -c "systemctl enable tuned.service"
              [Install]
              WantedBy=multi-user.target
          - name: performance-settings.service
            enabled: true
            contents: |
              [Unit]
              Description=performance-settings
              Wants=network-online.target
              After=network.target network-online.target cpu-partitioning.service
              [Service]
              Type=oneshot
              User=root
              ExecStart=/bin/sh -c "/opt/performance-settings/performance-settings.sh"
              [Install]
              WantedBy=multi-user.target
          - name: sriov-custom-auto-vfs.service
            enabled: true
            contents: |
              [Unit]
              Description=SRIOV Custom Auto VF Creation
              Wants=network-online.target  rke2-server.target
              After=network.target network-online.target rke2-server.target
              [Service]
              User=root
              Type=forking
              TimeoutStartSec=900
              ExecStart=/bin/sh -c "while ! /var/lib/rancher/rke2/bin/kubectl --kubeconfig=/etc/rancher/rke2/rke2.yaml wait --for condition=ready nodes --all ; do sleep 2 ; done"
              ExecStartPost=/bin/sh -c "while [ $(/var/lib/rancher/rke2/bin/kubectl --kubeconfig=/etc/rancher/rke2/rke2.yaml get sriovnetworknodestates.sriovnetwork.openshift.io --ignore-not-found --no-headers -A | wc -l) -eq 0 ]; do sleep 1; done"
              ExecStartPost=/bin/sh -c "/opt/sriov/sriov-auto-filler.sh"
              RemainAfterExit=yes
              KillMode=process
              [Install]
              WantedBy=multi-user.target
    kubelet:
      extraArgs:
      - provider-id=metal3://PROVIDERID
    nodeName: "localhost.localdomain"

前のブロックを結合してファイルを作成したら、管理クラスターで次のコマンドを実行し、Telco機能を使用して新しいダウンストリームクラスターのプロビジョニングを開始する必要があります。

$ kubectl apply -f capi-provisioning-example.yaml

55.1 高精度時刻同期プロトコル (PTP)

PTP同期は、EIBイメージでデーモンを有効にすることと、Cluster APIを介して設定ファイルをデプロイすることの2つのステップで、プロビジョニング時に有効になります。ターゲットプラットフォームに応じて、2つのプロビジョニングモデルが文書化されています。

55.1.1 標準シナリオ(単一のptp4l + phc2sys)

これらのPTPシナリオ間では設定ファイルのみが変更されるため、このセクションでは、単一の汎用テンプレートと、それに続く各シナリオの具体的な値を提供します。

EIBイメージでデーモンを有効にする

`linuxptp`パッケージは、すでにTelcoパッケージリストに含まれています(Telcoワークロードの追加設定 (50.2.5項 「通信ワークロードの追加構成」)を参照してください)。ただし、`ptp4l`および`phc2sys`デーモンはデフォルトでは有効になっていないため、同じEIBイメージ定義ファイルの`systemd.enable`リストに追加する必要があります。

operatingSystem:
  systemd:
    enable:
      - ptp4l
      - phc2sys
  packages:
    packageList:
      - linuxptp      # already present in the Telco package list
    sccRegistrationCode: $SCC_REGISTRATION_CODE

イメージビルド時にデーモンを有効にすると、設定ファイルがホスト上に存在すれば、両方のサービスが自動的に開始されます。

Cluster APIを介して設定ファイルをデプロイする

PTP設定は、変更された`RKE2ControlPlane`オブジェクトを介してデプロイされます。このオブジェクトは、ptp4l`プロファイルファイルと、`ptp4l`および`phc2sys`デーモンを制御する2つの/etc/sysconfig`ファイルを書き込みます。オブジェクトの残りの部分はプロビジョニングセクション (第52章 「ダイレクトネットワークプロビジョニング(シングルノード)によるダウンストリームクラスターのプロビジョニング」)で説明されているものと同じです。他のCluster APIオブジェクトで補完し、選択したシナリオの値でプレースホルダーを置き換えてください。

apiVersion: controlplane.cluster.x-k8s.io/v1beta2
kind: RKE2ControlPlane
metadata:
  name: single-node-cluster
  namespace: default
spec:
  infrastructureRef:
    apiGroup: infrastructure.cluster.x-k8s.io
    kind: Metal3MachineTemplate
    name: single-node-cluster-controlplane
  replicas: 1
  version: ${RKE2_VERSION}
  rolloutStrategy:
    type: "RollingUpdate"
    rollingUpdate:
      maxSurge: 0
  registrationMethod: "control-plane-endpoint"
  serverConfig:
    cni: canal
  agentConfig:
    format: ignition
    cisProfile: cis
    additionalUserData:
      config: |
        variant: fcos
        version: 1.4.0
        systemd:
          units:
            - name: rke2-preinstall.service
              enabled: true
              contents: |
                [Unit]
                Description=rke2-preinstall
                Wants=network-online.target
                Before=rke2-install.service
                ConditionPathExists=!/run/cluster-api/bootstrap-success.complete
                [Service]
                Type=oneshot
                User=root
                ExecStartPre=/bin/sh -c "mount -L config-2 /mnt"
                # Note we use _ as a delimiter for sed here because the providerid includes / characters
                ExecStart=/bin/sh -c "sed -i \"s_PROVIDERID_$(jq -r .providerid /mnt/openstack/latest/meta_data.json)_\" /etc/rancher/rke2/config.yaml"
                ExecStart=/bin/sh -c "echo \"node-name: $(jq -r .name /mnt/openstack/latest/meta_data.json)\" >> /etc/rancher/rke2/config.yaml"
                ExecStart=/bin/sh -c "echo \"node-label:\" >> /etc/rancher/rke2/config.yaml"
                ExecStart=/bin/sh -c "echo \"  - metal3.io/uuid=$(jq -r .uuid /mnt/openstack/latest/meta_data.json)\" >> /etc/rancher/rke2/config.yaml"
                ExecStartPost=/bin/sh -c "umount /mnt"
                [Install]
                WantedBy=multi-user.target
        storage:
          files:
            - path: ${PTP4L_CONF_PATH}
              overwrite: true
              contents:
                inline: |
                  ## Replace ${PTP4L_CONF_CONTENTS} with the ptp4l configuration content of the PTP scenario to deploy
                  ${PTP4L_CONF_CONTENTS}
              mode: 0644
              user:
                name: root
              group:
                name: root
            - path: /etc/sysconfig/ptp4l
              overwrite: true
              contents:
                inline: |
                  ## Path:           Network/LinuxPTP
                  ## Description:    Precision Time Protocol (PTP): ptp4l settings
                  ## Replace ${PTP4L_OPTIONS} with the ptp4l OPTIONS value of the PTP scenario to deploy
                  OPTIONS="${PTP4L_OPTIONS}"
              mode: 0644
              user:
                name: root
              group:
                name: root
            - path: /etc/sysconfig/phc2sys
              overwrite: true
              contents:
                inline: |
                  ## Path:           Network/LinuxPTP
                  ## Description:    Precision Time Protocol (PTP): phc2sys settings
                  ## Replace ${PHC2SYS_OPTIONS} with the phc2sys OPTIONS value of the PTP scenario to deploy
                  OPTIONS="${PHC2SYS_OPTIONS}"
              mode: 0644
              user:
                name: root
              group:
                name: root
    kubelet:
      extraArgs:
        - provider-id=metal3://PROVIDERID
    nodeName: "localhost.localdomain"

プレースホルダーは各シナリオによって提供されます。

Placeholder説明

${PTP4L_CONF_PATH}

ptp4l`プロファイルファイルのパス(例:/etc/ptp4l-G.8275.1.conf`)。

${PTP4L_CONF_CONTENTS}

選択したシナリオから取得した、その`ptp4l`ファイルの内容。

${PTP4L_OPTIONS}

`/etc/sysconfig/ptp4l`内の`OPTIONS=`行の値。

${PHC2SYS_OPTIONS}

`/etc/sysconfig/phc2sys`内の`OPTIONS=`行の値。

各ケースで代入する具体的な値については、PTPドキュメントのPTPシナリオ (47.1項 「概要」)にある対応するシナリオの*CAPI自動化*を参照してください。

注記
注記

このアプローチは、クラスター内のハードウェアが均一であり、インターフェイス名を含めてすべてのホストで同じPTP設定が必要な場合にのみ便利です。`ts2phc`またはオンボードDPLLルーティングに依存する境界クロックシナリオでは、基本例に加えて追加のファイルとサービスが必要であり、これらについては次のセクションで説明します。

55.1.2 GNR-DマルチNICシナリオ(DPLL)

GNR-D境界クロック(シナリオ3a (47.7項 「シナリオ3a - 境界クロック(PTPのみ)マルチNIC構成(内部タイミングモジュール付き、DPLL GNR-Dベース)」))は、単一の`ptp4l`プロファイルでは記述できません。PHCごとに1つの`ptp4l`インスタンスを実行し、アドインカードを`ts2phc`と調整し、起動時にオンボードDPLLを配線し、グランドマスターパラメーターを定期的に転送します。したがって、プロビジョニングは、同じ`RKE2ControlPlane` Ignitionブロックを通じてデプロイされるいくつかの設定ファイル、スクリプト、および`systemd`ユニットで基本例を拡張します。すべてのファイルとユニットの内容は、シナリオ3a (47.7項 「シナリオ3a - 境界クロック(PTPのみ)マルチNIC構成(内部タイミングモジュール付き、DPLL GNR-Dベース)」)にリストされているものです。

重要
重要

このSUSE Telco Cloudリリースでは、このシナリオは「デフォルト」(つまり、「PREEMPT_RT」ではない)カーネルフレーバーに対してのみサポートされています。 「RT」カーネルフレーバーのサポートは、次のリリースで追加される予定です。

EIBイメージでデーモンを有効にする

GNR-Dユニットには、DPLLサービス、PHCごとに1つのテンプレート化された`ptp4l`インスタンス、およびグランドマスター転送タイマーというカスタムセットアップが必要です。その結果、EIB systemd.enable`リストを使用する代わりに、以下のIgnitionブロックを介してそれらをデプロイおよび有効化する必要があります。EIBイメージには`linuxptp`パッケージのみが必要であり、これによって`ptp4l、ts2phc、および`pmc`バイナリが提供されます。

operatingSystem:
  packages:
    packageList:
      - linuxptp      # already present in the Telco package list
    sccRegistrationCode: $SCC_REGISTRATION_CODE

Cluster APIを介してファイルとユニットをデプロイする

以下の`RKE2ControlPlane`オブジェクトは、GNR-Dファイルとユニットをデプロイします。これは標準例と同じアプローチに従っています。ファイルの内容はプレースホルダーとして提供され、シナリオ4 (47.7項 「シナリオ3a - 境界クロック(PTPのみ)マルチNIC構成(内部タイミングモジュール付き、DPLL GNR-Dベース)」)から取得されます。一方、`systemd`ユニット(このシナリオでは固定)はインラインで表示されます。標準的な例のように他のCluster APIオブジェクトで完成させ、プレースホルダーをシナリオの値に置き換えてください。

apiVersion: controlplane.cluster.x-k8s.io/v1beta2
kind: RKE2ControlPlane
metadata:
  name: single-node-cluster
  namespace: default
spec:
  infrastructureRef:
    apiGroup: infrastructure.cluster.x-k8s.io
    kind: Metal3MachineTemplate
    name: single-node-cluster-controlplane
  replicas: 1
  version: ${RKE2_VERSION}
  rolloutStrategy:
    type: "RollingUpdate"
    rollingUpdate:
      maxSurge: 0
  registrationMethod: "control-plane-endpoint"
  serverConfig:
    cni: canal
  agentConfig:
    format: ignition
    cisProfile: cis
    additionalUserData:
      config: |
        variant: fcos
        version: 1.4.0
        systemd:
          units:
            - name: rke2-preinstall.service
              enabled: true
              contents: |
                [Unit]
                Description=rke2-preinstall
                Wants=network-online.target
                Before=rke2-install.service
                ConditionPathExists=!/run/cluster-api/bootstrap-success.complete
                [Service]
                Type=oneshot
                User=root
                ExecStartPre=/bin/sh -c "mount -L config-2 /mnt"
                # Note we use _ as a delimiter for sed here because the providerid includes / characters
                ExecStart=/bin/sh -c "sed -i \"s_PROVIDERID_$(jq -r .providerid /mnt/openstack/latest/meta_data.json)_\" /etc/rancher/rke2/config.yaml"
                ExecStart=/bin/sh -c "echo \"node-name: $(jq -r .name /mnt/openstack/latest/meta_data.json)\" >> /etc/rancher/rke2/config.yaml"
                ExecStart=/bin/sh -c "echo \"node-label:\" >> /etc/rancher/rke2/config.yaml"
                ExecStart=/bin/sh -c "echo \"  - metal3.io/uuid=$(jq -r .uuid /mnt/openstack/latest/meta_data.json)\" >> /etc/rancher/rke2/config.yaml"
                ExecStartPost=/bin/sh -c "umount /mnt"
                [Install]
                WantedBy=multi-user.target
            - name: gnrd-ptp-dpll-setup.service
              enabled: true
              contents: |
                [Unit]
                Description=GNR-D PTP DPLL and internal signal setup
                Before=ts2phc.service ptp4l@nac.service ptp4l@aic1.service ptp4l@aic2.service
                [Service]
                Type=oneshot
                RemainAfterExit=yes
                ExecStart=/usr/local/bin/01-gnrd-startup-setup.sh
                [Install]
                WantedBy=multi-user.target
            - name: ptp4l@.service
              contents: |
                [Unit]
                Description=PTP Boundary Clock instance %i
                After=gnrd-ptp-dpll-setup.service
                Requires=gnrd-ptp-dpll-setup.service
                [Service]
                ExecStart=/usr/sbin/ptp4l -f /etc/ptp4l-%i.conf
                [Install]
                WantedBy=multi-user.target
            - name: ptp4l@nac.service
              enabled: true
            - name: ptp4l@aic1.service
              enabled: true
            - name: ptp4l@aic2.service
              enabled: true
            - name: ts2phc.service
              enabled: true
            - name: ptp-forward-gm.service
              contents: |
                [Unit]
                Description=Forward Grandmaster parameters to the add-in ptp4l instances
                Wants=ptp4l@nac.service ptp4l@aic1.service ptp4l@aic2.service
                After=ptp4l@nac.service ptp4l@aic1.service ptp4l@aic2.service
                [Service]
                Type=oneshot
                SELinuxContext=system_u:system_r:unconfined_t:s0
                ExecStart=/usr/local/bin/04-ptp-forward-GM.sh
            - name: ptp-forward-gm.timer
              enabled: true
              contents: |
                [Unit]
                Description=Refresh forwarded Grandmaster parameters
                [Timer]
                OnBootSec=2min
                OnUnitActiveSec=5min
                [Install]
                WantedBy=timers.target
        storage:
          files:
            - path: /usr/local/bin/01-gnrd-startup-setup.sh
              mode: 0755
              overwrite: true
              contents:
                inline: |
                  ${GNRD_DPLL_SETUP_CONTENTS}
            - path: /usr/local/bin/04-ptp-forward-GM.sh
              mode: 0755
              overwrite: true
              contents:
                inline: |
                  ${GNRD_FORWARD_GM_CONTENTS}
            - path: /etc/ts2phc-cf-all.cfg
              mode: 0644
              overwrite: true
              contents:
                inline: |
                  ${TS2PHC_CONF_CONTENTS}
            - path: /etc/sysconfig/ts2phc
              mode: 0644
              overwrite: true
              contents:
                inline: |
                  OPTIONS="${TS2PHC_OPTIONS}"
            - path: /etc/ptp4l-nac.conf
              mode: 0644
              overwrite: true
              contents:
                inline: |
                  ${PTP4L_NAC_CONTENTS}
            - path: /etc/ptp4l-aic1.conf
              mode: 0644
              overwrite: true
              contents:
                inline: |
                  ${PTP4L_AIC1_CONTENTS}
            - path: /etc/ptp4l-aic2.conf
              mode: 0644
              overwrite: true
              contents:
                inline: |
                  ${PTP4L_AIC2_CONTENTS}
    kubelet:
      extraArgs:
        - provider-id=metal3://PROVIDERID
    nodeName: "localhost.localdomain"

プレースホルダーはGNR-Dシナリオによって提供されます。

Placeholder説明

${GNRD_DPLL_SETUP_CONTENTS}

DPLLブート時セットアップスクリプト(01-gnrd-startup-setup.sh)の内容。

${GNRD_FORWARD_GM_CONTENTS}

グランドマスター転送スクリプト(04-ptp-forward-GM.sh)の内容。

${TS2PHC_CONF_CONTENTS}

ts2phc`環境設定ファイル(/etc/ts2phc-cf-all.cfg`)の内容。

${TS2PHC_OPTIONS}

OPTIONS=`内の/etc/sysconfig/ts2phc`行の値。

${PTP4L_NAC_CONTENTS}

統合コントローラー`ptp4l`ファイル(/etc/ptp4l-nac.conf)の内容。

${PTP4L_AIC1_CONTENTS}

アドインカード 1 ptp4l`ファイル(/etc/ptp4l-aic1.conf`)の内容。

${PTP4L_AIC2_CONTENTS}

アドインカード 2 ptp4l`ファイル(/etc/ptp4l-aic2.conf`)の内容。

代入する具体的な値については、CAPI automation の Scenario 4 (47.7項 「シナリオ3a - 境界クロック(PTPのみ)マルチNIC構成(内部タイミングモジュール付き、DPLL GNR-Dベース)」) を参照してください。

注記
注記

ptp4l@.service テンプレートは enabled なしでデプロイされます。インスタンスは ptp4l@nac、ptp4l@aic1、および ptp4l@aic2 を有効にすることで作成されます。ptp-forward-gm.service はタイマーによってトリガーされるため、タイマーのみが有効になります。ts2phc.service は linuxptp パッケージによって出荷され、/etc/sysconfig/ts2phc を読み取ります。ブート順序は Before= の gnrd-ptp-dpll-setup.service ディレクティブによって強制されます。デバイス名 (eno8703np0、ptp<N>、eno16495np0、eno16595np0) とアドインカードの数をターゲットハードウェアに合わせて調整してください。