8.2.13.2. シングルノード OpenShift 上で GNSS フェイルオーバーを備えた PTP グランドマスター設定を作成する


この手順では、Intel E810 Westport Channel NIC を PTP グランドマスタークロックとして使用し、GNSS から NTP へのフェイルオーバー機能を備えた、シングルノードの OpenShift 上に T-GM(Telecom Grandmaster) クロックを設定します。

前提条件

  • 実稼働環境で T-GM クロックを使用する場合は、ベアメタル設定のシングルノード OpenShift ホストに Intel E810 Westport Channel NIC をインストールしてください。
  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとしてログインしている。
  • PTP Operator をインストールします。

手順

  1. 以下のコマンドを実行して、PTPOperator のインストールを確認してください。

    $ oc get pods -n openshift-ptp -o wide

    出力は以下のようになり、PTP Operator pod と単一の linuxptp-daemon pod がリスト表示されます。

    NAME                            READY   STATUS    RESTARTS   AGE   IP              NODE                   NOMINATED NODE   READINESS GATES
    linuxptp-daemon-xz8km           2/2     Running   0          15m   192.168.1.50    mysno-sno.demo.lab     <none>           <none>
    ptp-operator-75c77dbf86-xm9kl   1/1     Running   0          20m   10.129.0.45     mysno-sno.demo.lab     <none>           <none>
    • ptp-operator-*: PTP Operator Pod (クラスター内のインスタンスは 1 つ)。
    • linuxptp-daemon-*: linuxptp デーモン Pod。シングルノードの OpenShift では、マスターノード上で実行されるデーモン Pod は 1 つだけです。デーモン Pod の READY 列に 2/2 と 表示されていれば、両方のコンテナー (linuxptp-daemon-containerkube-rbac-proxy) が実行されていることを示しています。
  2. 以下のコマンドを実行して、どのネットワークインターフェイスがハードウェアタイムスタンプをサポートしているかを確認してください。

    $ oc get NodePtpDevice -n openshift-ptp -o yaml

    出力は以下の例のようになり、PTP 対応ネットワークインターフェイスを備えたシングルノードの OpenShift ノードの NodePtpDevice リソースを示しています。

    apiVersion: v1
    items:
    - apiVersion: ptp.openshift.io/v1
      kind: NodePtpDevice
      metadata:
        name: mysno-sno.demo.lab
        namespace: openshift-ptp
      spec: {}
      status:
        devices:
        - name: ens7f0
          hwConfig:
            phcIndex: 0
        - name: ens7f1
          hwConfig:
            phcIndex: 1
    kind: List
    metadata:
      resourceVersion: ""

    この例では出力されています。

    • ens7f0ens7f1 は PTP 対応インターフェイス (Intel E810 NIC ポート) です。
    • phcIndex は PTP ハードウェアクロック番号を示します (/dev/ptp0/dev/ptp1 などにマッピングされます)。

      注記

      シングルノードの OpenShift クラスターでは、単一のマスターノードに対して 1 つの NodePtpDevice リソースのみが表示されます。

  3. PTP プロファイルは、マッチングにノードラベルを使用します。マシン設定プール (MCP) を確認し、マスター MCP を検証するには、次のコマンドを実行します。

    $ oc get mcp

    出力は以下の例のようになります。

    NAME     CONFIG                  UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE
    master   rendered-master-a1b1*   True      False      False      1              1                   1                   0                    45d
    worker   rendered-worker-f6e5*   True      False      False      0              0                   0                   0                    45d
    注記

    CONFIG 列には、レンダリングされた MachineConfig の切り捨てられたハッシュ値が表示されます。実際の出力では、これは rendered-master-a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 のような 64 文字のハッシュになります。

    シングルノードの OpenShift クラスターでは、マスター MCP の MACHINECOUNT は 1(シングルノード) を示し、ワーカー MCP の MACHINECOUNT は 0 を示します。PTP プロファイルは マスター ノードラベルを対象とする必要があります。

  4. T-GM クロックを GNSS から NTP へのフェイルオーバーで設定する PtpConfig カスタムリソース (CR) を作成します。以下の YAML 設定を ptp-config-gnss-ntp-failover-sno.yaml という名前のファイルに保存してください。

    # The grandmaster profile is provided for testing only
    # It is not installed on production clusters
    apiVersion: ptp.openshift.io/v1
    kind: PtpConfig
    metadata:
      name: grandmaster
      namespace: openshift-ptp
      annotations:
        ran.openshift.io/ztp-deploy-wave: "10"
    spec:
      profile:
      - name: "grandmaster"
        ptp4lOpts: "-2 --summary_interval -4"
        phc2sysOpts: -r -u 0 -m -N 8 -R 16 -s ens7f0 -n 24
        ptpSchedulingPolicy: SCHED_FIFO
        ptpSchedulingPriority: 10
        ptpSettings:
          logReduce: "true"
    
        # --- FAILOVER CONFIGURATION ---
        # Holdover time: 14400 seconds (4 hours) before switching to NTP
        ts2phcOpts: "--ts2phc.holdover 14400"
    
        # Configure Chronyd (Secondary Time Source)
        chronydOpts: "-d"
        chronydConf: |
          server time.nist.gov iburst
          makestep 1.0 -1
          pidfile /var/run/chronyd.pid
    
        plugins:
          # E810 Hardware-Specific Configuration
          e810:
            enableDefaultConfig: false
            settings:
              LocalHoldoverTimeout: 14400
              LocalMaxHoldoverOffSet: 1500
              MaxInSpecOffset: 1500
            pins:
              # Syntax guide:
              # - The 1st number in each pair must be one of:
              #    0 - Disabled
              #    1 - RX
              #    2 - TX
              # - The 2nd number in each pair must match the channel number
              ens7f0:
                SMA1: 0 1
                SMA2: 0 2
                U.FL1: 0 1
                U.FL2: 0 2
            ublxCmds:
              - args: #ubxtool -P 29.20 -z CFG-HW-ANT_CFG_VOLTCTRL,1
                  - "-P"
                  - "29.20"
                  - "-z"
                  - "CFG-HW-ANT_CFG_VOLTCTRL,1"
                reportOutput: false
              - args: #ubxtool -P 29.20 -e GPS
                  - "-P"
                  - "29.20"
                  - "-e"
                  - "GPS"
                reportOutput: false
              - args: #ubxtool -P 29.20 -d Galileo
                  - "-P"
                  - "29.20"
                  - "-d"
                  - "Galileo"
                reportOutput: false
              - args: #ubxtool -P 29.20 -d GLONASS
                  - "-P"
                  - "29.20"
                  - "-d"
                  - "GLONASS"
                reportOutput: false
              - args: #ubxtool -P 29.20 -d BeiDou
                  - "-P"
                  - "29.20"
                  - "-d"
                  - "BeiDou"
                reportOutput: false
              - args: #ubxtool -P 29.20 -d SBAS
                  - "-P"
                  - "29.20"
                  - "-d"
                  - "SBAS"
                reportOutput: false
              - args: #ubxtool -P 29.20 -t -w 5 -v 1 -e SURVEYIN,600,50000
                  - "-P"
                  - "29.20"
                  - "-t"
                  - "-w"
                  - "5"
                  - "-v"
                  - "1"
                  - "-e"
                  - "SURVEYIN,600,50000"
                reportOutput: true
              - args: #ubxtool -P 29.20 -p MON-HW
                  - "-P"
                  - "29.20"
                  - "-p"
                  - "MON-HW"
                reportOutput: true
              - args: #ubxtool -P 29.20 -p CFG-MSG,1,38,248
                  - "-P"
                  - "29.20"
                  - "-p"
                  - "CFG-MSG,1,38,248"
                reportOutput: true
    
          # NTP Failover Plugin
          ntpfailover:
            gnssFailover: true
    
        # --- GNSS (ts2phc) CONFIGURATION (Primary Source) ---
        ts2phcConf: |
          [nmea]
          ts2phc.master 1
          [global]
          use_syslog  0
          verbose 1
          logging_level 7
          ts2phc.pulsewidth 100000000
          ts2phc.nmea_serialport /dev/ttyGNSS_1700_0
          leapfile  /usr/share/zoneinfo/leap-seconds.list
          [ens7f0]
          ts2phc.extts_polarity rising
          ts2phc.extts_correction 0
    
        # --- PTP4L CONFIGURATION (Grandmaster Role) ---
        ptp4lConf: |
          [ens7f0]
          masterOnly 1
          [ens7f1]
          masterOnly 1
          [global]
          #
          # Default Data Set
          #
          twoStepFlag 1
          priority1 128
          priority2 128
          domainNumber 24
          #utc_offset 37
          clockClass 6
          clockAccuracy 0x27
          offsetScaledLogVariance 0xFFFF
          free_running 0
          freq_est_interval 1
          dscp_event 0
          dscp_general 0
          dataset_comparison G.8275.x
          G.8275.defaultDS.localPriority 128
          #
          # Port Data Set
          #
          logAnnounceInterval -3
          logSyncInterval -4
          logMinDelayReqInterval -4
          logMinPdelayReqInterval 0
          announceReceiptTimeout 3
          syncReceiptTimeout 0
          delayAsymmetry 0
          fault_reset_interval -4
          neighborPropDelayThresh 20000000
          masterOnly 0
          G.8275.portDS.localPriority 128
          #
          # Run time options
          #
          assume_two_step 0
          logging_level 6
          path_trace_enabled 0
          follow_up_info 0
          hybrid_e2e 0
          inhibit_multicast_service 0
          net_sync_monitor 0
          tc_spanning_tree 0
          tx_timestamp_timeout 50
          unicast_listen 0
          unicast_master_table 0
          unicast_req_duration 3600
          use_syslog 1
          verbose 0
          summary_interval -4
          kernel_leap 1
          check_fup_sync 0
          clock_class_threshold 7
          #
          # Servo Options
          #
          pi_proportional_const 0.0
          pi_integral_const 0.0
          pi_proportional_scale 0.0
          pi_proportional_exponent -0.3
          pi_proportional_norm_max 0.7
          pi_integral_scale 0.0
          pi_integral_exponent 0.4
          pi_integral_norm_max 0.3
          step_threshold 2.0
          first_step_threshold 0.00002
          clock_servo pi
          sanity_freq_limit  200000000
          ntpshm_segment 0
          #
          # Transport options
          #
          transportSpecific 0x0
          ptp_dst_mac 01:1B:19:00:00:00
          p2p_dst_mac 01:80:C2:00:00:0E
          udp_ttl 1
          udp6_scope 0x0E
          uds_address /var/run/ptp4l
          #
          # Default interface options
          #
          clock_type BC
          network_transport L2
          delay_mechanism E2E
          time_stamping hardware
          tsproc_mode filter
          delay_filter moving_median
          delay_filter_length 10
          egressLatency 0
          ingressLatency 0
          boundary_clock_jbod 0
          #
          # Clock description
          #
          productDescription ;;
          revisionData ;;
          manufacturerIdentity 00:00:00
          userDescription ;
          timeSource 0x20
        ptpClockThreshold:
          holdOverTimeout: 5
          maxOffsetThreshold: 100
          minOffsetThreshold: -100
      recommend:
      - profile: "grandmaster"
        priority: 4
        match:
        - nodeLabel: node-role.kubernetes.io/master
    重要

    例として挙げたインターフェイス名 (ens7f0ens7f1) を、手順 2 で見つけた実際の E810 NIC インターフェイス名に置き換えてください。一般的な E810 インターフェイスの命名パターンには、ens7f0ens8f0eth0enp2s0f0 などがあります。正確な名称は、システム BIOS の設定と Linux ネットワークデバイスの命名規則によって異なります。また、/dev/ttyGNSS_1700_0 を実際の GNSS シリアルポートデバイスのパスに置き換えてください。nodeLabelnode-role.kubernetes.io/master に設定されており、すべての役割を担うシングルノードの OpenShift マスターノードを対象としています。

    設定には以下のコンポーネントが含まれます。

    • PTP4L オプション:

      • -2: PTP バージョン 2 を使用する
      • --summary_interval -4: 2^(-4) = 0.0625 秒ごとにログサマリーを出力します
    • PHC2SYS のオプション:

      • -r: PTP ハードウェアクロックからシステムクロックを同期する
      • -u 0: 更新レート乗数
      • -m: メッセージを標準出力に表示する
      • -N 8: ptp4l のドメイン番号
      • -R 16: 更新レート
      • -s ens7f0: ソースインターフェイス (E810 インターフェイス名に置き換えてください)
      • -n 24: ドメイン番号
    • フェイルオーバー設定:

      • ts2phcOpts --ts2phc.holdover 14400: NTP に切り替える前に 4 時間ホールドオーバーします
      • chronydConf: フェイルオーバー用の NTP サーバー設定 。time.nist.gov を希望する NTP サーバーに置き換えてください。
      • ntpfailover プラグイン: gnssFailover: true で GNSS から NTP への自動切り替えを有効にします。
    • E810 プラグインの設定:

      • LocalHoldoverTimeout: 14400: E810 ハードウェアホールドオーバータイムアウト (4 時間)
      • ピン:E810 の物理ピン (U.FL2、SMA1、SMA2、U.FL1) における 1PPS 入力の設定
      • ublxCmds:u-blox GNSS レシーバーを設定するためのコマンド (GPS の有効化、他の衛星システムの無効化、測量モードの設定)
    • GNSS (ts2phc) 設定:

      • ts2phc.nmea_serialport/dev/ttyGNSS_1700_0: GNSS シリアルポートデバイスパス (実際の GNSS デバイスに置き換えてください)
      • ts2phc.extts_polarity rising: 立ち上がりエッジで 1PPS 信号
      • ts2phc.pulsewidth 100000000: 1PPS パルス幅 (ナノ秒)
    • PTP4L の設定:

      • masterOnly 1: インターフェイスは PTP マスターとしてのみ機能します
      • clockClass 6:GPS 同期品質レベル
      • ドメイン番号 24:PTP ドメイン
      • clock_type BC: 境界クロックモード
      • time_stamping hardware: E810 NIC のハードウェアタイムスタンプを使用する
  5. 以下のコマンドを実行して、PtpConfig CR を適用します。

    $ oc apply -f ptp-config-gnss-ntp-failover-sno.yaml

    出力は以下の例のようになります。

    ptpconfig.ptp.openshift.io/grandmaster created

