17.3. PTP ハードウェア高速イベント通知フレームワークの使用
仮想 RAN (vRAN) などのクラウドネイティブアプリケーションでは、ネットワーク全体の機能に重要なハードウェアタイミングイベントに関する通知へのアクセスが必要です。Precision Time Protocol (PTP) クロックの同期エラーは、分散ユニット (DU) で実行される vRAN アプリケーションなど、低遅延アプリケーションのパフォーマンスと信頼性に悪影響を及ぼす可能性があります。
17.3.1. PTP およびクロック同期エラーイベントについて
PTP 同期の損失は、RAN ネットワークでは重大なエラーです。ノードで同期が失われると、無線がシャットダウンされ、ネットワークの OTA(Over the Air) トラフィックがワイヤレスネットワーク内の別のノードにシフトされる可能性があります。高速のイベント通知は、クラスターノードが DU で実行している vRAN アプリケーションに対して PTP クロック同期ステータスと通信できるようにすることで、ワークロードのエラーを軽減します。
イベント通知は、同じ DU ノード上で実行されている vRAN アプリケーションで利用できます。パブリッシュ/サブスクライブ REST API は、イベント通知をメッセージングバスに渡します。パブリッシュ/サブスクライブメッセージング (pub-sub メッセージング) は、非同期のサービス間通信アーキテクチャーです。このアーキテクチャーでは、トピックにパブリッシュされたメッセージが、そのトピックのすべてのサブスクライバーによって即座に受信されます。
PTP Operator は、すべての PTP 対応ネットワークインターフェイスの高速イベント通知を生成します。イベントには、HTTP またはアドバンストメッセージキュープロトコル (AMQP) メッセージバス経由で cloud-event-proxy
サイドカーコンテナーを使用してアクセスできます。
PTP 高速イベント通知は、PTP 通常クロック、PTP グランドマスタークロック、または PTP 境界クロックを使用するように設定されたネットワークインターフェイスで使用できます。
HTTP トランスポートは、PTP およびベアメタルイベントのデフォルトのトランスポートです。可能な場合、PTP およびベアメタルイベントには AMQP ではなく HTTP トランスポートを使用してください。AMQ Interconnect は、2024 年 6 月 30 日で EOL になります。AMQ Interconnect の延長ライフサイクルサポート (ELS) は 2029 年 11 月 29 日に終了します。詳細は、Red Hat AMQ Interconnect のサポートステータス を参照してください。
17.3.2. PTP 高速イベント通知フレームワークについて
Precision Time Protocol (PTP) 高速イベント通知フレームワークを使用して、ベアメタルクラスターノードが生成する PTP イベントにクラスターアプリケーションをサブスクライブします。
高速イベント通知フレームワークは、通信に REST API を使用します。REST API は、O-RAN ALLIANCE 仕様 から入手できる O-RAN O-Cloud Notification API Specification for Event Consumers 3.0 に基づいています。
このフレームワークは、パブリッシャー、サブスクライバー、および AMQ または HTTP メッセージングプロトコルで構成され、パブリッシャーとサブスクライバーのアプリケーション間の通信を処理します。アプリケーションは、cloud-event-proxy
コンテナーをサイドカーパターンで実行して、PTP イベントをサブスクライブします。cloud-event-proxy
サイドカーコンテナーは、プライマリーアプリケーションのリソースをまったく使用せずに、大幅な待機時間なしで、プライマリーアプリケーションコンテナーと同じリソースにアクセスできます。
HTTP トランスポートは、PTP およびベアメタルイベントのデフォルトのトランスポートです。可能な場合、PTP およびベアメタルイベントには AMQP ではなく HTTP トランスポートを使用してください。AMQ Interconnect は、2024 年 6 月 30 日で EOL になります。AMQ Interconnect の延長ライフサイクルサポート (ELS) は 2029 年 11 月 29 日に終了します。詳細は、Red Hat AMQ Interconnect のサポートステータス を参照してください。
図17.4 PTP 高速イベントの概要
- イベントはクラスターホストで生成されます。
-
PTP Operator が管理する Pod の
linuxptp-daemon
は、KubernetesDaemonSet
として実行され、さまざまなlinuxptp
プロセス (ptp4l
、phc2sys
、およびオプションでグランドマスタークロック用のts2phc
) を管理します。linuxptp-daemon
は、イベントを UNIX ドメインソケットに渡します。 - イベントが cloud-event-proxy サイドカーに渡されます。
-
PTP プラグインは、UNIX ドメインソケットからイベントを読み取り、PTP Operator が管理する Pod 内の
cloud-event-proxy
サイドカーに渡します。cloud-event-proxy
は、イベントを Kubernetes インフラストラクチャーから Cloud-Native Network Functions (CNF) に低レイテンシーで配信します。 - イベントが永続化される
-
PTP Operator が管理する Pod 内の
cloud-event-proxy
サイドカーは、REST API を使用してイベントを処理し、クラウドネイティブイベントを発行します。 - メッセージはトランスポートされます。
-
メッセージトランスポーターは、HTTP または AMQP 1.0 QPID を介して、アプリケーション Pod 内の
cloud-event-proxy
サイドカーにイベントを転送します。 - イベントは REST API から入手できます。
-
アプリケーション Pod の
cloud-event-proxy
サイドカーはイベントを処理し、REST API を使用して利用できるようにします。 - コンシューマーアプリケーションがサブスクリプションをリクエストし、サブスクライブされたイベントを受信します
-
コンシューマーアプリケーションは、API 要求をアプリケーション Pod の
cloud-event-proxy
サイドカーに送信して、PTP イベントサブスクリプションを作成します。cloud-event-proxy
サイドカーは、サブスクリプションで指定されたリソースの AMQ または HTTP メッセージングリスナープロトコルを作成します。
アプリケーション Pod の cloud-event-proxy
サイドカーは、PTP Operator が管理する Pod からイベントを受信し、クラウドイベントオブジェクトをラッピング解除してデータを取得し、イベントをコンシューマーアプリケーションにポストします。コンシューマーアプリケーションは、リソース修飾子で指定されたアドレスをリッスンし、PTP イベントを受信して処理します。
17.3.3. PTP 高速イベント通知パブリッシャーの設定
クラスター内のネットワークインターフェイスの PTP 高速イベント通知の使用を開始するには、PTP Operator PtpOperatorConfig
カスタムリソース (CR) で高速イベントパブリッシャーを有効にし、作成する PtpConfig
CR に ptpClockThreshold
値を設定する必要があります。
前提条件
-
OpenShift Container Platform CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。 - PTP Operator がインストールされている。
手順
デフォルトの PTP Operator 設定を変更して、PTP 高速イベントを有効にします。
次の YAML を
ptp-operatorconfig.yaml
ファイルに保存します。apiVersion: ptp.openshift.io/v1 kind: PtpOperatorConfig metadata: name: default namespace: openshift-ptp spec: daemonNodeSelector: node-role.kubernetes.io/worker: "" ptpEventConfig: enableEventPublisher: true 1
- 1
enableEventPublisher
をtrue
に設定して、PTP 高速イベント通知を有効にします。
注記OpenShift Container Platform 4.13 以降では、PTP イベントに HTTP トランスポートを使用するときに、
PtpOperatorConfig
リソースのspec.ptpEventConfig.transportHost
フィールドを設定する必要はありません。PTP イベントに AMQP トランスポートを使用する場合にのみ、transportHost
を設定します。PtpOperatorConfig
CR を更新します。$ oc apply -f ptp-operatorconfig.yaml
PTP 対応インターフェイスの
PtpConfig
カスタムリソースを作成し、ptpClockThreshold
およびptp4lOpts
に必要な値を設定します。次の YAML は、PtpConfig
CR で設定する必要のある値 (必須) を示しています。spec: profile: - name: "profile1" interface: "enp5s0f0" ptp4lOpts: "-2 -s --summary_interval -4" 1 phc2sysOpts: "-a -r -m -n 24 -N 8 -R 16" 2 ptp4lConf: "" 3 ptpClockThreshold: 4 holdOverTimeout: 5 maxOffsetThreshold: 100 minOffsetThreshold: -100
- 1
--summary_interval -4
を追加して、PTP 高速イベントを使用します。- 2
phc2sysOpts
の値が必要です。-m
はメッセージをstdout
に出力します。linuxptp-daemon
DaemonSet
はログを解析し、Prometheus メトリックを生成します。- 3
- デフォルトの
/etc/ptp4l.conf
ファイルを置き換える設定が含まれる文字列を指定します。デフォルト設定を使用するには、フィールドを空のままにします。 - 4
- 任意。
ptpClockThreshold
スタンザが存在しない場合は、ptpClockThreshold
フィールドにデフォルト値が使用されます。スタンザは、デフォルトのptpClockThreshold
値を示します。ptpClockThreshold
値は、PTP マスタークロックが PTP イベントが発生する前に切断されてからの期間を設定します。holdOverTimeout
は、PTP マスタークロックが切断されたときに、PTP クロックイベントの状態がFREERUN
に変わるまでの時間値 (秒単位) です。maxOffsetThreshold
およびminOffsetThreshold
設定は、CLOCK_REALTIME
(phc2sys
) またはマスターオフセット (ptp4l
) の値と比較するナノ秒単位のオフセット値を設定します。ptp4l
またはphc2sys
のオフセット値がこの範囲外の場合、PTP クロックの状態がFREERUN
に設定されます。オフセット値がこの範囲内にある場合、PTP クロックの状態がLOCKED
に設定されます。
関連情報
-
PTP 高速イベントを使用して
linuxptp
サービスを通常のクロックとして設定する CR の詳細な例は、linuxptp サービスを通常のクロックとして設定する を参照してください。
17.3.4. PTP またはベアメタルイベントに HTTP トランスポートを使用するためのコンシューマーアプリケーションの移行
以前に PTP またはベアメタルイベントのコンシューマーアプリケーションをデプロイしている場合は、HTTP メッセージトランスポートを使用するようにアプリケーションを更新する必要があります。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。 - PTP Operator または Bare Metal Event Relay を、デフォルトで HTTP トランスポートを使用するバージョン 4.13 以降に更新している。
手順
HTTP トランスポートを使用するようにイベントコンシューマーアプリケーションを更新します。クラウドイベントサイドカーデプロイメントの
http-event-publishers
変数を設定します。たとえば、PTP イベントが設定されているクラスターでは、以下の YAML スニペットはクラウドイベントサイドカーデプロイメントを示しています。
containers: - name: cloud-event-sidecar image: cloud-event-sidecar args: - "--metrics-addr=127.0.0.1:9091" - "--store-path=/store" - "--transport-host=consumer-events-subscription-service.cloud-events.svc.cluster.local:9043" - "--http-event-publishers=ptp-event-publisher-service-NODE_NAME.openshift-ptp.svc.cluster.local:9043" 1 - "--api-port=8089"
- 1
- PTP Operator は、PTP イベントを生成するホストに対して
NODE_NAME
を自動的に解決します。compute-1.example.com
はその例です。
ベアメタルイベントが設定されているクラスターでは、クラウドイベントサイドカーデプロイメント CR で
http-event-publishers
フィールドをhw-event-publisher-service.openshift-bare-metal-events.svc.cluster.local:9043
に設定します。consumer-events-subscription-service
サービスをイベントコンシューマーアプリケーションと併せてデプロイします。以下に例を示します。apiVersion: v1 kind: Service metadata: annotations: prometheus.io/scrape: "true" service.alpha.openshift.io/serving-cert-secret-name: sidecar-consumer-secret name: consumer-events-subscription-service namespace: cloud-events labels: app: consumer-service spec: ports: - name: sub-port port: 9043 selector: app: consumer clusterIP: None sessionAffinity: None type: ClusterIP
17.3.5. AMQ メッセージングバスのインストール
ノードのパブリッシャーとサブスクライバー間で PTP 高速イベント通知を渡すには、ノードでローカルに実行するように AMQ メッセージングバスをインストールおよび設定する必要があります。AMQ メッセージングを使用するには、AMQ Interconnect Operator をインストールする必要があります。
HTTP トランスポートは、PTP およびベアメタルイベントのデフォルトのトランスポートです。可能な場合、PTP およびベアメタルイベントには AMQP ではなく HTTP トランスポートを使用してください。AMQ Interconnect は、2024 年 6 月 30 日で EOL になります。AMQ Interconnect の延長ライフサイクルサポート (ELS) は 2029 年 11 月 29 日に終了します。詳細は、Red Hat AMQ Interconnect のサポートステータス を参照してください。
前提条件
-
OpenShift Container Platform CLI (
oc
) をインストールします。 -
cluster-admin
権限を持つユーザーとしてログインしている。
手順
-
AMQ Interconnect Operator を独自の
amq-interconnect
namespace にインストールします。Red Hat Integration - AMQ Interconnect Operator の追加 を参照してください。
検証
AMQ Interconnect Operator が利用可能で、必要な Pod が実行していることを確認します。
$ oc get pods -n amq-interconnect
出力例
NAME READY STATUS RESTARTS AGE amq-interconnect-645db76c76-k8ghs 1/1 Running 0 23h interconnect-operator-5cb5fc7cc-4v7qm 1/1 Running 0 23h
必要な
linuxptp-daemon
PTP イベントプロデューサー Pod がopenshift-ptp
namespace で実行していることを確認します。$ oc get pods -n openshift-ptp
出力例
NAME READY STATUS RESTARTS AGE linuxptp-daemon-2t78p 3/3 Running 0 12h linuxptp-daemon-k8n88 3/3 Running 0 12h
17.3.6. REST API を使用して PTP イベントに DU アプリケーションをサブスクライブする
リソースアドレス/cluster/node/<node_name>/ptp
を使用して、アプリケーションを PTP イベントにサブスクライブします。ここで、<node_name>
は、DU アプリケーションを実行しているクラスターノードです。
cloud-event-consumer
DU アプリケーションコンテナーと cloud-event-proxy
サイドカーコンテナーを別々の DU アプリケーション Pod にデプロイします。cloud-event-consumer
DU アプリケーションは、アプリケーション Pod のcloud-event-proxy
コンテナーにサブスクライブします。
次の API エンドポイントを使用して、DU アプリケーション Pod の http://localhost:8089/api/ocloudNotifications/v1/
にある cloud-event-proxy
コンテナーによってポストされた PTP イベントに cloud-event-consumer
DU アプリケーションをサブスクライブします。
/api/ocloudNotifications/v1/subscriptions
-
POST
: 新しいサブスクリプションを作成します。 -
GET
: サブスクリプションの一覧を取得します。 -
DELETE
: すべてのサブスクリプションを削除します
-
/api/ocloudNotifications/v1/subscriptions/{subscription_id}
-
GET
: 指定されたサブスクリプション ID の詳細を返します。 -
DELETE
: 指定されたサブスクリプション ID に関連付けられたサブスクリプションを削除します
-
/api/ocloudNotifications/v1/health
-
GET
:ocloudNotifications
API の正常性ステータスを返します
-
api/ocloudNotifications/v1/publishers
-
GET
: クラスターノードのos-clock-sync-state
、ptp-clock-class-change
、lock-state
、およびgnss-sync-status
メッセージの配列を返します。
-
/api/ocloudnotifications/v1/{resource_address}/CurrentState
-
GET
:os-clock-sync-state
、ptp-clock-class-change
、lock-state
、またはgnss-state-change
イベントタイプの現在の状態を返します。
-
9089
は、アプリケーション Pod にデプロイされた cloud-event-consumer
コンテナーのデフォルトポートです。必要に応じて、DU アプリケーションに別のポートを設定できます。
17.3.6.1. PTP イベント REST API リファレンス
PTP イベント通知 REST API を使用して、親ノードで生成された PTP イベントにクラスターアプリケーションをサブスクライブします。
17.3.6.1.1. api/ocloudNotifications/v1/subscriptions
HTTP メソッド
GET api/ocloudNotifications/v1/subscriptions
説明
サブスクリプションのリストを返します。サブスクリプションが存在する場合は、サブスクリプションの一覧とともに 200 OK
のステータスコードが返されます。
API 応答の例
[ { "id": "75b1ad8f-c807-4c23-acf5-56f4b7ee3826", "endpointUri": "http://localhost:9089/event", "uriLocation": "http://localhost:8089/api/ocloudNotifications/v1/subscriptions/75b1ad8f-c807-4c23-acf5-56f4b7ee3826", "resource": "/cluster/node/compute-1.example.com/ptp" } ]
HTTP メソッド
POST api/ocloudNotifications/v1/subscriptions
説明
新しいサブスクリプションを作成します。サブスクリプションが正常に作成されるか、すでに存在する場合は、201 Created
ステータスコードが返されます。
パラメーター | 型 |
---|---|
subscription | data |
ペイロードの例
{ "uriLocation": "http://localhost:8089/api/ocloudNotifications/v1/subscriptions", "resource": "/cluster/node/compute-1.example.com/ptp" }
HTTP メソッド
DELETE api/ocloudNotifications/v1/subscriptions
説明
すべてのサブスクリプションを削除します。
API 応答の例
{ "status": "deleted all subscriptions" }
17.3.6.1.2. api/ocloudNotifications/v1/subscriptions/{subscription_id}
HTTP メソッド
GET api/ocloudNotifications/v1/subscriptions/{subscription_id}
説明
ID が subscription_id
のサブスクリプションの詳細を返します。
パラメーター | 型 |
---|---|
| string |
API 応答の例
{ "id":"48210fb3-45be-4ce0-aa9b-41a0e58730ab", "endpointUri": "http://localhost:9089/event", "uriLocation":"http://localhost:8089/api/ocloudNotifications/v1/subscriptions/48210fb3-45be-4ce0-aa9b-41a0e58730ab", "resource":"/cluster/node/compute-1.example.com/ptp" }
HTTP メソッド
DELETE api/ocloudNotifications/v1/subscriptions/{subscription_id}
説明
ID subscription_id
のサブスクリプションを削除します。
パラメーター | 型 |
---|---|
| string |
API 応答の例
{ "status": "OK" }
17.3.6.1.3. api/ocloudNotifications/v1/health
HTTP メソッド
GET api/ocloudNotifications/v1/health/
説明
ocloudNotifications
REST API の正常性ステータスを返します。
API 応答の例
OK
17.3.6.1.4. api/ocloudNotifications/v1/publishers
HTTP メソッド
GET api/ocloudNotifications/v1/publishers
説明
クラスターノードの os-clock-sync-state
、ptp-clock-class-change
、lock-state
、および gnss-sync-status
の詳細の配列を返します。関連する機器の状態が変化すると、システムは通知を生成します。
-
os-clock-sync-state
通知は、ホストオペレーティングシステムのクロック同期状態を示します。LOCKED
またはFREERUN
状態になります。 -
ptp-clock-class-change
通知は、PTP クロッククラスの現在の状態を示します。 -
lock-state
通知は、PTP 機器のロック状態の現在のステータスを示します。LOCKED
、HOLDOVER
、またはFREERUN
状態になります。 -
gnss-sync-status
通知は、外部 GNSS クロック信号に関する GPS 同期状態を示します。LOCKED
またはFREERUN
状態になります。
機器の同期ステータスのサブスクリプションを組み合わせて使用すると、システム全体の同期状態の詳細なビューを提供できます。
API 応答の例
[ { "id": "0fa415ae-a3cf-4299-876a-589438bacf75", "endpointUri": "http://localhost:9085/api/ocloudNotifications/v1/dummy", "uriLocation": "http://localhost:9085/api/ocloudNotifications/v1/publishers/0fa415ae-a3cf-4299-876a-589438bacf75", "resource": "/cluster/node/compute-1.example.com/sync/sync-status/os-clock-sync-state" }, { "id": "28cd82df-8436-4f50-bbd9-7a9742828a71", "endpointUri": "http://localhost:9085/api/ocloudNotifications/v1/dummy", "uriLocation": "http://localhost:9085/api/ocloudNotifications/v1/publishers/28cd82df-8436-4f50-bbd9-7a9742828a71", "resource": "/cluster/node/compute-1.example.com/sync/ptp-status/ptp-clock-class-change" }, { "id": "44aa480d-7347-48b0-a5b0-e0af01fa9677", "endpointUri": "http://localhost:9085/api/ocloudNotifications/v1/dummy", "uriLocation": "http://localhost:9085/api/ocloudNotifications/v1/publishers/44aa480d-7347-48b0-a5b0-e0af01fa9677", "resource": "/cluster/node/compute-1.example.com/sync/ptp-status/lock-state" }, { "id": "778da345d-4567-67b0-a43f0-rty885a456", "endpointUri": "http://localhost:9085/api/ocloudNotifications/v1/dummy", "uriLocation": "http://localhost:9085/api/ocloudNotifications/v1/publishers/778da345d-4567-67b0-a43f0-rty885a456", "resource": "/cluster/node/compute-1.example.com/sync/gnss-status/gnss-sync-status" } ]
cloud-event-proxy
コンテナーのログには、os-clock-sync-state
、ptp-clock-class-change
、lock-state
、および gnss-sync-status
イベントが含まれています。以下に例を示します。
$ oc logs -f linuxptp-daemon-cvgr6 -n openshift-ptp -c cloud-event-proxy
os-clock-sync-state イベントの例
{ "id":"c8a784d1-5f4a-4c16-9a81-a3b4313affe5", "type":"event.sync.sync-status.os-clock-sync-state-change", "source":"/cluster/compute-1.example.com/ptp/CLOCK_REALTIME", "dataContentType":"application/json", "time":"2022-05-06T15:31:23.906277159Z", "data":{ "version":"v1", "values":[ { "resource":"/sync/sync-status/os-clock-sync-state", "dataType":"notification", "valueType":"enumeration", "value":"LOCKED" }, { "resource":"/sync/sync-status/os-clock-sync-state", "dataType":"metric", "valueType":"decimal64.3", "value":"-53" } ] } }
ptp-clock-class-change イベントの例
{ "id":"69eddb52-1650-4e56-b325-86d44688d02b", "type":"event.sync.ptp-status.ptp-clock-class-change", "source":"/cluster/compute-1.example.com/ptp/ens2fx/master", "dataContentType":"application/json", "time":"2022-05-06T15:31:23.147100033Z", "data":{ "version":"v1", "values":[ { "resource":"/sync/ptp-status/ptp-clock-class-change", "dataType":"metric", "valueType":"decimal64.3", "value":"135" } ] } }
lock-state イベントの例
{ "id":"305ec18b-1472-47b3-aadd-8f37933249a9", "type":"event.sync.ptp-status.ptp-state-change", "source":"/cluster/compute-1.example.com/ptp/ens2fx/master", "dataContentType":"application/json", "time":"2022-05-06T15:31:23.467684081Z", "data":{ "version":"v1", "values":[ { "resource":"/sync/ptp-status/lock-state", "dataType":"notification", "valueType":"enumeration", "value":"LOCKED" }, { "resource":"/sync/ptp-status/lock-state", "dataType":"metric", "valueType":"decimal64.3", "value":"62" } ] } }
gnss-sync-status イベントの例
{ "id": "435e1f2a-6854-4555-8520-767325c087d7", "type": "event.sync.gnss-status.gnss-state-change", "source": "/cluster/node/compute-1.example.com/sync/gnss-status/gnss-sync-status", "dataContentType": "application/json", "time": "2023-09-27T19:35:33.42347206Z", "data": { "version": "v1", "values": [ { "resource": "/cluster/node/compute-1.example.com/ens2fx/master", "dataType": "notification", "valueType": "enumeration", "value": "LOCKED" }, { "resource": "/cluster/node/compute-1.example.com/ens2fx/master", "dataType": "metric", "valueType": "decimal64.3", "value": "5" } ] } }
17.3.6.1.5. api/ocloudNotifications/v1/{resource_address}/CurrentState
HTTP メソッド
GET api/ocloudNotifications/v1/cluster/node/<node_name>/sync/ptp-status/lock-state/CurrentState
GET api/ocloudNotifications/v1/cluster/node/<node_name>/sync/sync-status/os-clock-sync-state/CurrentState
GET api/ocloudNotifications/v1/cluster/node/<node_name>/sync/ptp-status/ptp-clock-class-change/CurrentState
説明
クラスターノードの os-clock-sync-state
、ptp-clock-class-change
、lock-state
イベントの現在の状態を返すように CurrentState
API エンドポイントを設定します。
-
os-clock-sync-state
通知は、ホストオペレーティングシステムのクロック同期状態を示します。LOCKED
またはFREERUN
状態になります。 -
ptp-clock-class-change
通知は、PTP クロッククラスの現在の状態を示します。 -
lock-state
通知は、PTP 機器のロック状態の現在のステータスを示します。LOCKED
、HOLDOVER
、またはFREERUN
状態になります。
パラメーター | 型 |
---|---|
| string |
ロック状態 API レスポンスの例
{ "id": "c1ac3aa5-1195-4786-84f8-da0ea4462921", "type": "event.sync.ptp-status.ptp-state-change", "source": "/cluster/node/compute-1.example.com/sync/ptp-status/lock-state", "dataContentType": "application/json", "time": "2023-01-10T02:41:57.094981478Z", "data": { "version": "v1", "values": [ { "resource": "/cluster/node/compute-1.example.com/ens5fx/master", "dataType": "notification", "valueType": "enumeration", "value": "LOCKED" }, { "resource": "/cluster/node/compute-1.example.com/ens5fx/master", "dataType": "metric", "valueType": "decimal64.3", "value": "29" } ] } }
os-clock-sync-state API レスポンスの例
{ "specversion": "0.3", "id": "4f51fe99-feaa-4e66-9112-66c5c9b9afcb", "source": "/cluster/node/compute-1.example.com/sync/sync-status/os-clock-sync-state", "type": "event.sync.sync-status.os-clock-sync-state-change", "subject": "/cluster/node/compute-1.example.com/sync/sync-status/os-clock-sync-state", "datacontenttype": "application/json", "time": "2022-11-29T17:44:22.202Z", "data": { "version": "v1", "values": [ { "resource": "/cluster/node/compute-1.example.com/CLOCK_REALTIME", "dataType": "notification", "valueType": "enumeration", "value": "LOCKED" }, { "resource": "/cluster/node/compute-1.example.com/CLOCK_REALTIME", "dataType": "metric", "valueType": "decimal64.3", "value": "27" } ] } }
ptp-clock-class-change API レスポンスの例
{ "id": "064c9e67-5ad4-4afb-98ff-189c6aa9c205", "type": "event.sync.ptp-status.ptp-clock-class-change", "source": "/cluster/node/compute-1.example.com/sync/ptp-status/ptp-clock-class-change", "dataContentType": "application/json", "time": "2023-01-10T02:41:56.785673989Z", "data": { "version": "v1", "values": [ { "resource": "/cluster/node/compute-1.example.com/ens5fx/master", "dataType": "metric", "valueType": "decimal64.3", "value": "165" } ] } }
17.3.7. PTP 高速イベントメトリックのモニタリング
linuxptp-daemon
が実行されているクラスターノードから PTP 高速イベントメトリクスを監視できます。事前に設定された自己更新型の Prometheus モニタリングスタックを使用して、OpenShift Container Platform Web コンソールで PTP 高速イベントメトリクスをモニタリングできます。
前提条件
-
OpenShift Container Platform CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。 - PTP 対応ハードウェアを搭載したノードに PTP Operator をインストールし、設定します。
手順
次のコマンドを実行して、ノードのデバッグ Pod を起動します。
$ oc debug node/<node_name>
linuxptp-daemon
コンテナーによって公開された PTP メトリックを確認します。たとえば、以下のコマンドを実行します。sh-4.4# curl http://localhost:9091/metrics
出力例
# HELP cne_api_events_published Metric to get number of events published by the rest api # TYPE cne_api_events_published gauge cne_api_events_published{address="/cluster/node/compute-1.example.com/sync/gnss-status/gnss-sync-status",status="success"} 1 cne_api_events_published{address="/cluster/node/compute-1.example.com/sync/ptp-status/lock-state",status="success"} 94 cne_api_events_published{address="/cluster/node/compute-1.example.com/sync/ptp-status/ptp-clock-class-change",status="success"} 18 cne_api_events_published{address="/cluster/node/compute-1.example.com/sync/sync-status/os-clock-sync-state",status="success"} 27
-
OpenShift Container Platform Web コンソールで PTP イベントを表示するには、クエリーする PTP メトリクスの名前 (例:
openshift_ptp_offset_ns
) をコピーします。 -
OpenShift Container Platform Web コンソールで、Observe
Metrics をクリックします。 - PTP メトリクスを Expression フィールドに貼り付け、Run queries をクリックします。
関連情報
17.3.8. PTP 高速イベントメトリクスのリファレンス
次の表は、linuxptp-daemon
サービスが実行されているクラスターノードから利用できる PTP 高速イベントメトリクスを説明します。
メトリクス | 説明 | 例 |
---|---|---|
|
インターフェイスの PTP クロッククラスを返します。PTP クロッククラスの可能な値は、6 ( |
|
|
インターフェイスの現在の PTP クロック状態を返します。PTP クロック状態の可能な値は、 |
|
| タイミングパケットを送信するプライマリークロックとタイミングパケットを受信するセカンダリークロックの間の遅延をナノ秒単位で返します。 |
|
|
異なる NIC に複数のタイムソースがある場合に、高可用性システムクロックの現在のステータスを返します。可能な値は 0 ( |
|
|
2 つの PTP クロック間の周波数調整をナノ秒単位で返します。たとえば、アップストリームクロックと NIC の間、システムクロックと NIC の間、または PTP ハードウェアクロック ( |
|
|
インターフェイスに設定された PTP クロックの役割を返します。可能な値は、0 ( |
|
|
2 つのクロックまたはインターフェイス間の最大オフセットをナノ秒単位で返します。たとえば、アップストリーム GNSS クロックと NIC ( |
|
| DPLL クロックまたは GNSS クロックソースと NIC ハードウェアクロック間のオフセットをナノ秒単位で返します。 |
|
|
|
|
| PTP プロセスが実行中かどうかを示すステータスコードを返します。 |
|
|
|
|
T-GM が有効な場合のみ PTP 高速イベントメトリクス
次の表は、PTP グランドマスタークロック (T-GM) が有効な場合にのみ使用できる PTP 高速イベントメトリクスを示しています。
メトリクス | 説明 | 例 |
---|---|---|
|
NIC の Digital Phase-Locked Loop (DPLL) 周波数の現在のステータスを返します。可能な値は、-1 ( |
|
|
NMEA 接続の現在のステータスを返します。NMEA は、1PPS NIC 接続に使用されるプロトコルです。可能な値は 0 ( |
|
|
NIC の DPLL 位相のステータスを返します。可能な値は、-1 ( |
|
|
NIC 1PPS 接続の現在のステータスを返します。1PPS 接続は、接続された NIC 間のタイミングを同期するために使用します。可能な値は 0 ( |
|
|
Global Navigation Satellite System (GNSS) 接続の現在のステータスを返します。GNSS は、衛星ベースの測位、ナビゲーション、およびタイミングサービスを世界中に提供します。可能な値は、0 ( |
|