55 Telco機能 (DPDK、SR-IOV、CPUアイソレーション、huge pages、NUMAなど) #
ダイレクトネットワークプロビジョニングワークフローにより、ダウンストリームクラスターで使用されるTelco機能を自動化し、それらのサーバー上でTelcoワークロードを実行できるようになります。
要件
前のセクション (第50章 「接続されたシナリオ向けのダウンストリームクラスターイメージの準備」)で説明したように、`EIB`を使用して生成されたイメージは、このセクション (注記)で設定したパスと完全に一致する管理クラスター上に配置する必要があります。
`EIB`を使用して生成されたイメージには、このセクション (50.2.5項 「通信ワークロードの追加構成」)に従って特定のTelcoパッケージを含める必要があります。
作成され、以下のセクションで使用できる管理サーバーです。詳細については、「管理クラスター」セクションのパートV「管理クラスタのセットアップ」を参照してください。
設定
ホストの登録およびプロビジョニングの基礎として、以下の2つのセクションを使用してください。
ダイレクトネットワークプロビジョニングを使用したダウンストリームクラスターのプロビジョニング(シングルノード) (第52章 「ダイレクトネットワークプロビジョニング(シングルノード)によるダウンストリームクラスターのプロビジョニング」)
ダイレクトネットワークプロビジョニングを使用したダウンストリームクラスターのプロビジョニング(マルチノード) (第53章 「ダイレクトネットワークプロビジョニング(マルチノード)によるダウンストリームクラスターのプロビジョニング」)
本セクションで扱うTelco機能は以下の通りです。
DPDKおよびVFの作成
SR-IOVおよびワークロードで使用するVFの割り当て
CPUの分離およびパフォーマンスチューニング
Huge pagesの設定
カーネルパラメータのチューニング
上記で示した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を実行してsriovHelmチャートをインストールし、カスタムリソースが作成されるまで待機した後、/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.yaml55.1 高精度時刻同期プロトコル (PTP) #
PTP同期は、EIBイメージでデーモンを有効にすることと、Cluster APIを介して設定ファイルをデプロイすることの2つのステップで、プロビジョニング時に有効になります。ターゲットプラットフォームに応じて、2つのプロビジョニングモデルが文書化されています。
標準シナリオ (55.1.1項 「標準シナリオ(単一のptp4l + phc2sys)」): 単一の`ptp4l`インスタンス、およびオプションで`phc2sys`。シナリオ1a (47.3項 「シナリオ1a - オーディナリークロック(PTPのみ)」)からシナリオ2a (47.5項 「シナリオ2a - バウンダリクロック (PTPのみ)、マルチポートシングルNICを使用し、オーディナリクロックサーバーへの伝搬を含む」)までを対象としています。
GNR-DマルチNICシナリオ (55.1.2項 「GNR-DマルチNICシナリオ(DPLL)」): 複数の`ptp4l`インスタンス、`ts2phc`およびオンボードDPLLセットアップ。これらには追加のファイルとサービスが必要です。シナリオ3a (47.7項 「シナリオ3a - 境界クロック(PTPのみ)マルチNIC構成(内部タイミングモジュール付き、DPLL GNR-Dベース)」)を対象としています。
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`ファイルの内容。 |
| `/etc/sysconfig/ptp4l`内の`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_CODECluster 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 | 説明 |
|---|---|
| DPLLブート時セットアップスクリプト( |
| グランドマスター転送スクリプト( |
|
|
|
|
| 統合コントローラー`ptp4l`ファイル( |
| アドインカード 1 |
| アドインカード 2 |
代入する具体的な値については、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) とアドインカードの数をターゲットハードウェアに合わせて調整してください。