検証

  1. PTP デーモンは 30 秒ごとにプロファイルの更新を確認します。約 30 秒待ってから、以下のコマンドを実行して確認してください。

    $ oc get ptpconfig -n openshift-ptp

    出力は以下の例のようになります。

    NAME           AGE
    grandmaster    2m
  2. プロファイルが適用されているかどうか、NodePtpDevice を確認してください。まず、シングルノードの OpenShift ノード名を取得します。

    $ oc get nodes

    出力は以下の例のようになります。

    NAME                 STATUS   ROLES                         AGE     VERSION
    mysno-sno.demo.lab   Ready    control-plane,master,worker   4h19m   v1.34.1

    次に、ノード名を使用して NodePtpDevice を記述します。

    $ oc describe nodeptpdevice mysno-sno.demo.lab -n openshift-ptp
  3. デーモンのログを監視して、プロファイルがロードされているかどうかを確認してください。まず、デーモン Pod 名を取得します。

    $ oc get pods -n openshift-ptp | grep linuxptp-daemon

    出力には、単一の linuxptp-daemonPod が表示されます。

    linuxptp-daemon-xz8km           2/2     Running   0          15m

    次に、Pod 名を使用してログを確認します。

    $ oc logs -n openshift-ptp linuxptp-daemon-xz8km -c linuxptp-daemon-container --tail=100

    ログにおける成功指標は以下のとおりです。

    • プロファイルの読み込み - プロファイルを読み込んでいます
    • applyNodePTPProfiles 内 - プロファイルが適用されています
    • ノードエラーに対して PTP プロファイルが存在しません
  4. 以下のコマンドを実行して、chronyd の 状態を確認し、NTP がセカンダリー時刻ソースとして実行されていることを確認してください。

    $ oc logs -n openshift-ptp linuxptp-daemon-xz8km -c linuxptp-daemon-container | grep chronyd

    出力は以下の例のようになります。

    chronyd version 4.5 starting
    Added source ID#0000000001 (time.nist.gov)
  5. 以下のコマンドを実行して、GNSS/gpsd を確認してください。

    $ oc logs -n openshift-ptp linuxptp-daemon-xz8km -c linuxptp-daemon-container | grep gpsd

    GNSS が正常に機能している場合、出力には以下のように表示されます。

    • gpsd が正常に起動しました
    • そのようなファイルまたはディレクトリーは存在しません というエラーは存在しません。
  6. 以下のコマンドを実行して、ts2phc (GNSS 同期) の状態を確認してください。

    $ oc logs -n openshift-ptp linuxptp-daemon-xz8km -c linuxptp-daemon-container | grep ts2phc
  7. 以下のコマンドを実行して、phc2sys (システムクロック同期) の状態を確認してください。

    $ oc logs -n openshift-ptp linuxptp-daemon-xz8km -c linuxptp-daemon-container | grep phc2sys

    出力には、phc2sys の同期ステータスメッセージが表示されます。

    phc2sys[xxx]: CLOCK_REALTIME phc offset -17 s2 freq -13865 delay 2305
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る