From 3b8299cf2cf43a206595c5a1fb3b4e84b063816b Mon Sep 17 00:00:00 2001 From: Ron Stone Date: Fri, 18 Mar 2022 14:56:18 -0400 Subject: [PATCH] PTP GNSS and SyncE Support (dsR6*) Updates/additions to: -System Config PTP section -Guest Integration -Admin Tasks -Updates and Upgrades Additional examples for T-BC Incorporated patchset 3 review comments. Added Limitations section. Integrated patchset 5 comments. Remove PTP Instance Removal - moved to RNs. *Do not pick 100.019 alarm update to r6 Story: 2009130 Signed-off-by: Ron Stone Change-Id: Ibdf449fe1d7282302d9be6d90e1c1b6dd70456b4 --- .../index-admintasks-kub-ebc55fefc368.rst | 11 + .../kubernetes/install-ptp-notifications.rst | 61 +++ .../override-default-application-values.rst | 8 +- .../kubernetes/remove-ptp-notifications.rst | 0 .../kubernetes/100-series-alarm-messages.rst | 28 +- .../index-guest-kub-5c89ec07e141.rst | 3 - .../kubernetes/install-ptp-notifications.rst | 131 ------- ...dvanced-ptp-configuration-334a08dc50fb.rst | 11 + .../configuring-ptp-service-using-horizon.rst | 114 ------ .../configuring-ptp-service-using-the-cli.rst | 175 +++------ .../ptp-instance-dual-nic-deployment-gnss.PNG | Bin 0 -> 56910 bytes .../figures/ptp-t-bc-configuration.png | Bin 0 -> 39263 bytes .../gnss-and-synce-support-62004dc97f3e.rst | 111 ++++++ .../index-sysconf-kub-78f0e1e9ca5a.rst | 21 +- ...e-specific-considerations-d9d9509c79dd.rst | 122 ++++++ .../ptp-instance-examples-517dce312f56.rst | 368 ++++++++++++++++++ ...-instance-troubleshooting-7a7c576ee57a.rst | 127 ++++++ .../ptp-interfaces-df73e9b43677.rst | 19 + .../ptp-introduction-d981dd710bda.rst | 98 +++++ .../ptp-limitations-64338c74b415.rst | 22 ++ ...remove-ptp-configurations-4885c027dfa5.rst | 34 ++ .../index-updates-kub-03d4d10fa0be.rst | 2 + 22 files changed, 1098 insertions(+), 368 deletions(-) create mode 100644 doc/source/admintasks/kubernetes/install-ptp-notifications.rst rename doc/source/{guest_integration => admintasks}/kubernetes/override-default-application-values.rst (91%) rename doc/source/{guest_integration => admintasks}/kubernetes/remove-ptp-notifications.rst (100%) delete mode 100644 doc/source/guest_integration/kubernetes/install-ptp-notifications.rst create mode 100644 doc/source/system_configuration/kubernetes/advanced-ptp-configuration-334a08dc50fb.rst delete mode 100644 doc/source/system_configuration/kubernetes/configuring-ptp-service-using-horizon.rst create mode 100644 doc/source/system_configuration/kubernetes/figures/ptp-instance-dual-nic-deployment-gnss.PNG create mode 100644 doc/source/system_configuration/kubernetes/figures/ptp-t-bc-configuration.png create mode 100644 doc/source/system_configuration/kubernetes/gnss-and-synce-support-62004dc97f3e.rst create mode 100644 doc/source/system_configuration/kubernetes/instance-specific-considerations-d9d9509c79dd.rst create mode 100644 doc/source/system_configuration/kubernetes/ptp-instance-examples-517dce312f56.rst create mode 100644 doc/source/system_configuration/kubernetes/ptp-instance-troubleshooting-7a7c576ee57a.rst create mode 100644 doc/source/system_configuration/kubernetes/ptp-interfaces-df73e9b43677.rst create mode 100644 doc/source/system_configuration/kubernetes/ptp-introduction-d981dd710bda.rst create mode 100644 doc/source/system_configuration/kubernetes/ptp-limitations-64338c74b415.rst create mode 100644 doc/source/system_configuration/kubernetes/remove-ptp-configurations-4885c027dfa5.rst diff --git a/doc/source/admintasks/kubernetes/index-admintasks-kub-ebc55fefc368.rst b/doc/source/admintasks/kubernetes/index-admintasks-kub-ebc55fefc368.rst index a90114326..af95ad7fb 100644 --- a/doc/source/admintasks/kubernetes/index-admintasks-kub-ebc55fefc368.rst +++ b/doc/source/admintasks/kubernetes/index-admintasks-kub-ebc55fefc368.rst @@ -60,3 +60,14 @@ Metrics Server kubernetes-admin-tutorials-metrics-server +----------------- +PTP Notifications +----------------- + +.. toctree:: + :maxdepth: 1 + + install-ptp-notifications + remove-ptp-notifications + override-default-application-values + diff --git a/doc/source/admintasks/kubernetes/install-ptp-notifications.rst b/doc/source/admintasks/kubernetes/install-ptp-notifications.rst new file mode 100644 index 000000000..9fa68cf77 --- /dev/null +++ b/doc/source/admintasks/kubernetes/install-ptp-notifications.rst @@ -0,0 +1,61 @@ + +.. xqd1614091832213 +.. _install-ptp-notifications: + +========================= +Install PTP Notifications +========================= + +|PTP| notification is packaged as a system application and is managed +using the :command:`system application` and :command:`system-helm-override` +commands. + +.. rubric:: |context| + +|prod| provides the capability for application\(s\) to subscribe to +asynchronous |PTP| status notifications and pull for the |PTP| state on demand. + +.. xbooklink :ref:`|prod-long| System Configuration + `: + +.. rubric:: |proc| + +You must provide helm override values indicating the ``ptp4l`` and ``phc2sys`` +instances being tracked by ``ptp-notification``. + +You must also remove your existing ``ptp-notification`` application and +upload/apply the new version. Because multiple ``ptp4l`` instances can be +supported on a node, you must specify which instance ``ptp-notification`` is +tracking. + + +For example: + + +#. Upload ``ptp-notification``. + + .. code-block:: + + ~(keystone_admin)]$ system application-upload + +#. Edit application overrides. + + .. code-block:: + + cat ~/notification-override.yaml + ptptracking: + ptp4lSocket: /var/run/ptp4l-ptp1 + ptp4lServiceName: ptp1 + phc2sysServiceName: phc2sys1 + +#. Apply the overrides. + + .. code-block:: + + ~(keystone_admin)]$ system helm-override-update ptp-notification ptp-notification notification --values notification-override.yaml + +#. Apply ``ptp-notification``. + + .. code-block:: + + ~(keystone_admin)]$ system application-apply ptp-notification diff --git a/doc/source/guest_integration/kubernetes/override-default-application-values.rst b/doc/source/admintasks/kubernetes/override-default-application-values.rst similarity index 91% rename from doc/source/guest_integration/kubernetes/override-default-application-values.rst rename to doc/source/admintasks/kubernetes/override-default-application-values.rst index d56056f6b..5a5872293 100644 --- a/doc/source/guest_integration/kubernetes/override-default-application-values.rst +++ b/doc/source/admintasks/kubernetes/override-default-application-values.rst @@ -39,7 +39,7 @@ You can override default application values using the commands described in this .. code-block:: none - ~(keystone_admin)]$ system helm-override-update ptp-notification ptp-notification notification -–values <> + ~(keystone_admin)]$ system helm-override-update ptp-notification ptp-notification notification -–values .. code-block:: none @@ -50,11 +50,11 @@ You can override default application values using the commands described in this **simulated** value must be 'false' for a normal operation \(used only for troubleshooting\). - **holdover\_seconds** + **holdover_seconds** value is the holdover time provided by the |NIC| specification. The default is 15 seconds. - **poll\_freq\_seconds** - is the frequency that the tracking function monitors the ptp4l to + **poll_freq_seconds** + is the frequency that the tracking function monitors the ``ptp4l`` to derive the |PTP| sync state. The default is 2 seconds. diff --git a/doc/source/guest_integration/kubernetes/remove-ptp-notifications.rst b/doc/source/admintasks/kubernetes/remove-ptp-notifications.rst similarity index 100% rename from doc/source/guest_integration/kubernetes/remove-ptp-notifications.rst rename to doc/source/admintasks/kubernetes/remove-ptp-notifications.rst diff --git a/doc/source/fault-mgmt/kubernetes/100-series-alarm-messages.rst b/doc/source/fault-mgmt/kubernetes/100-series-alarm-messages.rst index 4ca9e2f61..7a64e3b96 100644 --- a/doc/source/fault-mgmt/kubernetes/100-series-alarm-messages.rst +++ b/doc/source/fault-mgmt/kubernetes/100-series-alarm-messages.rst @@ -317,9 +317,23 @@ health of the system. :header-rows: 0 * - **Alarm ID: 100.119** - - Major: PTP configuration or out-of-tolerance time-stamping conditions. + - does not support the provisioned PTP mode - Minor: PTP out-of-tolerance time-stamping condition. + OR + + PTP clocking is out-of-tolerance + + OR + + is not locked to remote PTP Grand Master + + OR + + GNSS signal loss state: + + OR + + 1PPS signal loss state: * - Entity Instance - host=.ptp OR host=.ptp=no-lock @@ -338,9 +352,17 @@ health of the system. OR host=.ptp=out-of-tolerance + + OR + + host=.instance=.ptp=out-of-tolerance + + OR + + host=.interface=.ptp=signal-loss * - Degrade Affecting Severity: - None * - Severity: - M or m * - Proposed Repair Action - - Monitor and, if condition persists, contact next level of support. \ No newline at end of file + - Monitor and, if condition persists, contact next level of support. diff --git a/doc/source/guest_integration/kubernetes/index-guest-kub-5c89ec07e141.rst b/doc/source/guest_integration/kubernetes/index-guest-kub-5c89ec07e141.rst index 97c0d0459..079cbdc34 100644 --- a/doc/source/guest_integration/kubernetes/index-guest-kub-5c89ec07e141.rst +++ b/doc/source/guest_integration/kubernetes/index-guest-kub-5c89ec07e141.rst @@ -16,8 +16,5 @@ PTP Notification :maxdepth: 1 ptp-notifications-overview - install-ptp-notifications - remove-ptp-notifications - override-default-application-values integrate-application-with-notification-client-sidecar diff --git a/doc/source/guest_integration/kubernetes/install-ptp-notifications.rst b/doc/source/guest_integration/kubernetes/install-ptp-notifications.rst deleted file mode 100644 index 861fcfd35..000000000 --- a/doc/source/guest_integration/kubernetes/install-ptp-notifications.rst +++ /dev/null @@ -1,131 +0,0 @@ - -.. xqd1614091832213 -.. _install-ptp-notifications: - -========================= -Install PTP Notifications -========================= - -|PTP| notification is packaged as an Armada system application and is managed -using the :command:`system application` and :command:`system-helm-override` -commands. - - -.. rubric:: |context| - - -|prod| provides the capability for application\(s\) to subscribe to -asynchronous |PTP| status notifications and pull for the |PTP| state on demand. - -.. rubric:: |prereq| - - -.. _install-ptp-notifications-ul-ydy-ggf-t4b: - -- The |PTP| port must be configured as Subordinate mode \(Secondary mode\). - For more information, see, - -.. xbooklink :ref:`|prod-long| System Configuration - `: - - -- :ref:`Configuring PTP Service Using Horizon ` - -- :ref:`Configuring PTP Service Using the CLI ` - - -.. rubric:: |proc| - - -Use the following steps to install the **ptp-notification** application. - - -#. Label the controller\(s\). - - - #. Source the platform environment. - - .. code-block:: none - - $ source /etc/platform/openrc - ~(keystone_admin)]$ - - #. Assign the |PTP| registration label to the controller\(s\). - - .. code-block:: none - - ~(keystone_admin)]$ system host-label-assign controller-0 ptp-registration=true - ~(keystone_admin)]$ system host-label-assign controller-1 ptp-registration=true - - #. Assign the |PTP| notification label to the node that is configured with - a Secondary |PTP| port. For example: - - .. code-block:: none - - ~(keystone_admin)]$ system host-label-assign controller-0 ptp-notification=true - - -#. Upload the |PTP| application using the following command: - - .. code-block:: none - - ~(keystone_admin)]$ system application-upload /usr/local/share/applications/helm/ptp-notification-.tgz - - Where ```` is the version of the .tgz file that you can download from - the |dnload-loc| relevant to your release. - -#. Verify the |PTP| application has been uploaded. - - .. code-block:: none - - ~(keystone_admin)]$ system application-list - -#. Apply the |PTP| notification application. - - .. code-block:: none - - $ system application-apply ptp-notification - -#. Monitor the status. - - .. code-block:: none - - $ watch –n 5 system application-list - - and/or - - .. code-block:: none - - $ watch kubectl get pods –n notification - - The default configuration for |PTP| notification pod is: - - - - |PTP|-notification pod: - - - - Runs as a daemonset \(1 pod per node with label **ptp-notification=true**\) - - - - Three containers: - - - - ptp-notification-rabbitmq - - - ptp-notification-location - - - ptp-notification-ptptracking - - - - Registration pod: - - - - Runs as a deployment on nodes labeled with **ptp-registration=true** - - - Replica count of 1 - - - One container: Rabbitmq - - - - diff --git a/doc/source/system_configuration/kubernetes/advanced-ptp-configuration-334a08dc50fb.rst b/doc/source/system_configuration/kubernetes/advanced-ptp-configuration-334a08dc50fb.rst new file mode 100644 index 000000000..e7cdcc456 --- /dev/null +++ b/doc/source/system_configuration/kubernetes/advanced-ptp-configuration-334a08dc50fb.rst @@ -0,0 +1,11 @@ +.. _advanced-ptp-configuration-334a08dc50fb: + +========================== +Advanced PTP Configuration +========================== + +.. caution:: + + Parameters are written to the ``ptp4l`` configuration file without error + checking. Caution must be taken to ensure that parameter names and values + are correct as errors will cause ``ptp4l`` launch failures. diff --git a/doc/source/system_configuration/kubernetes/configuring-ptp-service-using-horizon.rst b/doc/source/system_configuration/kubernetes/configuring-ptp-service-using-horizon.rst deleted file mode 100644 index af087ef57..000000000 --- a/doc/source/system_configuration/kubernetes/configuring-ptp-service-using-horizon.rst +++ /dev/null @@ -1,114 +0,0 @@ - -.. pzk1552673010743 -.. _configuring-ptp-service-using-horizon: - -=================================== -Configure PTP Service Using Horizon -=================================== - -The |PTP| is a protocol used to synchronize clocks in a network. You can use -the Horizon Web interface to configure these services on the host. - -|PTP| provides more accurate time synchronization than |NTP|. |NTP| typically -provides time synchronization accuracy on the order of milliseconds, while -|PTP| provides time synchronization accuracy on the order of microseconds. - -.. xbooklink For more information on configuring the PTP service for clock - synchronization, see |node-doc|: `Host Inventory `. - -A |PTP| master must be present on the |OAM| Network, broadcasting |PTP| time -messages. - -.. note:: - |NTP| and |PTP| are configured per host. Lock/unlock the host when - updating **clock\_synchronization** for the host. - -.. rubric:: |prereq| - -Review the Fault Management page and ensure that any existing system alarms -are cleared. - -.. rubric:: |proc| - -.. _configuring-ptp-service-using-horizon-steps-xfh-24z-5p: - -#. In the |prod| Horizon, open the System Configuration page. - - The System Configuration page is available - from **Admin** \> **Platform** \> **System Configuration** in the - left-hand pane. - -#. Select the |PTP| tab. - - The |PTP| page appears. - -#. Click **Edit PTP**. Update the configuration of the |PTP| service. - - - **PTP Time Stamping Mode**: Hardware time stamping is the default - option, and achieves best time syncing. - - - **PTP Network Transport**: Switch between IEEE 802.3 network - transport \(L2\) or |UDP| IPv4/v6 network transport for |PTP| - messaging. - - .. note:: - L2 is the default option. - - If you use |UDP| for |PTP| transport, each |PTP| interface must have - an IP assigned. This is enforced during host unlock, and when - switching |PTP| transport to |UDP|. - - - **PTP Delay Mechanism** - - Set the |PTP| delay mechanism, the options are: - - - E2E: default delay request-response - - - P2P: peer delay - -#. Click **Save**. - - This raises **250.001 Configuration out-of-date** alarms against the - controllers, workers, and storages nodes. You can view the alarms on - the Fault Management page. - -#. Lock and unlock the controllers, workers, and storage nodes to apply the - configuration and clear the **Configuration out-of-date** alarms. - - Open the Host Inventory page, available - from **Admin** \> **Platform** \> **Host Inventory** in the left-hand - pane, and then select the **Hosts** tab. Hosts requiring attention are - shown with the status **Config out-of-date**. - - To lock or unlock a host, click the **Action Menu** down arrow for the - host and then use the menu selections. - - #. Lock the standby controller. - - Wait for the lock operation to be completed. - - #. Unlock the standby controller. - - Wait for the host to become available. Its configuration is - updated, and its error message is cleared. - - #. Perform a swact on the active controller. - - Click **Action Menu \(down arrow\)** \> **Swact Host** \> for - the active controller. - - Horizon Web interface access is interrupted, and the |prod| login - screen appears. Wait briefly for the Web service to stabilize, and - then log in again. - - #. Lock the original controller \(now in standby mode\). - - Wait for the lock operation to be completed. - - #. Unlock the original controller. - - Wait for it to become available. Its configuration is updated, and - its error message is cleared. - -#. Ensure that the **Configuration out-of-date** alarms are cleared for - both controllers. \ No newline at end of file diff --git a/doc/source/system_configuration/kubernetes/configuring-ptp-service-using-the-cli.rst b/doc/source/system_configuration/kubernetes/configuring-ptp-service-using-the-cli.rst index 6610d5da0..e0076ee33 100644 --- a/doc/source/system_configuration/kubernetes/configuring-ptp-service-using-the-cli.rst +++ b/doc/source/system_configuration/kubernetes/configuring-ptp-service-using-the-cli.rst @@ -8,38 +8,17 @@ Configure PTP Service Using the CLI You can use the CLI to configure |PTP| services. -.. contents:: - :local: - :depth: 1 - -For information on configuring the |PTP| service for clock synchronization -using the Horizon Web interface see -:ref:`Configure PTP Service Using Horizon -`. - -You can also specify the |PTP| service for **clock_synchronization** using -the |os-prod-hor| interface. - .. xbooklink For more information, see |node-doc|: `Host Inventory `. **PTP Service** -To view the existing |PTP| status, use the following command. +To view the existing |PTP| status, use the following commands. .. code-block:: none - ~(keystone_admin)]$ system ptp-show - +--------------+--------------------------------------+ - | Property | Value | - +--------------+--------------------------------------+ - | uuid | 4844eca1-13bb-471e-9162-e5f2bb97d650 | - | mode | hardware | - | transport | l2 | - | mechanism | e2e | - | isystem_uuid | a16d7b07-1d42-41cf-b001-04bc25216a2b | - | created_at | 2019-12-09T16:08:34.319374+00:00 | - | updated_at | None | - +--------------+--------------------------------------+ + ~(keystone_admin)]$ system ptp-instance-list + + ~(keystone_admin)]$ system host-ptp-instance-list .. warning:: |NTP| and |PTP| are mutually exclusive on a particular host; only one can be @@ -149,133 +128,105 @@ To view the |PTP| service configuration, use the following command: .. _configuring-ptp-service-using-the-cli-ul-srp-rnn-3jb: -- **PTP Time Stamping Mode**: |NTP| and |PTP| are configured per host. - Lock/unlock the host when Hardware time stamping is the default - option, and achieves best time synching. Use the following command: +PTP Instance Configuration +========================== - .. code-block:: none +|PTP| instances are the top level configuration unit. The supported instance +types are: - ~(keystone_admin)]$ system ptp-modify --mode= +``ptp4l`` + Represents an instance of ``ptp4l``. A node may have several of these + instances. -- **PTP Network Transport**: Switch between IEEE 802.3 network - transport \(L2\) or |UDP| IPv4/v6 network transport for |PTP| - messaging. Use the following command: +``phc2sys`` + Represents an instance of ``phc2sys``. A node will generally only have one + of these. - .. code-block:: none +``ts2phc`` + Represents an instance of ``ts2phc``. - ~(keystone_admin)]$ system ptp-modify --transport= +``clock`` + ``clock`` is not an daemon or service, but instead an abstract unit used to + hold the interfaces and configuration for setting Westport Channel NIC + control parameters (syncE and PPS transmission). - .. note:: - L2 is the default option. +Valid instance level parameters are found in the man pages for each service, +under: - If you use |UDP| for |PTP| transport, each |PTP| interface must have an - IP assigned. This is enforced during host unlock, and when switching - |PTP| transport to |UDP|. +* GLOBAL OPTIONS - ptp4l -- **PTP Delay Mechanism** +* OPTIONS - phc2sys - Set the |PTP| delay mechanism, the options are: +* GLOBAL OPTIONS - ts2phc - - E2E: default delay request-response +* None for clock - - P2P: peer delay - Use the following command: +Set host to use |PTP|: - .. code-block:: none +.. code-block:: - ~(keystone_admin)]$ system ptp-modify --mechanism= + ~(keystone_admin)]$ system host-update controller-0 clock_synchronization=ptp -- **PTP Role** +Create an instance and assigning parameters +------------------------------------------- - |PTP| primary/secondary interfaces are not defined by default. They must be - specified by the administrator for each host. +#. Create an instance by providing a name and type. - The **ptp\_role** option can be added to interfaces, and can be defined for - primary, secondary, and none. This option allows administrators to - configure interfaces that can be used for |PTP| services. The primary and - secondary roles are limited to |OAM|, platform or data interfaces. Any - number of primary and secondary interfaces can be specified per host. + .. code-block:: - If a host has **clock_synchronization=ptp**, there must be at least one - host interface with a |PTP| role specified. This is enforced during host - unlock. + ~(keystone_admin)]$ system ptp-instance-add myptp1 ptp4l - For example, this service can be specified using the following commands: +#. Add any required instance level parameters. - .. code-block:: none + .. code-block:: - ~(keystone_admin)]$ system host-if-modify compute-3 ens803f0 -n sriovptp --ptp-role slave + ~(keystone_admin)]$ system ptp-instance-parameter-add myptp1 domainNumber=24 slaveOnly=0 -To apply changes to hosts, use the following command: +Create an interface and assign to ports +--------------------------------------- -.. code-block:: none +#. Create an interface unit by providing a name and assigning it to an instance. - ~(keystone_admin)]$ system ptp-apply + .. code-block:: -|PTP| changes will be applied to all unlocked hosts configured with ptp -clock\_synchronization. + ~(keystone_admin)]$ system ptp-interface-add ptpinterface myptp1 -.. _configuring-ptp-service-using-the-cli-section-qn1-p3d-vkb: +#. Add ports to the interface. ----------------------- -Advanced Configuration ----------------------- + .. code-block:: -Using service parameters, you can customize a wide range of linuxptp module -settings to use the system in a much wider range of |PTP| configurations. + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 oam0 ptpinterface -.. caution:: - These parameters are written to the ptp4l configuration file without error - checking. Caution must be taken to ensure that parameter names and - values are correct as errors will cause ptp4l launch failures. +#. Add interface level parameters as required. -The following service parameters are available: + .. code-block:: -**ptp global default_sync=0** - This service parameter disables the selection of a default port by phc2sys. - This option should be used when there are three or more |PTP| ports - configured in order to prevent phc2sys from synchronizing the time across - all ports before they have become synchronized with the primary clock. + ~(keystone_admin)]$ system ptp-interface-parameter-add ptpinterface masterOnly=1 -**ptp global =** - This service parameter allows you to write or overwrite values found - in the global section of the ptp4l configuration file. For example, - the command + .. note:: - .. code-block:: none + Multiple ports may be assigned to an interface in order to simplify + parameter application. - ~(keystone_admin)]$ system service-parameter-add ptp global domainNumber=24 + .. code-block:: - results in the following being written to the configuration file: + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 data0 ptpinterface + ~(keystone_admin)]$ system ptp-interface-show ptpinterface - .. code-block:: none - domainNumber 24 +#. Assign the instance to a host and apply the configuration. - |PTP| global service parameters take precedence over the system |PTP| - values. For example, if the system |PTP| delay mechanism is - **E2E**, and you subsequently run the command + #. Assign the |PTP| instance to a host so that the configuration can be + applied. - .. code-block:: none + .. code-block:: - ~(keystone_admin)]$ system service-parameter-add ptp global delay_mechanism=P2P + ~(keystone_admin)]$ system host-ptp-instance-assign controller-0 myptp1 - Then the **P2P** will be used instead. + #. Apply the configuration and verify that it completed. -**ptp phc2sys update-rate=** - This parameter controls the update-rate of the phc2sys service, in - seconds. + .. code-block:: -**ptp phc2sys summary-updates=** - This parameter controls the number of clock updates to be included in - summary statistics. - -To apply service parameter changes to hosts, use the following command: - -.. code-block:: none - - ~(keystone_admin)]$ system service-parameter-apply ptp - -|PTP| changes will be applied to all unlocked hosts configured with -ptp clock\_synchronization. \ No newline at end of file + ~(keystone_admin)]$ system ptp-instance-apply + ~(keystone_admin)]$ fm alarm-list diff --git a/doc/source/system_configuration/kubernetes/figures/ptp-instance-dual-nic-deployment-gnss.PNG b/doc/source/system_configuration/kubernetes/figures/ptp-instance-dual-nic-deployment-gnss.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ee0426388ab435670140f053c55fe6690bf09a17 GIT binary patch literal 56910 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 +* uds_ro_address /var/run/ptp4l-ro + +**Default interface parameters** + +NONE + +**Required user-supplied parameters** + +``domainNumber `` + +**Other requirements** + +An interface with a port must be assigned to the ``ptp4l`` instance in order +for it to start. + +phc2sys +======= + +**Default global parameters** + +``cmdline_opts '-a -r -R 2 -u 600'`` + +**Default interface parameters** + +NONE + +**Required user-supplied parameters** + +``domainNumber `` + This should match with the associated ``ptp4l`` instance. + +``uds_address `` + This value needs to be the same as the uds_address for the ``ptp4l`` + instance that ``phc2sys`` is tracking. + +**Other requirements** + +The ``cmdline_opts`` are defaulted to support interaction with ``ptp4l``. If +``phc2sys`` is instead being used with ``ts2phc``, this parameter will have to +be updated. See :ref:`ptp-instance-examples-517dce312f56` for more information. + +.. note:: + + + The ``cmdline_opts parameter`` overrides all default command line flags for + the service. This means that when setting ``cmdline_opts``, the full list + of desired flags should be set. + + +ts2phc +====== + +**Default global parameters** + +* ``ts2phc.pulsewidth 100000000`` +* ``leapfile /usr/share/zoneinfo/leap-seconds.list`` +* ``cmdline_opts '-s nmea'`` + +**Default interface parameters** + +``ts2phc.extts_polarity rising`` + +**Required user-supplied parameters** + +This value is the path to the GNSS serial port that is connected, it will be +named differently on each system. + +``ts2phc.nmea_serialport=/dev/ttyGNSS_BBDD_0`` + +**Other requirements** + +An interface with a port must be assigned to the ``ts2phc`` instance in order +for time to be synced from GNSS to the phc. + +clock +===== + +**Default global parameters** + +There are no supported global parameters for clock type. + +**Default interface parameters** + +NONE + +**Required user-supplied parameters** + +NONE + +**Other requirements** + +The clock type instance is a special instance used for configuring the NIC +control parameters of the Westport Channel NIC clock interface parameters. + +These parameters can be applied to the interface of a clock instance |PTP| +parameters: + +* sma1 input/output +* sma2 input/output +* u.fl1 output +* u.fl2 input +* synce_rclka enabled +* synce_rclkb enabled diff --git a/doc/source/system_configuration/kubernetes/ptp-instance-examples-517dce312f56.rst b/doc/source/system_configuration/kubernetes/ptp-instance-examples-517dce312f56.rst new file mode 100644 index 000000000..0dd426803 --- /dev/null +++ b/doc/source/system_configuration/kubernetes/ptp-instance-examples-517dce312f56.rst @@ -0,0 +1,368 @@ +.. _ptp-instance-examples-517dce312f56: + +=================================== +Example PTP Instance Configurations +=================================== + +.. contents:: |minitoc| + :local: + :depth: 2 + + +The following sections provide example configuration steps for two |PTP| +configurations supported by |prod|. + +* The first is a Border Clock setup where an external |PTP| GM is providing + a time source for the system. Only ptp4l and phc2sys are used for this + configuration. + +* The second shows how to setup a GM node when a time source is available + via a locally connected GNSS signal. The ``ptp4l``, ``phc2sys``, + ``ts2phc`` and clock instance types are used for this configuration. + +Simple PTP configuration - T-BC +=============================== + +Using the topology shown, the following examples provide +configurations for each service type: + +.. figure:: figures/ptp-t-bc-configuration.png + :scale: 110 % + + *T-BC configuration* + +ptp4l +----- + +#. Create the instance. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-instance-add ptp-inst1 ptp4l + +#. Create a |PTP| inteface for the instance. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-interface-add ptp-iface1 ptp-inst1 + +#. Assign host interfaces to the |PTP| interface. + + .. code-block:: + + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if0 ptp-iface1 + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if1 ptp-iface1 + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if2 ptp-iface1 + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if3 ptp-iface1 + + .. note:: + + The ``if0-if3`` field should be a name listed by the :command:`system + host-if-list -a` command. + +#. Additionally, assign ports for the second NIC. + + .. code-block:: + + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if4 ptp-iface1 + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if5 ptp-iface1 + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if6 ptp-iface1 + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if7 ptp-iface1 + + .. note:: + + The ``if0-if3`` field should be a name listed by the :command:`system + host-if-list -a` command. + +#. Add a parameter to the instance (e.g. domainNumber=24). Additional + parameters can be added for other functionality. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-instance-parameter-add ptp-inst1 domainNumber=24 + +#. Assign the |PTP| instance to controller-0. + + .. code-block:: + + ~(keystone_admin)]$ system host-ptp-instance-assign controller-0 ptp-inst1 + +#. Apply the configuration. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-instance-apply + + +phc2sys +------- + +#. Create the instance. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-instance-add phc-inst1 phc2sys + +#. Create a |PTP| interface for the instance. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-interface-add phc-iface1 phc-inst1 + +#. Assign host interface(s) to the |PTP| interface. + + .. code-block:: + + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if0 phc-iface1 + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if1 phc-iface1 + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if2 phc-iface1 + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if3 phc-iface1 + + .. note:: + + The ``if0-if3`` field should be a name listed by the :command:`system + host-if-list -a` command. + +#. Assign host interfaces from the second NIC. + + .. code-block:: + + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if4 phc-iface1 + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if5 phc-iface1 + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if6 phc-iface1 + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if7 phc-iface1 + + .. note:: + + The ``if0-if3`` field should be a name listed by the :command:`system + host-if-list -a` command. + +#. Add the required ``uds_address`` and ``domainNumber`` parameters to the + instance. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-instance-parameter-add phc-inst1 uds_address=/var/run/ptp4l-ptp-inst1 + ~(keystone_admin)]$ system ptp-instance-parameter-add phc-inst1 domainNumber=24 + + .. note:: + + The path assigned to ``uds_address`` must use the name of the ``ptp4l`` + instance that ``phc2sys`` is tracking. + +#. Assign the instance to controller-0. + + .. code-block:: + + ~(keystone_admin)]$ system host-ptp-instance-assign controller-0 phc-inst1 + +#. Apply the configuration. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-instance-apply + + + +Alternate PTP configuration - T-GM +================================== + + +Using the topology shown, the following examples provide configurations for each service type. + +.. figure:: figures/ptp-instance-dual-nic-deployment-gnss.PNG + :scale: 50 % + + *Dual NIC Deployment with GNSS* + +ts2phc +------ + +.. rubric:: |proc| + +#. Create an instance. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-instance-add ts1 ts2phc + +#. Create the interface and assign to ports. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-interface-add tsint1 ts1 + + # This is the port/PHC that we want to sync to GNSS time stamps, could be multiple PHCs if required + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 oam0 tsint1 + + # Assign a port on the second nic as well + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 data0 tsint1 + + This value is the path to the GNSS serial port that is connected, will vary system to system + ~(keystone_admin)]$ system ptp-instance-parameter-add ts1 ts2phc.nmea_serialport=/dev/ttyGNSS_BBDD_0 + +#. Assign the instance to a host. + + .. code-block:: + + ~(keystone_admin)]$ system host-ptp-instance-assign controller-0 ts1 + +#. Apply the configuration. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-instance-apply + + +phc2sys +------- + +.. rubric:: |proc| + +#. Add the instance. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-instance-add phc-inst1 phc2sys + +#. Use the interface name that is being synced with ``ts2phc`` above. + + For example, if oam0 is on ens1f0, use ens1f0 below. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-instance-parameter-add phc-inst1 cmdline_opts='-s -O -37' + +#. Assign the instance to a host. + + .. code-block:: + + ~(keystone_admin)]$ system host-ptp-instance-assign controller-0 phc-inst1 + +#. Apply the configuration. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-instance-apply + +ptp4l +----- + +.. note:: + + You must create a second instance for the second NIC and repeat this + process. + +.. rubric:: |proc| + +#. Create instance. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-instance-add ptp-inst1 ptp4l + +#. Create an interface for the instance. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-interface-add ptp-iface1 ptp-inst1 + +#. Assign ports to the interface. + + .. code-block:: + + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if0 ptp-iface1 + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if1 ptp-iface1 + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if2 ptp-iface1 + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 if3 ptp-iface1 + +#. Add parameters to the instance. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-instance-parameter-add ptp-inst1 domainNumber=24 + +#. Assign the |PTP| instance to controller-0. + + .. code-block:: + + ~(keystone_admin)]$ system host-ptp-instance-assign controller-0 ptp-inst1 + +#. Apply the configuration. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-instance-apply + +clock +----- + +.. note:: + + These parameters are used to enable the UFL/SMA ports, recovered clock + syncE, and so-on. Refer to the user's guide for the Westport Channel NIC for + additional details on how to operate these cards. + +The following |PTP| parameters can be applied to the interface of a clock +instance: + +* sma1 input/output +* sma2 input/output +* u.fl1 output +* u.fl2 input +* synce_rclka enabled +* synce_rclkb enabled + +.. rubric:: |proc| + +#. Create the instance. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-instance-add cl1 clock + +#. Create a |PTP| interface and assign host interfaces to it. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-insterface-add clint1 cl1 + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 oam0 clint1 + + The parameters are ultimately applied to the whole NIC, so adding multiple + interface from the same NIC will override each other. The exception is the + ``synce_rclk`` params, which are specific to the individual port. + +#. Add interface parameters. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-interface-parameter-add clint1 sma1=output synce_rclka=enabled + +#. Assign the instance to a host. + + .. code-block:: + + ~(keystone_admin)]$ system host-ptp-instance-assign controller-0 cl1 + +#. Create a second clock interface to take input on the sma1 port in order to + pass GNSS data to the second NIC. + +#. Create a |PTP| interface and assign host interfaces to it. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-insterface-add clint2 cl1 + ~(keystone_admin)]$ system host-if-ptp-assign controller-0 data0 clint2 + +#. Add interface parameters. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-interface-parameter-add clint1 sma1=input synce_rclka=enabled + + +#. Apply the configuration. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-instance-apply diff --git a/doc/source/system_configuration/kubernetes/ptp-instance-troubleshooting-7a7c576ee57a.rst b/doc/source/system_configuration/kubernetes/ptp-instance-troubleshooting-7a7c576ee57a.rst new file mode 100644 index 000000000..34699065e --- /dev/null +++ b/doc/source/system_configuration/kubernetes/ptp-instance-troubleshooting-7a7c576ee57a.rst @@ -0,0 +1,127 @@ +.. _ptp-instance-troubleshooting-7a7c576ee57a: + +============================ +PTP Instance Troubleshooting +============================ + +The most common error encountered using multi-instance |PTP| is a failure to +start one or more instances after running the :command:`ptp-instance-apply` +command. This is often due to an invalid configuration or missing parameter. + +This section provides some troubleshooting steps to assist with determining the +error. + +Example +======= + +After running the :command:`ptp-instance-apply` command, the 250.001 alarm will +appear if the |PTP| instances could not be created/started properly. The system +may also show the 200.011 alarm if, after an unlock, |PTP| instances were +unable to start. + +The following example shows these alarms as they would appear in tabular +terminal output. + +.. code-block:: + + | 250.001 | controller-0 Configuration is out-of-date. | host=controller-0 | major | 2022-02-25T21: | + | | | | + | 200.011 | controller-0 experienced a configuration failure. | host=controller-0 | critical | 2022-02-25T20: | + | | | | | 47:59.561262 | + +#. Determine if there was a |PTP|-instance failure by looking at the latest + runtime puppet logs. + + .. code-block:: + + sudo less /var/log/puppet/latest/puppet.log + + # Searching for "Error" in the log file shows this entry + 2022-02-28T17:26:49.529 ESC[1;31mError: 2022-02-28 17:26:49 +0000 Systemd start for ptp4l@ptp4l-legacy failed! + +#. Once the instance has been identified, examine the config file for + configuration errors. + + .. code-block:: + + ~(keystone_admin)]$ cat /etc/ptpinstance/ptp4l-ptp4l-legacy.conf + + [global] + ## + ## Default Data Set + ## + boundary_clock_jbod 1 + clock_servo linreg + delay_mechanism E2E + domainNumber 0 + message_tag ptp4l-legacy + network_transport L2 + summary_interval 6 + time_stamping hardware + tx_timestamp_timeout 20 + uds_address /var/run/ptp4l-ptp4l-legacy + uds_ro_address /var/run/ptp4l-ptp4l-legacyro + +#. Start the service manually and check for errors. + + .. code-block:: + + ~(keystone_admin)]$ ptp4l -f /etc/ptpinstance/ptp4l-ptp4l-legacy.conf + no interface specified + + In this example the ``ptp4l`` program indicates that there is no interface + specified, which is confirmed by the contents of the config file above. + +#. Check using the relevant ``system`` commands to see if there is an interface + assigned to this instance and add one as required. + +Additional tools +================ + +:command:`PMC` + |PTP| management client. + + Used to interact with ptp4l and read/set various |PTP| parameters. + + .. code-block:: + + $ man pmc + + # General command format: + sudo pmc -u -b 0 -f -s 'COMMAND GOES HERE' + + eg. pmc -u -b 0 -f /etc/ptpinstance/ptp4l-ptp1.conf -s /var/run/ptp4l-ptp1 'get PORT_DATA_SET + + +:command:`PHC_CTL` + Directly control PHC device clock. + + Used to perform operations on the physical hardware clock (phc). PHC_CTL can + be used to set the time on a NIC, check the delta between the NIC and the + system clock, adjust the clock frequency. + + .. code-block:: + + $ man phc_ctl + + # Example commands + + phc_ctl get + phc_ctl cmp + + # Rhis syncs the NIC clock to the system clock + phc_ctl set + + +:command:`TCPDUMP` + Check if |PTP| traffic is sending or receiving on a given interface. + + You can capture L2 ptp traffic by filtering on proto 0x88F7 + + .. code-block:: + + sudo tcpdump ether proto 0x88F7 -i + + # Write it to file + + sudo tcpdump ether proto 0x88F7 -i -w \ No newline at end of file diff --git a/doc/source/system_configuration/kubernetes/ptp-interfaces-df73e9b43677.rst b/doc/source/system_configuration/kubernetes/ptp-interfaces-df73e9b43677.rst new file mode 100644 index 000000000..ea0a94e73 --- /dev/null +++ b/doc/source/system_configuration/kubernetes/ptp-interfaces-df73e9b43677.rst @@ -0,0 +1,19 @@ +.. _ptp-interfaces-df73e9b43677: + +============== +PTP Interfaces +============== + +|PTP| interfaces are assigned to an instance. An interface has a name, can have +multiple physical ports assigned to it and can have multiple parameters. + +Interface level parameters are applied to all ports in the interface. + +Valid interface parameters can be located in the man page for a service under: + +* PORT OPTIONS - ptp4l +* SLAVE CLOCK OPTIONS - ts2phc +* None for phc2sys + +Clock has a special list of interface parameters, detailed in the clock section +of the document. diff --git a/doc/source/system_configuration/kubernetes/ptp-introduction-d981dd710bda.rst b/doc/source/system_configuration/kubernetes/ptp-introduction-d981dd710bda.rst new file mode 100644 index 000000000..3d0f41ed7 --- /dev/null +++ b/doc/source/system_configuration/kubernetes/ptp-introduction-d981dd710bda.rst @@ -0,0 +1,98 @@ +.. _ptp-introduction-d981dd710bda: + +================ +PTP Introduction +================ + +As an alternative to |NTP| services, |PTP| can be used by |prod| nodes to +synchronize clocks in a network. It provides: + +* more accurate clock synchronization + +* the ability to extend the clock synchronization, not only to |prod| hosts + (controllers, workers, and storage nodes), but also to hosted applications + on |prod| hosts. + +When used in conjunction with hardware support on the |OAM| and Management +network interface cards, |PTP| is capable of sub-microsecond accuracy. |prod| +supports the configuration of three services that are used for various |PTP| +configurations: ``ptp4l``, ``phc2sys`` and ``ts2phc``. + +|prod| also supports a 'clock' service is used to manage specific NIC +parameters related to Synchronous Ethernet (SyncE) and Pulse Per Second (PPS) +support. Please see :ref:`gnss-and-synce-support-62004dc97f3e` for information +on the 'clock' service. The ``ptp4l``, ``phc2sys`` and ``ts2phc`` services are +part of the linuxptp project (https://sourceforge.net/projects/linuxptp/). + +``ptp4l`` + ptp4l is the implementation of Precision Time Protocol according to the IEEE + standard 1588 for Linux. It handles communication between |PTP| nodes as + well as setting the |PTP| Hardware Clock (PHC) on the NIC. See man ptp4l for + a complete list of configuration parameters. + +``phc2sys`` + phc2sys is used to synchronize the system time with a PHC. The PHC may be + set by either ``ptp4l`` or ``ts2phc``, depending on the system + configuration. Refer to the man pages (:command:`man phc2sys`) for a + complete list of configuration parameters. + +``ts2phc`` + ts2phc synchronizes |PTP| Hardware Clocks (PHC) to external time stamp + signals, such as those coming from GNSS. A single source may be used to + distribute time to one or more PHC devices. Refer to the man pages + (:command:`man ts2phc`) for a complete list of configuration parameters. + +Overview of the |prod| configuration units +========================================== + +* Instances + + * Each instance represents a service of type ``ptp4l``, ``phc2sys`` or + ``ts2phc``. There may be multiple instances of each type of service + depending on the required configuration. + +* Interfaces + + * An interface is assigned to an instance. One or more physical ports on a + system may be assigned to an interface. Assigning multiple ports to the + same interface allows for them to share the same configuration. + +* Parameters + + * Parameters are key/value pairs that represent various program options. The + key should exactly match an option from one of the service man pages, but + this is not enforced. It is possible to enter invalid parameters which + could prevent a service from starting. + + * Parameters are scoped to an instance or an interface. The commands system + ptp-instance-parameter-add and system ptp-interface-parameter-add are used + to assign these respectively. + + * A special instance level parameter called ``cmdline_opts`` is provided to + allow certain parameters to be set which do not have a long name option + supported in the configuration file. + +General information +=================== + +The relevant system locations for |PTP| instance configuration files are: + +``/etc/ptpinstance/`` + Application configuration files, one per instance (excluding clock type). + +``/etc/sysconfig/ptpinstance`` + Environment variable files, one per instance + +``/etc/systemd/system/ptpinstance/`` + systemd service files, one per instance type (excluding clock type). + +``/var/log/user.log`` + log output for |PTP| instance services. + +Instances provide several default parameters that can be overwritten by +setting a parameter with the same key. + +|org| recommends using the :command:`system ptp-instance-apply`` command to +validate your configuration prior to performing any system host-lock/unlock +actions, as a bad |PTP| configuration could result in a configuration +failure and trigger additional reboots as the system tries to recover. diff --git a/doc/source/system_configuration/kubernetes/ptp-limitations-64338c74b415.rst b/doc/source/system_configuration/kubernetes/ptp-limitations-64338c74b415.rst new file mode 100644 index 000000000..a6f53e773 --- /dev/null +++ b/doc/source/system_configuration/kubernetes/ptp-limitations-64338c74b415.rst @@ -0,0 +1,22 @@ +.. _ptp-limitations-64338c74b415: + +=============== +PTP Limitations +=============== + +NICs using the Intel ICE NIC driver may report the following in the `ptp4l`` +logs, which might coincide with a |PTP| port switching to ``FAULTY`` before +re-initializing. + +.. code-block:: none + + ptp4l[80330.489]: timed out while polling for tx timestamp + ptp4l[80330.489]: increasing tx_timestamp_timeout may correct this issue, but it is likely caused by a driver bug + +This is due to a limitation of the Intel ICE driver. The recommended workaround +is to set the ``tx_timestamp_timeout`` parameter to 700 (ms) in the ``ptp4l`` +config. + +.. code-block:: none + + ~(keystone_admin)]$ system ptp-instance-parameter-add ptp-inst1 tx_timestamp_timeout=700 \ No newline at end of file diff --git a/doc/source/system_configuration/kubernetes/remove-ptp-configurations-4885c027dfa5.rst b/doc/source/system_configuration/kubernetes/remove-ptp-configurations-4885c027dfa5.rst new file mode 100644 index 000000000..476a829c2 --- /dev/null +++ b/doc/source/system_configuration/kubernetes/remove-ptp-configurations-4885c027dfa5.rst @@ -0,0 +1,34 @@ +.. _remove-ptp-configurations-4885c027dfa5: + +========================= +Remove PTP Configurations +========================= + +Disable a PTP instance +====================== + +To disable a |PTP| instance without removing any configuration, simply remove +the association with a given host. This can be useful for troubleshooting or +testing different configurations. + +#. Remove the host association. + + .. code-block:: + + ~(keystone_admin)]$ system host-ptp-instance-remove + +#. Apply the configuration. + + .. code-block:: + + ~(keystone_admin)]$ system ptp-instance-apply + +Remove a PTP Instance +===================== + +Instances, interfaces and parameters can all be removed with associated +``-delete`` commands. In some cases, the system will alert that a unit cannot +be deleted because a dependent unit is still associated with it. For example, +a |PTP| instance cannot be deleted if there are still interfaces assigned to +it, so the interfaces must be removed first. In such cases, remove the +dependent unit first. diff --git a/doc/source/updates/kubernetes/index-updates-kub-03d4d10fa0be.rst b/doc/source/updates/kubernetes/index-updates-kub-03d4d10fa0be.rst index b4ef4ec4c..d494affbe 100644 --- a/doc/source/updates/kubernetes/index-updates-kub-03d4d10fa0be.rst +++ b/doc/source/updates/kubernetes/index-updates-kub-03d4d10fa0be.rst @@ -136,3 +136,5 @@ Orchestrated Platform component upgrade orchestration-upgrade-overview performing-an-orchestrated-upgrade performing-an-orchestrated-upgrade-using-the-cli + +