高级网络
OpenShift Container Platform 中的专用和高级网络主题
摘要
第 1 章 验证到端点的连接 复制链接链接已复制到粘贴板!
Cluster Network Operator(CNO)运行一个控制器(连接检查控制器),用于在集群的资源间执行连接健康检查。通过查看健康检查的结果,您可以诊断连接问题或解决网络连接问题,将其作为您要调查的问题的原因。
1.1. 执行的连接健康检查 复制链接链接已复制到粘贴板!
要验证集群资源是否可以访问,请向以下集群 API 服务的每个服务都有一个 TCP 连接:
- Kubernetes API 服务器服务
- Kubernetes API 服务器端点
- OpenShift API 服务器服务
- OpenShift API 服务器端点
- 负载均衡器
要验证服务和服务端点是否可在集群中的每个节点上访问,请对以下每个目标都进行 TCP 连接:
- 健康检查目标服务
- 健康检查目标端点
1.2. 连接健康检查实现 复制链接链接已复制到粘贴板!
在集群中,连接检查控制器或编配连接验证检查。连接测试的结果存储在 openshift-network-diagnostics 命名空间中的 PodNetworkConnectivity 对象中。连接测试会每分钟以并行方式执行。
Cluster Network Operator(CNO)将几个资源部署到集群,以发送和接收连接性健康检查:
- 健康检查源
-
此程序部署在一个由
Deployment对象管理的单个 pod 副本集中。程序会消耗PodNetworkConnectivity对象,并连接到每个对象中指定的spec.targetEndpoint。 - 健康检查目标
- pod 作为集群中每个节点上的守护进程集的一部分部署。pod 侦听入站健康检查。在每个节点上存在这个 pod 可以测试到每个节点的连接。
您可以使用节点选择器配置在其上运行网络连接源和目标的节点。另外,您可以为源和目标 pod 指定允许的容限。配置在 config.openshift.io/v1 API 组中的 Network API 的单例 cluster 自定义资源中定义。
Pod 调度在更新了配置后发生。因此,您必须在更新配置前应用要在选择器中使用的节点标签。更新网络连接后应用的标签将忽略 pod 放置。
请参考以下 YAML 中的默认配置:
连接源和目标 pod 的默认配置
- 1
- 指定网络诊断配置。如果没有指定值,或者指定了空对象,并在名为
cluster的network.operator.openshift.io自定义资源中设置spec.disableNetworkDiagnostics=true,则会禁用网络诊断。如果设置,这个值会覆盖spec.disableNetworkDiagnostics=true。 - 2
- 指定诊断模式。该值可以是空字符串、
All或Disabled。空字符串等同于指定All。 - 3
- 可选:指定连接检查源 pod 的选择器。您可以使用
nodeSelector和tolerations字段来进一步指定sourceNodepod。对于源和目标 pod,它们都是可选的。您可以省略它们,同时使用它们,或者只使用其中一个。 - 4
- 可选:指定连接检查目标 pod 的选择器。您可以使用
nodeSelector和tolerations字段来进一步指定targetNodepod。对于源和目标 pod,它们都是可选的。您可以省略它们,同时使用它们,或者只使用其中一个。
1.3. 配置 pod 连接检查放置 复制链接链接已复制到粘贴板!
作为集群管理员,您可以通过修改名为 cluster 的 network.config.openshift.io 对象来配置运行连接 pod 的节点。
先决条件
-
安装 OpenShift CLI (
oc) 。
流程
输入以下命令编辑连接检查配置:
oc edit network.config.openshift.io cluster
$ oc edit network.config.openshift.io clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
在文本编辑器中,更新
networkDiagnostics小节,以指定您要用于源和目标 pod 的节点选择器。 - 保存更改并退出文本编辑器。
验证
- 输入以下命令验证源和目标 pod 是否在预期的节点上运行:
oc get pods -n openshift-network-diagnostics -o wide
$ oc get pods -n openshift-network-diagnostics -o wide
输出示例
1.4. PodNetworkConnectivityCheck 对象字段 复制链接链接已复制到粘贴板!
PodNetworkConnectivityCheck 对象字段在下表中描述。
| 字段 | 类型 | 描述 |
|---|---|---|
|
|
|
对象的名称,其格式如下:
|
|
|
|
与对象关联的命名空间。此值始终为 |
|
|
|
连接检查来源于的 pod 的名称,如 |
|
|
|
连接检查的目标,如 |
|
|
| 要使用的 TLS 证书配置。 |
|
|
| 使用的 TLS 证书的名称(若有)。默认值为空字符串。 |
|
|
| 代表连接测试条件和最近连接发生和失败的日志的对象。 |
|
|
| 连接检查以及任何之前的状态的最新状态。 |
|
|
| 连接测试日志不会失败。 |
|
|
| 涵盖任何中断的时间连接测试日志。 |
|
|
| 成功尝试的连接测试日志。 |
下表描述了 status.conditions 阵列中对象的字段:
| 字段 | 类型 | 描述 |
|---|---|---|
|
|
| 连接条件从一个状态转换到另一个状态的时间。 |
|
|
| 有关最后一次转换的详情(人类可读的格式)。 |
|
|
| 有关最后一次转换的详情(机器可读的格式)。 |
|
|
| 条件的状态。 |
|
|
| 条件的类型。 |
下表描述了 status.conditions 阵列中对象的字段:
| 字段 | 类型 | 描述 |
|---|---|---|
|
|
| 连接失败时的时间戳。 |
|
|
| 连接日志条目,包括与成功关闭相关的日志条目。 |
|
|
| 以人类可读格式显示停机详情概述。 |
|
|
| 第一次检测到连接失败时的时间戳。 |
|
|
| 连接日志条目,包括原始失败。 |
1.4.1. 连接日志字段 复制链接链接已复制到粘贴板!
下表中描述了连接日志条目的字段。该对象用于以下字段:
-
status.failures[] -
status.successes[] -
status.outages[].startLogs[] -
status.outages[].endLogs[]
| 字段 | 类型 | 描述 |
|---|---|---|
|
|
| 记录操作的持续时间。 |
|
|
| 以人类可读格式提供的状态信息。 |
|
|
|
以可读格式提供状态的原因。这个值是 |
|
|
| 指明日志条目是否成功或失败。 |
|
|
| 连接检查的开始时间。 |
1.5. 验证端点的网络连接 复制链接链接已复制到粘贴板!
作为集群管理员,您可以验证端点的连接,如 API 服务器、负载均衡器、服务或 pod,并验证是否启用了网络诊断。
先决条件
-
安装 OpenShift CLI(
oc)。 -
使用具有
cluster-admin角色的用户访问集群。
流程
输入以下命令确认启用了网络诊断:
oc get network.config.openshift.io cluster -o yaml
$ oc get network.config.openshift.io cluster -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令列出当前的
PodNetworkConnectivityCheck对象:oc get podnetworkconnectivitycheck -n openshift-network-diagnostics
$ oc get podnetworkconnectivitycheck -n openshift-network-diagnosticsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看连接测试日志:
- 在上一命令的输出中,标识您要查看连接日志的端点。
输入以下命令来查看对象:
oc get podnetworkconnectivitycheck <name> \ -n openshift-network-diagnostics -o yaml
$ oc get podnetworkconnectivitycheck <name> \ -n openshift-network-diagnostics -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这里的
<name>指定PodNetworkConnectivityCheck对象的名称。输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 2 章 更改集群网络的 MTU 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在集群安装后更改集群网络的最大传输单元(MTU)。这一更改具有破坏性,因为必须重启集群节点才能完成 MTU 更改。
2.1. 关于集群 MTU 复制链接链接已复制到粘贴板!
在安装过程中,集群网络 MTU 根据集群节点的主网络接口 MTU 自动设置。您通常不需要覆盖检测到的 MTU。
您可能想要根据以下原因更改集群网络的 MTU:
- 集群安装过程中检测到的 MTU 不正确。
- 集群基础架构现在需要不同的 MTU,如添加需要不同 MTU 的节点来获得最佳性能
只有 OVN-Kubernetes 网络插件支持更改 MTU 值。
2.1.1. 服务中断注意事项 复制链接链接已复制到粘贴板!
当您为集群启动最大传输单元(MTU)更改时,以下效果可能会影响服务可用性:
- 至少需要两个滚动重启才能完成迁移到新的 MTU。在此过程中,一些节点在重启时不可用。
- 部署到集群的特定应用程序带有较短的超时间隔,超过绝对 TCP 超时间隔可能会在 MTU 更改过程中造成中断。
2.1.2. MTU 值选择 复制链接链接已复制到粘贴板!
在规划最大传输单元(MTU)迁移时,需要考虑两个相关但不同的 MTU 值。
- Hardware MTU :此 MTU 值根据您的网络基础架构的具体设置。
-
Cluster network MTU :此 MTU 值始终小于您的硬件 MTU,以考虑集群网络覆盖开销。具体开销由您的网络插件决定。对于 OVN-Kubernetes,开销为
100字节。
如果您的集群为不同的节点需要不同的 MTU 值,则必须从集群中任何节点使用的最低 MTU 值中减去网络插件的开销值。例如,如果集群中的某些节点的 MTU 为 9001,而某些节点的 MTU 为 1500,则必须将此值设置为 1400。
为了避免选择节点无法接受的 MTU 值,请使用 ip -d link 命令验证网络接口接受的最大 MTU 值 (maxmtu)。
2.1.3. 迁移过程如何工作 复制链接链接已复制到粘贴板!
下表对迁移过程进行了概述,它分为操作中的用户发起的步骤,以及在响应过程中迁移过程要执行的操作。
| 用户发起的步骤 | OpenShift Container Platform 活动 |
|---|---|
| 在 Cluster Network Operator 配置中设置以下值:
| Cluster Network Operator(CNO) :确认每个字段都设置为有效的值。
如果提供的值有效,CNO 会生成一个新的临时配置,它将集群网络集的 MTU 设置为 Machine Config Operator(MCO) :执行集群中每个节点的滚动重启。 |
| 重新配置集群中节点的主网络接口 MTU。您可以使用以下任一方法完成此操作:
| N/A |
|
在网络插件的 CNO 配置中设置 | Machine Config Operator(MCO) :使用新的 MTU 配置执行集群中每个节点的滚动重启。 |
2.2. 更改集群网络 MTU 复制链接链接已复制到粘贴板!
作为集群管理员,您可以增加或减少集群的最大传输单元 (MTU)。
您无法在 MTU 迁移过程中回滚节点的 MTU 值,但您可以在 MTU 迁移过程完成后回滚。
当 MTU 更新推出时,集群中的迁移具有破坏性且节点可能会临时不可用。
以下流程描述了如何使用机器配置、动态主机配置协议(DHCP)或 ISO 镜像更改集群网络 MTU。如果使用 DHCP 或 ISO 方法,则必须在安装集群后保留的配置工件来完成此流程。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您可以使用具有
cluster-admin权限的账户访问集群。 -
已为集群识别目标 MTU。OVN-Kubernetes 网络插件的 MTU 必须设置为比集群中的最低硬件 MTU 值小
100。 - 如果您的节点是物理计算机,请确保集群网络和连接的网络交换机支持巨型帧。
- 如果您的节点是虚拟机 (VM),请确保虚拟机监控程序和连接的网络交换机支持巨型帧。
2.2.1. 检查当前集群 MTU 值 复制链接链接已复制到粘贴板!
使用以下步骤获取集群网络的当前最大传输单元(MTU)。
流程
要获得集群网络的当前 MTU,请输入以下命令:
oc describe network.config cluster
$ oc describe network.config clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.2. 准备硬件 MTU 配置 复制链接链接已复制到粘贴板!
有很多方法为集群节点配置硬件最大传输单元(MTU)。以下示例显示最常见的方法。验证基础架构 MTU 的正确性。选择在集群节点中配置硬件 MTU 的首选方法。
流程
为硬件 MTU 准备配置:
如果您的硬件 MTU 通过 DHCP 指定,请使用以下 dnsmasq 配置更新 DHCP 配置:
dhcp-option-force=26,<mtu>
dhcp-option-force=26,<mtu>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<mtu>- 指定要公告的 DHCP 服务器的硬件 MTU。
- 如果使用 PXE 的内核命令行指定硬件 MTU,请相应地更新该配置。
如果在 NetworkManager 连接配置中指定了硬件 MTU,请完成以下步骤。如果没有使用 DHCP、内核命令行或某种其他方法显式指定网络配置,则此方法是 OpenShift Container Platform 的默认方法。集群节点必须全部使用相同的底层网络配置,才能使以下过程未经修改地工作。
输入以下命令查找主网络接口:
oc debug node/<node_name> -- chroot /host nmcli -g connection.interface-name c show ovs-if-phys0
$ oc debug node/<node_name> -- chroot /host nmcli -g connection.interface-name c show ovs-if-phys0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<node_name>- 指定集群中的节点的名称。
在 <
interface>-mtu.conf文件中创建以下NetworkManager配置:[connection-<interface>-mtu] match-device=interface-name:<interface> ethernet.mtu=<mtu>
[connection-<interface>-mtu] match-device=interface-name:<interface> ethernet.mtu=<mtu>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<interface>- 指定主网络接口名称。
<mtu>- 指定新的硬件 MTU 值。
2.2.3. 创建 MachineConfig 对象 复制链接链接已复制到粘贴板!
使用以下步骤创建 MachineConfig 对象。
流程
创建两个
MachineConfig对象,一个用于 control plane 节点,另一个用于集群中的 worker 节点:在
control-plane-interface.bu文件中创建以下 Butane 配置:注意您在配置文件中指定的 Butane 版本应与 OpenShift Container Platform 版本匹配,并且始终以
0结尾。例如,4.17.0。有关 Butane 的信息,请参阅"使用 Butane 创建机器配置"。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
worker-interface.bu文件中创建以下 Butane 配置:注意您在配置文件中指定的 Butane 版本应与 OpenShift Container Platform 版本匹配,并且始终以
0结尾。例如,4.17.0。有关 Butane 的信息,请参阅"使用 Butane 创建机器配置"。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令,从 Butane 配置创建
MachineConfig对象:for manifest in control-plane-interface worker-interface; do butane --files-dir . $manifest.bu > $manifest.yaml done$ for manifest in control-plane-interface worker-interface; do butane --files-dir . $manifest.bu > $manifest.yaml doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 警告在此流程的稍后明确指示之前,不要应用这些机器配置。应用这些机器配置现在会导致集群的稳定性丢失。
2.2.4. 开始 MTU 迁移 复制链接链接已复制到粘贴板!
使用以下步骤启动 MTU 迁移。
流程
要开始 MTU 迁移,请输入以下命令指定迁移配置。Machine Config Operator 在集群中执行节点的滚动重启,以准备 MTU 更改。
oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": { "mtu": { "network": { "from": <overlay_from>, "to": <overlay_to> } , "machine": { "to" : <machine_to> } } } } }'$ oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": { "mtu": { "network": { "from": <overlay_from>, "to": <overlay_to> } , "machine": { "to" : <machine_to> } } } } }'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<overlay_from>- 指定当前的集群网络 MTU 值。
<overlay_to>-
指定集群网络的目标 MTU。这个值相对于
<machine_to>的值设置。对于 OVN-Kubernetes,这个值必须比<machine_to>的值小100。 <machine_to>- 指定底层主机网络上的主网络接口的 MTU。
oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": { "mtu": { "network": { "from": 1400, "to": 9000 } , "machine": { "to" : 9100} } } } }'$ oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": { "mtu": { "network": { "from": 1400, "to": 9000 } , "machine": { "to" : 9100} } } } }'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当 Machine Config Operator 更新每个机器配置池中的机器时,Operator 会逐一重启每个节点。您必须等到所有节点都已更新。输入以下命令检查机器配置池状态:
oc get machineconfigpools
$ oc get machineconfigpoolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 成功更新的节点具有以下状态:
UPDATED=true、UPDATING=false、DEGRADED=false。注意默认情况下,Machine Config Operator 一次更新每个池中的一个机器,从而导致迁移总时间随着集群大小而增加。
2.2.5. 验证机器配置 复制链接链接已复制到粘贴板!
使用以下步骤验证机器配置。
流程
确认主机上新机器配置的状态:
要列出机器配置状态和应用的机器配置名称,请输入以下命令:
oc describe node | egrep "hostname|machineconfig"
$ oc describe node | egrep "hostname|machineconfig"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
kubernetes.io/hostname=master-0 machineconfiguration.openshift.io/currentConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b machineconfiguration.openshift.io/desiredConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b machineconfiguration.openshift.io/reason: machineconfiguration.openshift.io/state: Done
kubernetes.io/hostname=master-0 machineconfiguration.openshift.io/currentConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b machineconfiguration.openshift.io/desiredConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b machineconfiguration.openshift.io/reason: machineconfiguration.openshift.io/state: DoneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证以下语句是否正确:
-
machineconfiguration.openshift.io/state字段的值为Done。 -
machineconfiguration.openshift.io/currentConfig字段的值等于machineconfiguration.openshift.io/desiredConfig字段的值。
-
要确认机器配置正确,请输入以下命令:
oc get machineconfig <config_name> -o yaml | grep ExecStart
$ oc get machineconfig <config_name> -o yaml | grep ExecStartCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<config_name>-
指定来自
machineconfiguration.openshift.io/currentConfig字段的机器配置名称。
机器配置必须包括以下对 systemd 配置的更新:
ExecStart=/usr/local/bin/mtu-migration.sh
ExecStart=/usr/local/bin/mtu-migration.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.6. 应用新的硬件 MTU 值 复制链接链接已复制到粘贴板!
使用以下步骤应用新的硬件最大传输单元(MTU)值。
流程
更新底层网络接口 MTU 值:
如果您要使用 NetworkManager 连接配置指定新 MTU,请输入以下命令。MachineConfig Operator 会自动执行集群中节点的滚动重启。
for manifest in control-plane-interface worker-interface; do oc create -f $manifest.yaml done$ for manifest in control-plane-interface worker-interface; do oc create -f $manifest.yaml doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果您要使用 DHCP 服务器选项或内核命令行和 PXE 指定新 MTU,请对基础架构进行必要的更改。
当 Machine Config Operator 更新每个机器配置池中的机器时,Operator 会逐一重启每个节点。您必须等到所有节点都已更新。输入以下命令检查机器配置池状态:
oc get machineconfigpools
$ oc get machineconfigpoolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 成功更新的节点具有以下状态:
UPDATED=true、UPDATING=false、DEGRADED=false。注意默认情况下,Machine Config Operator 一次更新每个池中的一个机器,从而导致迁移总时间随着集群大小而增加。
确认主机上新机器配置的状态:
要列出机器配置状态和应用的机器配置名称,请输入以下命令:
oc describe node | egrep "hostname|machineconfig"
$ oc describe node | egrep "hostname|machineconfig"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
kubernetes.io/hostname=master-0 machineconfiguration.openshift.io/currentConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b machineconfiguration.openshift.io/desiredConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b machineconfiguration.openshift.io/reason: machineconfiguration.openshift.io/state: Done
kubernetes.io/hostname=master-0 machineconfiguration.openshift.io/currentConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b machineconfiguration.openshift.io/desiredConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b machineconfiguration.openshift.io/reason: machineconfiguration.openshift.io/state: DoneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证以下语句是否正确:
-
machineconfiguration.openshift.io/state字段的值为Done。 -
machineconfiguration.openshift.io/currentConfig字段的值等于machineconfiguration.openshift.io/desiredConfig字段的值。
-
要确认机器配置正确,请输入以下命令:
oc get machineconfig <config_name> -o yaml | grep path:
$ oc get machineconfig <config_name> -o yaml | grep path:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<config_name>-
指定来自
machineconfiguration.openshift.io/currentConfig字段的机器配置名称。
如果机器配置被成功部署,则前面的输出会包含
/etc/NetworkManager/conf.d/99-<interface>-mtu.conf文件路径和ExecStart=/usr/local/bin/mtu-migration.sh行。
2.2.7. 最终调整 MTU 迁移 复制链接链接已复制到粘贴板!
使用以下步骤完成 MTU 迁移。
流程
要完成 MTU 迁移,请为 OVN-Kubernetes 网络插件输入以下命令:
oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": null, "defaultNetwork":{ "ovnKubernetesConfig": { "mtu": <mtu> }}}}'$ oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": null, "defaultNetwork":{ "ovnKubernetesConfig": { "mtu": <mtu> }}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<mtu>-
指定您使用
<overlay_to>指定的新集群网络 MTU。
最终调整 MTU 迁移后,每个机器配置池节点都会逐个重启一个。您必须等到所有节点都已更新。输入以下命令检查机器配置池状态:
oc get machineconfigpools
$ oc get machineconfigpoolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 成功更新的节点具有以下状态:
UPDATED=true、UPDATING=false、DEGRADED=false。
验证
要获得集群网络的当前 MTU,请输入以下命令:
oc describe network.config cluster
$ oc describe network.config clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 获取节点的主网络接口的当前 MTU:
要列出集群中的节点,请输入以下命令:
oc get nodes
$ oc get nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要获取节点上主网络接口的当前 MTU 设置,请输入以下命令:
oc adm node-logs <node> -u ovs-configuration | grep configure-ovs.sh | grep mtu | grep <interface> | head -1
$ oc adm node-logs <node> -u ovs-configuration | grep configure-ovs.sh | grep mtu | grep <interface> | head -1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<node>- 指定上一步中的输出节点。
<interface>- 指定节点的主网络接口名称。
输出示例
ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8051
ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8051Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 3 章 使用流控制传输协议 (SCTP) 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在一个裸机集群中使用集群中的流控制传输协议 (SCTP)。
3.1. 在 OpenShift Container Platform 上支持 SCTP 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在集群中的主机上启用 SCTP。在 Red Hat Enterprise Linux CoreOS (RHCOS) 上,SCTP 模块被默认禁用。
SCTP 是基于信息的可靠协议,可在 IP 网络之上运行。
启用后,您可以使用 SCTP 作为带有 pod、服务和网络策略的协议。Service 对象必须通过将 type 参数设置为 ClusterIP 或 NodePort 值来定义。
3.1.1. 使用 SCTP 协议的示例配置 复制链接链接已复制到粘贴板!
您可以通过将 pod 或服务对象中的 protocol 参数设置为 SCTP 来将 pod 或服务配置为使用 SCTP。
在以下示例中,pod 被配置为使用 SCTP:
在以下示例中,服务被配置为使用 SCTP:
在以下示例中,NetworkPolicy 对象配置为对来自具有特定标签的任何 pod 的端口 80 应用 SCTP 网络流量:
3.2. 启用流控制传输协议 (SCTP) 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在集群中的 worker 节点上加载并启用列入黑名单的 SCTP 内核模块。
先决条件
-
安装 OpenShift CLI(
oc)。 -
使用具有
cluster-admin角色的用户访问集群。
流程
创建名为
load-sctp-module.yaml的文件,其包含以下 YAML 定义:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
MachineConfig对象:oc create -f load-sctp-module.yaml
$ oc create -f load-sctp-module.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 要在 MachineConfig Operator 应用配置更改时监测节点的状态,请使用以下命令。当节点状态变为
Ready时,则代表配置更新已被应用。oc get nodes
$ oc get nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3. 验证流控制传输协议 (SCTP) 已启用 复制链接链接已复制到粘贴板!
您可以通过创建一个 pod 以及侦听 SCTP 流量的应用程序,将其与服务关联,然后连接到公开的服务,来验证 SCTP 是否在集群中工作。
先决条件
-
从集群访问互联网来安装
nc软件包。 -
安装 OpenShift CLI (
oc) 。 -
使用具有
cluster-admin角色的用户访问集群。
流程
创建 pod 启动 SCTP 侦听程序:
创建名为
sctp-server.yaml的文件,该文件使用以下 YAML 定义 pod:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 pod:
oc create -f sctp-server.yaml
$ oc create -f sctp-server.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
为 SCTP 侦听程序 pod 创建服务。
创建名为
sctp-service.yaml的文件,该文件使用以下 YAML 定义服务:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要创建服务,请输入以下命令:
oc create -f sctp-service.yaml
$ oc create -f sctp-service.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
为 SCTP 客户端创建 pod。
使用以下 YAML 创建名为
sctp-client.yaml的文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
Pod对象:oc apply -f sctp-client.yaml
$ oc apply -f sctp-client.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在服务器中运行 SCTP 侦听程序。
要连接到服务器 pod,请输入以下命令:
oc rsh sctpserver
$ oc rsh sctpserverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要启动 SCTP 侦听程序,请输入以下命令:
nc -l 30102 --sctp
$ nc -l 30102 --sctpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
连接到服务器上的 SCTP 侦听程序。
- 在终端程序里打开一个新的终端窗口或标签页。
获取
sctpservice服务的 IP 地址。使用以下命令:oc get services sctpservice -o go-template='{{.spec.clusterIP}}{{"\n"}}'$ oc get services sctpservice -o go-template='{{.spec.clusterIP}}{{"\n"}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要连接到客户端 pod,请输入以下命令:
oc rsh sctpclient
$ oc rsh sctpclientCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要启动 SCTP 客户端,请输入以下命令。将
<cluster_IP>替换为sctpservice服务的集群 IP 地址。nc <cluster_IP> 30102 --sctp
# nc <cluster_IP> 30102 --sctpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 4 章 将二级接口指标与网络附加关联 复制链接链接已复制到粘贴板!
管理员可以使用 pod_network_info 指标来分类和监控二级网络接口。指标通过添加标识接口类型的标签(通常基于关联的 NetworkAttachmentDefinition 资源)来实现此目的。
4.1. 为监控扩展二级网络指标 复制链接链接已复制到粘贴板!
二级设备或接口用于不同目的。需要对二级网络接口的指标进行分类,以允许有效的聚合和监控。
公开的指标会包括接口,但不会指定接口的起始位置。当没有其他接口时,这可以正常工作。但是,当添加二级接口时,依赖接口名称会变得有问题,因为很难识别其目的并有效地使用其指标。
添加二级接口时,它们的名称取决于添加它们的顺序。二级接口可以属于不同的网络,它们各自满足不同的目的。
通过使用 pod_network_name_info,可以使用标识接口类型的额外信息来扩展当前的指标。这样,就可以聚合指标,并为特定接口类型添加特定的警告。
网络类型从 NetworkAttachmentDefinition 资源的名称生成,用于区分不同的二级网络类。例如,属于不同网络或使用不同的 CNI 的不同接口使用不同的网络附加定义名称。
4.2. 网络指标守护进程 复制链接链接已复制到粘贴板!
网络指标守护进程是收集并发布与网络相关的指标的守护进程组件。
kubelet 已经发布了您可以观察到的网络相关指标。这些指标是:
-
container_network_receive_bytes_total -
container_network_receive_errors_total -
container_network_receive_packets_total -
container_network_receive_packets_dropped_total -
container_network_transmit_bytes_total -
container_network_transmit_errors_total -
container_network_transmit_packets_total -
container_network_transmit_packets_dropped_total
这些指标中的标签包括:
- Pod 名称
- Pod 命名空间
-
接口名称(比如
eth0)
这些指标在为 pod 添加新接口之前(例如通过 Multus )可以正常工作。在添加了新接口后,无法清楚地知道接口名称代表什么。
interface 标签指向接口名称,但它不知道接口的作用是什么。在有多个不同接口的情况下,无法了解您监控的指标代表什么网络。
现在引入了新的 pod_network_name_info 可以帮助解决这个问题。
4.3. 带有网络名称的指标 复制链接链接已复制到粘贴板!
Network Metrics daemonset 发布 pod_network_name_info 量表指标,固定值为 0。
pod_network_name_info示例
pod_network_name_info{interface="net0",namespace="namespacename",network_name="nadnamespace/firstNAD",pod="podname"} 0
pod_network_name_info{interface="net0",namespace="namespacename",network_name="nadnamespace/firstNAD",pod="podname"} 0
使用 Multus 所添加的注解生成网络名称标签。它是网络附加定义所属命名空间的连接,加上网络附加定义的名称。
新的指标本身不会提供很多值,但与网络相关的 container_network_* 指标一起使用,可以为二集网络的监控提供更好的支持。
通过使用类似以下的 promql 查询,可以获取包含值的新指标,以及从 k8s.v1.cni.cncf.io/network-status 注解中检索的网络名称:
第 5 章 使用 PTP 硬件 复制链接链接已复制到粘贴板!
5.1. 关于 OpenShift 集群节点中的精确时间协议 复制链接链接已复制到粘贴板!
精度时间协议(PTP)用于同步网络中的时钟。与硬件支持一起使用时,PTP 能够达到微秒级的准确性,比网络时间协议 (NTP) 更加准确。
如果您的带有 PTP 的 openshift-sdn 集群使用 User Datagram Protocol (UDP) 进行硬件时间戳,且迁移到 OVN-Kubernetes 插件,则硬件时间戳无法应用到主接口设备,如 Open vSwitch (OVS) 网桥。因此,UDP 版本 4 配置无法使用 br-ex 接口。
您可以配置 linuxptp 服务,并在 OpenShift Container Platform 集群节点中使用具有 PTP 功能的硬件。
通过部署 PTP Operator,使用 OpenShift Container Platform Web 控制台或 OpenShift CLI (oc)安装 PTP。PTP Operator 会创建和管理 linuxptp 服务,并提供以下功能:
- 在集群中发现具有 PTP 功能的设备。
-
管理
linuxptp服务的配置。 -
PTP 时钟事件通知会使用 PTP Operator
cloud-event-proxysidecar 会对应用程序的性能和可靠性造成负面影响。
PTP Operator 只适用于仅在裸机基础架构上置备的集群上具有 PTP 功能的设备。
5.1.1. PTP 域的元素 复制链接链接已复制到粘贴板!
PTP 用于将网络中连接的多个节点与每个节点的时钟同步。PTP 同步时钟以领导层次结构进行组织。层次结构由最佳 master 时钟 (BMC) 算法自动创建和更新,该算法在每个时钟上运行。后续时钟与领导时钟同步,后续时钟本身可以是其他下游时钟的来源。
图 5.1. 网络中的 PTP 节点
下面描述了三种 PTP 时钟类型。
- Grandmaster 时钟
- grandmaster 时钟向网络上的其他时钟提供标准时间信息并确保准确和稳定的同步。它写入时间戳并响应来自其他时钟的时间间隔。grandmaster 时钟与全局导航 Satellite 系统 (GNSS) 时间源同步。Grandmaster 时钟是网络中权威时间来源,负责为所有其他设备提供时间同步。
- Boundary 时钟
- Boundary(边界)时钟在两个或更多个通信路径中具有端口,并且可以是指向其他目标时钟的源和目标。边界时钟作为上游目标时钟工作。目标时钟接收计时消息,针对延迟进行调整,然后创建一个新的源时间信号来传递网络。边界时钟生成一个新的计时数据包,它仍然与源时钟正确同步,并可减少直接报告到源时钟的连接设备数量。
- Ordinary 时钟
- Ordinary(普通)时钟具有一个端口连接,可根据其在网络中的位置扮演源或目标时钟的角色。普通时钟可以读取和写入时间戳。
5.1.1.1. PTP 优于 NTP 的优点 复制链接链接已复制到粘贴板!
PTP 与 NTP 相比有一个主要优势,即各种网络接口控制器 (NIC) 和网络交换机中存在的硬件支持。特殊硬件允许 PTP 考虑消息传输的延迟,并提高时间同步的准确性。为了获得最佳准确性,建议启用 PTP 时钟间的所有网络组件。
基于硬件的 PTP 提供最佳准确性,因为 NIC 可以在准确发送和接收时对 PTP 数据包进行时间戳。这与基于软件的 PTP 进行比较,这需要操作系统对 PTP 数据包进行额外的处理。
在启用 PTP 前,请确保为所需节点禁用 NTP。您可以使用 MachineConfig 自定义资源禁用 chrony 时间服务 (chronyd)。如需更多信息,请参阅禁用 chrony 时间服务。
OpenShift Container Platform 使用带有 linuxptp 和 gpsd 软件包的 PTP Operator 进行高精度网络同步。linuxptp 软件包为网络中的 PTP 时间提供工具和守护进程。带有 Global Navigation Satellite System (GNSS)功能 NIC 的集群主机使用 gpsd 来与 GNSS 时钟源进行接口。
linuxptp 软件包包括用于系统时钟同步的 ts2phc、pmc、ptp4l 和 phc2sys 程序。
- ts2phc
ts2phc将 PTP 设备中的 PTP 硬件时钟(PHC)与高度精确度同步。ts2phc用于 grandmaster 时钟配置。它收到精度计时信号,这是一个高度精确时钟源,如 Global Navigation Satellite System (GNSS)。GNSS 提供准确可靠的同步时间源,用于大型分布式网络。GNSS 时钟通常提供时间信息,其精度为几个纳秒。ts2phc系统守护进程通过读取 grandmaster 时钟中的时间信息,将时间信息从 grandmaster 时钟发送到网络中的其他 PTP 设备,并将其转换为 PHC 格式。PHC 时间供网络中的其他设备用来将其时钟与 grandmaster 时钟同步。- pmc
-
pmc根据 IEEE 标准 1588.1588 实现 PTP 管理客户端 (pmc)。pmc为ptp4l系统守护进程提供基本的管理访问权限。pmc从标准输入读取,并通过所选传输发送输出,打印它收到的任何回复。 - ptp4l
ptp4l实现 PTP 边界时钟和普通时钟,并作为系统守护进程运行。ptp4l执行以下操作:- 将 PHC 同步到源时钟与硬件时间戳
- 将系统时钟与源时钟与软件时间戳同步
- phc2sys
-
phc2sys将系统时钟与网络接口控制器 (NIC) 上的 PHC 同步。phc2sys系统守护进程持续监控 PHC 以获取计时信息。当检测到计时错误时,LareC 会更正系统时钟。
gpsd 软件包包括 ubxtool、gspipe、gpsd、GNSS 时钟与主机时钟同步的程序。
- ubxtool
-
ubxtoolCLI 可让您与 u-blox GPS 系统通信。ubxtoolCLI 使用 u-blox 二进制协议与 GPS 通信。 - gpspipe
-
gpspipe连接到gpsd输出并将其传送到stdout。 - gpsd
-
gpsd是一个服务守护进程,它监控一个或多个连接到主机的 GPS 或 AIS 接收器。
5.1.3. PTP grandmaster 时钟的 GNSS 时间概述 复制链接链接已复制到粘贴板!
OpenShift Container Platform 支持从集群中的 Global Navigation Satellite 系统(GNSS)源和 grandmaster 时钟(T-GM)接收精度 PTP 时间。
OpenShift Container Platform 仅支持 Intel E810 Westport Channel NIC 的 GNSS 源中的 PTP 时间。
图 5.2. 使用 GNSS 和 T-GM 同步概述
- 全局导航 Satellite 系统(GNSS)
GNSS 是一个基于 satellite 的系统,用来为全球范围内接收器提供定位、导航和计时信息。在 PTP 中,GNSS 接收器通常用作高度准确且稳定的参考时钟源。这些接收器从多个 GNSS satellites 接收信号,允许它们计算精确的时间信息。从 GNSS 获取的时间信息被 PTP grandmaster 时钟参考。
通过将 GNSS 用作参考,PTP 网络中的 grandmaster 时钟可以为其他设备提供高度准确的时间戳,从而在整个网络中启用精确同步。
- Digital Phase-Locked Loop (DPLL)
- DPLL 在网络中的不同 PTP 节点之间提供时钟同步。DPLL 将本地系统时钟信号的阶段与传入同步信号的阶段进行比较,例如,来自 PTP grandmaster 时钟的 PTP 信息。DPLL 持续调整本地时钟频率和阶段,以最大程度降低本地时钟和参考时钟之间的阶段差异。
5.1.3.1. 在 GNSS-synced PTP grandmaster 时钟中处理 leap 秒事件 复制链接链接已复制到粘贴板!
Leap second(闰秒)是一秒的调整,偶尔会被应用于 Coordinated Universal Time (UTC),使其与国际原子时间 (TAI) 同步。UTC 秒是无法预计的。在国际范围内认可的闰秒信息包括在 leap-seconds.list 中。此文件通过国际 Earth Rotation 和 Reference Systems Service (IERS)定期更新。一个未处理的闰秒对边缘 RAN 网络有严重影响。可能会导致边缘 RAN 应用程序立即断开语音调用和数据会话。
5.1.4. 关于 PTP 和时钟同步错误事件 复制链接链接已复制到粘贴板!
虚拟 RAN (vRAN) 等云原生应用需要访问对整个网络运行至关重要的硬件计时事件通知。PTP 时钟同步错误可能会对低延迟应用程序的性能和可靠性造成负面影响,例如:在一个分布式单元 (DU) 中运行的 vRAN 应用程序。
丢失 PTP 同步是 RAN 网络的一个关键错误。如果在节点上丢失同步,则可能会关闭无线广播,并且网络 Over the Air (OTA) 流量可能会转移到无线网络中的另一个节点。快速事件通知允许集群节点与 DU 中运行的 vRAN 应用程序通信 PTP 时钟同步状态,从而缓解工作负载错误。
事件通知可用于在同一 DU 节点上运行的 vRAN 应用。发布/订阅 REST API 将事件通知传递到消息传递总线。发布-订阅消息传递或发布-订阅消息传递是服务通信架构的异步服务,通过服务通信架构,所有订阅者会立即收到发布到某一主题的消息。
PTP Operator 为每个支持 PTP 的网络接口生成快速事件通知。您可以通过 HTTP 消息总线使用 cloud-event-proxy sidecar 容器来访问事件。
PTP 快速事件通知可用于配置为使用 PTP 普通时钟、PTP grandmaster 时钟或 PTP 边界时钟。
5.1.5. 2-card E810 NIC 配置参考 复制链接链接已复制到粘贴板!
OpenShift Container Platform 支持用于 grandmaster 时钟(T-GM) 和边界时钟(T-BC) 的 PTP 时间的单和双 NIC Intel E810 硬件。
- 双 NIC grandmaster 时钟
您可以使用具有双 NIC 硬件作为 PTP grandmaster 时钟的集群主机。一个 NIC 从全局导航 Satellite 系统(GNSS)接收计时信息。第二个 NIC 在第一次使用 E810 NIC 上的 SMA1 Tx/Rx 连接接收时间信息。集群主机上的系统时钟从连接到 GNSS satellite 的 NIC 同步。
双 NIC grandmaster 时钟是分布式 RAN (D-RAN)配置的功能,其中远程 Radio 单元(RRU)和 Baseband 单元(BBU)位于相同的无线单元站点。d-RAN 在多个站点间分发无线功能,带有将它们链接到核心网络的连接。
图 5.3. 双 NIC grandmaster 时钟
注意在双 NIC T-GM 配置中,单个
ts2phc程序在两个 PTP 硬件时钟 (PHC)上运行,每个 NIC 对应一个。- 双 NIC 边界时钟
对于提供中等范围的 5G 电信网络,每个虚拟分布式单元(vDU)需要连接到 6 个无线电单元(RU)。要使这些连接,每个 vDU 主机都需要 2 个 NIC 被配置为边界时钟。
双 NIC 硬件允许您将每个 NIC 连接到相同的上游领导时钟,并将每个 NIC 的
ptp4l实例连接给下游时钟。- 带有双 NIC 边界时钟的高可用性系统时钟
您可以将 Intel E810-XXVDA4 Salem 频道双 NIC 硬件配置为双 PTP 边界时钟,为高可用性系统时钟提供计时。如果您在不同的 NIC 上有多个时间源,此配置很有用。高可用性可确保如果两个计时源丢失或断开连接,则节点不会丢失计时同步。
每个 NIC 都连接到同一上游领导时钟。高可用性边界时钟使用多个 PTP 域与目标系统时钟同步。当 T-BC 高度可用时,主机系统时钟可以维护正确的偏移,即使一个或多个
ptp4l实例同步 NIC PHC 时钟失败。如果发生任何单一 SFP 端口或电缆失败,则边界时钟会与领导时钟保持同步。边界时钟领导源选择使用 A-BMCA 算法完成。如需更多信息,请参阅 ITU-T 建议 G.8275.1。
5.1.6. 3-card Intel E810 PTP grandmaster 时钟 复制链接链接已复制到粘贴板!
OpenShift Container Platform 支持使用 3 个 Intel E810 NIC 作为 PTP grandmaster 时钟 (T-GM) 的集群主机。
- 3-card grandmaster 时钟
您可以使用具有 3 个 NIC 作为 PTP grandmaster 时钟的集群主机。一个 NIC 从全局导航 Satellite 系统(GNSS)接收计时信息。第二个和第三个 NIC 使用 E810 NIC 上的 SMA1 Tx/Rx 连接从第一个接收时间信息。集群主机上的系统时钟从连接到 GNSS satellite 的 NIC 同步。
3card NIC grandmaster 时钟可用于分布式 RAN (D-RAN)配置,其中 Radio 单元(RU)直接连接到分布式单元(DU),例如,如果 RU 和 DU 位于相同的无线单元站点。d-RAN 在多个站点间分发无线功能,带有将它们链接到核心网络的连接。
图 5.4. 3-card Intel E810 PTP grandmaster 时钟
注意在 3-card T-GM 配置中,单个
ts2phc进程报告为系统中的 3 个ts2phc实例。
5.2. 配置 PTP 设备 复制链接链接已复制到粘贴板!
PTP Operator 将 NodePtpDevice.ptp.openshift.io 自定义资源定义(CRD)添加到 OpenShift Container Platform。
安装后,PTP Operator 会在每个节点中搜索具有 PTP 功能的网络设备。Operator 为提供兼容 PTP 的网络设备的每个节点创建并更新 NodePtpDevice 自定义资源(CR)对象。
带有内置 PTP 功能的网络接口控制器(NIC)硬件有时需要特定于设备的配置。您可以通过在 PtpConfig 自定义资源(CR)中配置插件,将特定于硬件的 NIC 功能用于 PTP Operator 支持的硬件。linuxptp-daemon 服务使用 plugin 小节中的指定参数根据特定的硬件配置启动 linuxptp 进程(ptp4l 和 phc2sys)。
在 OpenShift Container Platform 4.17 中,通过 PtpConfig 插件支持 Intel E810 NIC。
5.2.1. 使用 CLI 安装 PTP Operator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 CLI 安装 Operator。
先决条件
- 在裸机中安装有支持 PTP 硬件的节点的集群。
-
安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin特权的用户身份登录。
流程
为 PTP Operator 创建命名空间。
将以下 YAML 保存到
ptp-namespace.yaml文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
NamespaceCR:oc create -f ptp-namespace.yaml
$ oc create -f ptp-namespace.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
为 PTP Operator 创建 Operator 组。
在
ptp-operatorgroup.yaml文件中保存以下 YAML:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
OperatorGroupCR:oc create -f ptp-operatorgroup.yaml
$ oc create -f ptp-operatorgroup.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
订阅 PTP Operator。
将以下 YAML 保存到
ptp-sub.yaml文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
SubscriptionCR:oc create -f ptp-sub.yaml
$ oc create -f ptp-sub.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
要验证是否已安装 Operator,请输入以下命令:
oc get csv -n openshift-ptp -o custom-columns=Name:.metadata.name,Phase:.status.phase
$ oc get csv -n openshift-ptp -o custom-columns=Name:.metadata.name,Phase:.status.phaseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Name Phase 4.17.0-202301261535 Succeeded
Name Phase 4.17.0-202301261535 SucceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2. 使用 Web 控制台安装 PTP Operator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 Web 控制台安装 PTP Operator。
如上一节所述,您必须创建命名空间和 operator 组。
流程
使用 OpenShift Container Platform Web 控制台安装 PTP Operator:
- 在 OpenShift Container Platform Web 控制台中,点击 Operators → OperatorHub。
- 从可用的 Operator 列表中选择 PTP Operator,然后点 Install。
- 在 Install Operator 页面中,在 A specific namespace on the cluster 下选择 openshift-ptp。然后点击 Install。
可选:验证是否成功安装了 PTP Operator:
- 切换到 Operators → Installed Operators 页面。
确保 openshift-ptp 项目中列出的 PTP Operator 的 Status 为 InstallSucceeded。
注意在安装过程中,Operator 可能会显示 Failed 状态。如果安装过程结束后有 InstallSucceeded 信息,您可以忽略这个 Failed 信息。
如果 Operator 没有被成功安装,请按照以下步骤进行故障排除:
- 进入 Operators → Installed Operators 页面,检查 Operator Subscriptions 和 Install Plans 选项卡中的 Status 项中是否有任何错误。
-
进入 Workloads → Pods 页面,检查
openshift-ptp项目中 pod 的日志。
5.2.3. 在集群中发现支持 PTP 的网络设备 复制链接链接已复制到粘贴板!
识别集群中存在的 PTP 功能网络设备,以便您可以配置它们
先决条件
- 已安装 PTP Operator。
流程
要返回集群中具有 PTP 功能网络设备的完整列表,请运行以下命令:
oc get NodePtpDevice -n openshift-ptp -o yaml
$ oc get NodePtpDevice -n openshift-ptp -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.4. 将 linuxptp 服务配置为 grandmaster 时钟 复制链接链接已复制到粘贴板!
您可以通过创建一个配置主机 NIC 的 PtpConfig 自定义资源(CR)将 linuxptp 服务(ptp4l、phc2sys、ts2phc)配置为 grandmaster 时钟(T-GM)。
ts2phc 工具允许您将系统时钟与 PTP grandmaster 时钟同步,以便节点可以将精度时钟信号流传输到下游 PTP 普通时钟和边界时钟。
使用 PtpConfig CR 示例,将 linuxptp 服务配置为 Intel Westport Channel E810-XXVDA4T 网络接口的 T-GM。
要配置 PTP 快速事件,请为 ptp4lOpts、ptp4lConf 和 ptpClockThreshold 设置适当的值。ptpClockThreshold 仅在启用事件时使用。如需更多信息,请参阅"配置 PTP 快速事件通知发布程序"。
先决条件
- 对于生产环境中的 T-GM 时钟,请在裸机集群主机上安装 Intel E810 Westport Channel NIC。
-
安装 OpenShift CLI (
oc) 。 -
以具有
cluster-admin特权的用户身份登录。 - 安装 PTP Operator。
流程
创建
PtpConfigCR。例如:根据您的要求,为您的部署使用以下 T-GM 配置之一。将 YAML 保存到
grandmaster-clock-ptp-config.yaml文件中:例 5.1. E810 NIC 的 PTP grandmaster 时钟配置
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意对于 E810 Westport Channel NIC,将
ts2phc.nmea_serialport的值设置为/dev/gnss0。运行以下命令来创建 CR:
oc create -f grandmaster-clock-ptp-config.yaml
$ oc create -f grandmaster-clock-ptp-config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查
PtpConfig配置集是否已应用到节点。运行以下命令,获取
openshift-ptp命名空间中的 pod 列表:oc get pods -n openshift-ptp -o wide
$ oc get pods -n openshift-ptp -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-74m2g 3/3 Running 3 4d15h 10.16.230.7 compute-1.example.com ptp-operator-5f4f48d7c-x7zkf 1/1 Running 1 4d15h 10.128.1.145 compute-1.example.com
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-74m2g 3/3 Running 3 4d15h 10.16.230.7 compute-1.example.com ptp-operator-5f4f48d7c-x7zkf 1/1 Running 1 4d15h 10.128.1.145 compute-1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查配置集是否正确。检查与
PtpConfig配置集中指定的节点对应的linuxptp守护进程的日志。运行以下命令:oc logs linuxptp-daemon-74m2g -n openshift-ptp -c linuxptp-daemon-container
$ oc logs linuxptp-daemon-74m2g -n openshift-ptp -c linuxptp-daemon-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以通过创建一个配置 NIC 的 PtpConfig 自定义资源(T-GM),将 linuxptp 服务(ptp4l、phc2sys、ts2phc) 配置为 2 E810 NIC。
您可以将 linuxptp 服务配置为以下 E810 NIC 的 T-GM:
- Intel E810-XXVDA4T Westport Channel NIC
- Intel E810-CQDA2T Logan Beach NIC
对于分布式 RAN (D-RAN)用例,您可以为 2 个 NIC 配置 PTP,如下所示:
- NIC 1 与全局导航 satellite 系统(GNSS)时间源同步。
-
NIC 2 将同步到 NIC 1 提供的 1PPS 时间输出。此配置由
PtpConfigCR 中的 PTP 硬件插件提供。
2-card PTP T-GM 配置使用 ptp4l 实例,以及一个 ts2phc 实例。ptp4l 和 ts2phc 程序都配置为在两个 PTP 硬件时钟(PHC)上运行,每个 NIC 对应一个。主机系统时钟与连接到 GNSS 时间源的 NIC 同步。
使用以下的 PtpConfig CR 示例作为基础,为双 Intel E810 网络接口将 linuxptp 服务配置为 T-GM。
要配置 PTP 快速事件,请为 ptp4lOpts、ptp4lConf 和 ptpClockThreshold 设置适当的值。ptpClockThreshold 仅在启用事件时使用。如需更多信息,请参阅"配置 PTP 快速事件通知发布程序"。
先决条件
- 对于生产环境中的 T-GM 时钟,请在裸机集群主机上安装两个 Intel E810 NIC。
-
安装 OpenShift CLI (
oc) 。 -
以具有
cluster-admin特权的用户身份登录。 - 安装 PTP Operator。
流程
创建
PtpConfigCR。例如:将以下 YAML 保存到
grandmaster-clock-ptp-config-dual-nics.yaml文件中:例 5.2. 用于双 E810 NIC 的 PTP grandmaster 时钟配置
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意将
ts2phc.nmea_serialport的值设置为/dev/gnss0。运行以下命令来创建 CR:
oc create -f grandmaster-clock-ptp-config-dual-nics.yaml
$ oc create -f grandmaster-clock-ptp-config-dual-nics.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查
PtpConfig配置集是否已应用到节点。运行以下命令,获取
openshift-ptp命名空间中的 pod 列表:oc get pods -n openshift-ptp -o wide
$ oc get pods -n openshift-ptp -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-74m2g 3/3 Running 3 4d15h 10.16.230.7 compute-1.example.com ptp-operator-5f4f48d7c-x7zkf 1/1 Running 1 4d15h 10.128.1.145 compute-1.example.com
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-74m2g 3/3 Running 3 4d15h 10.16.230.7 compute-1.example.com ptp-operator-5f4f48d7c-x7zkf 1/1 Running 1 4d15h 10.128.1.145 compute-1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查配置集是否正确。检查与
PtpConfig配置集中指定的节点对应的linuxptp守护进程的日志。运行以下命令:oc logs linuxptp-daemon-74m2g -n openshift-ptp -c linuxptp-daemon-container
$ oc logs linuxptp-daemon-74m2g -n openshift-ptp -c linuxptp-daemon-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.4.2. 将 linuxptp 服务配置为 3 E810 NIC 的 grandmaster 时钟 复制链接链接已复制到粘贴板!
您可以通过创建一个配置 NIC 的 PtpConfig 自定义资源(T-GM),将 linuxptp 服务(ptp4l、phc2sys、ts2phc) 配置为 3 E810 NIC。
您可以为以下 E810 NIC 将 linuxptp 服务配置为带有 3 个 NIC 的 T-GM:
- Intel E810-XXVDA4T Westport Channel NIC
- Intel E810-CQDA2T Logan Beach NIC
对于分布式 RAN (D-RAN)用例,您可以为 3 个 NIC 配置 PTP,如下所示:
- NIC 1 同步到全局导航 Satellite 系统(GNSS)
- NIC 2 和 3 与带有 1PPS 的 NIC 1 同步连接
使用 PtpConfig CR 示例,将 linuxptp 服务配置为 3card Intel E810 T-GM。
先决条件
- 对于生产环境中的 T-GM 时钟,在裸机集群主机上安装 3 个 Intel E810 NIC。
-
安装 OpenShift CLI (
oc) 。 -
以具有
cluster-admin特权的用户身份登录。 - 安装 PTP Operator。
流程
创建
PtpConfigCR。例如:将以下 YAML 保存到
three-nic-grandmaster-clock-ptp-config.yaml文件中:例 5.3. 3 E810 NIC 的 PTP grandmaster 时钟配置
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意将
ts2phc.nmea_serialport的值设置为/dev/gnss0。运行以下命令来创建 CR:
oc create -f three-nic-grandmaster-clock-ptp-config.yaml
$ oc create -f three-nic-grandmaster-clock-ptp-config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查
PtpConfig配置集是否已应用到节点。运行以下命令,获取
openshift-ptp命名空间中的 pod 列表:oc get pods -n openshift-ptp -o wide
$ oc get pods -n openshift-ptp -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-74m3q 3/3 Running 3 4d15h 10.16.230.7 compute-1.example.com ptp-operator-5f4f48d7c-x6zkn 1/1 Running 1 4d15h 10.128.1.145 compute-1.example.com
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-74m3q 3/3 Running 3 4d15h 10.16.230.7 compute-1.example.com ptp-operator-5f4f48d7c-x6zkn 1/1 Running 1 4d15h 10.128.1.145 compute-1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查配置集是否正确。运行以下命令,并检查与
PtpConfig配置集中指定的节点对应的linuxptp守护进程的日志:oc logs linuxptp-daemon-74m3q -n openshift-ptp -c linuxptp-daemon-container
$ oc logs linuxptp-daemon-74m3q -n openshift-ptp -c linuxptp-daemon-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.5. grandmaster clock PtpConfig 配置参考 复制链接链接已复制到粘贴板!
以下参考信息描述了 PtpConfig 自定义资源(CR)的配置选项,将 linuxptp 服务(ptp4l、phc2sys、ts2phc)配置为 grandmaster 时钟。
| PtpConfig CR 字段 | 描述 |
|---|---|
|
|
指定一组
插件机制允许 PTP Operator 进行自动硬件配置。对于 Intel Westport Channel NIC 或 Intel Logan Beach NIC,当 |
|
|
为 |
|
|
指定启动 |
|
| 指定丢弃数据前从发送方等待传输 (TX) 时间戳的最长时间。 |
|
| 指定 JBOD 边界时钟时间延迟值。这个值用于更正网络时间设备之间传递的时间值。 |
|
|
为 注意
确保此处列出的网络接口配置为 grandmaster,并在 |
|
|
为 |
|
|
当 |
|
|
可选。如果 |
|
|
设置
|
|
|
为 |
|
|
指定包括一个或多个 |
|
|
指定在 |
|
|
使用 |
|
|
使用 |
|
|
通过 |
|
|
使用 |
5.2.5.1. grandmaster 时钟类同步状态参考 复制链接链接已复制到粘贴板!
下表描述了 PTP grandmaster 时钟(T-GM) gm.ClockClass 状态。时钟类状态根据其准确性和稳定性根据主要参考时间时钟(PRTC)或其他计时来源对 T-GM 时钟进行分类。
holdover 规格是 PTP 时钟可以维护同步的时间,而无需从主时间源接收更新。
| 时钟类状态 | 描述 |
|---|---|
|
|
T-GM 时钟在 |
|
|
T-GM 时钟处于 |
|
|
T-GM 时钟处于 |
如需更多信息,请参阅 "Phase/time traceability information", ITU-T G.8275.1/Y.1369.1 Recommendations.
5.2.5.2. Intel E810 NIC 硬件配置参考 复制链接链接已复制到粘贴板!
使用此信息了解如何使用 Intel E810 硬件插件将 E810 网络接口配置为 PTP grandmaster 时钟。硬件固定配置决定了网络接口如何与系统中的其他组件和设备进行交互。对于外部 1PPS 信号,Intel E810 NIC 有四个连接器: SMA1、SMA 2、U.FL1 和 U.FL2。
| 硬件固定 | 推荐的设置 | 描述 |
|---|---|---|
|
|
|
禁用 |
|
|
|
禁用 |
|
|
|
禁用 |
|
|
|
禁用 |
您可以使用 spec.profile.plugins.e810.pins 参数在 Intel E810 NIC 上设置 pin 配置,如下例所示:
pins:
<interface_name>:
<connector_name>: <function> <channel_number>
pins:
<interface_name>:
<connector_name>: <function> <channel_number>
其中:
<function> : 指定 pin 的角色。以下值与 pin 角色关联:
-
0: 禁用 -
1: Rx(接收时间戳) -
2: Tx(传输时间戳)
<channel number> : 与物理连接器关联的数字。以下频道号与物理连接器关联:
-
1:SMA1或U.FL1 -
2:SMA2或U.FL2
示例:
-
0 1: 禁用 pin 映射到SMA1或U.FL1。 -
1 2: 将 Rx 功能分配给SMA2或U.FL2。
SMA1 和 U.FL1 连接器共享通道。SMA2 和 U.FL2 连接器共享通道二。
设置 spec.profile.plugins.e810.ublxCmds 参数,以在 PtpConfig 自定义资源(CR) 中配置 GNSS 时钟。
您必须配置偏移值来补偿 T-GM GPS atenna 电缆信号延迟。要配置最佳 T-GM antenna offset 值,请对 GNSS atenna 电缆信号延迟进行精确测量。红帽无法协助进行这个测量,或为所需的延迟偏移提供任何值。
这些 ublxCmds 小节各自对应于使用 ubxtool 命令应用到主机 NIC 的配置。例如:
- 1
- 以纳秒为单位测量 T-GM 延迟偏移。要获得所需的延迟偏移值,您必须使用外部测试设备测量电缆延迟。
下表描述了等效的 ubxtool 命令:
| ubxtool 命令 | 描述 |
|---|---|
|
|
启用一个tenna voltage 控制,允许在 |
|
| 启用 atenna 接收 GPS 信号。 |
|
| 配置 atenna 以接收来自 Galileo GPS satellite 的信号。 |
|
| 禁用 atenna 从 GLONASS GPS satellite 接收信号。 |
|
| 禁用 atenna 从 BeiDou GPS satellite 接收信号。 |
|
| 禁用 atenna 从 SBAS GPS satellite 接收信号。 |
|
| 配置 GNSS 接收器调查进程,以提高其初始位置估算。这可能需要 24 小时才能获得最佳结果。 |
|
| 对硬件运行单个自动扫描,并报告 NIC 状态和配置设置。 |
5.2.5.3. 双 E810 NIC 配置参考 复制链接链接已复制到粘贴板!
使用这些信息了解如何使用 Intel E810 硬件插件将 E810 网络接口配置为 PTP grandmaster 时钟 (T-GM)。
在配置双 NIC 集群主机前,您必须使用 1PPS faceplace 连接将两个 NIC 与 SMA1 电缆连接。
当您配置双 NIC T-GM 时,您需要补补使用 SMA1 连接端口连接 NIC 时发生的 1PPS 信号延迟。电缆长度、基线温度、组件和制造容错等各种因素可能会影响信号延迟。要满足延迟要求,您必须计算用于偏移信号延迟的特定值。
| PtpConfig 字段 | 描述 |
|---|---|
|
| 使用 PTP Operator E810 硬件插件配置 E810 硬件固定。
|
|
|
使用 |
|
|
将 |
spec.profile.plugins.e810.pins 列表中的每个值都遵循 <function> <channel_number> 格式。
其中:
<function> : 指定 pin 角色。以下值与 pin 角色关联:
-
0: 禁用 -
1: Receive (Rx) – 用于 1PPS IN -
2: Transmit (Tx) – 用于1PPS OUT
<channel_number> : 与物理连接器关联的数字。以下频道号与物理连接器关联:
-
1:SMA1或U.FL1 -
2:SMA2或U.FL2
示例:
-
2 1: 在SMA1中启用1PPS OUT(Tx)。 -
1 1: 在SMA1中启用1PPS IN(Rx)
PTP Operator 将这些值传递给 Intel E810 硬件插件,并将其写入每个 NIC 上的 sysfs pin 配置接口。
5.2.5.4. 3-card E810 NIC 配置参考 复制链接链接已复制到粘贴板!
使用此信息了解如何将 3 E810 NIC 配置为 PTP grandmaster 时钟 (T-GM)。
在配置 3card 集群主机前,您必须使用 1PPS faceplate 连接 3 个 NIC。主 NIC 1PPS_out 输出提供其他 2 NIC。
当您配置 3 个卡 T-GM 时,您需要使用 SMA1 连接端口连接 NIC 时发生 1PPS 信号延迟。电缆长度、基线温度、组件和制造容错等各种因素可能会影响信号延迟。要满足延迟要求,您必须计算用于偏移信号延迟的特定值。
| PtpConfig 字段 | 描述 |
|---|---|
|
| 使用 PTP Operator E810 硬件插件配置 E810 硬件固定。
|
|
|
使用 |
|
|
将 |
5.2.6. 为 PTP grandmaster 时钟配置动态秒处理 复制链接链接已复制到粘贴板!
PTP Operator 容器镜像包含最新的 leap-seconds.list 文件,该文件在发布时可用。您可以使用全局位置系统(GPS)公告将 PTP Operator 配置为自动更新闰秒文件。
闰秒信息存储在 openshift-ptp 命名空间中的名为 leap-configmap 的自动生成的 ConfigMap 资源中。PTP Operator 将 leap-configmap 资源挂载为 linuxptp-daemon pod 中的卷,该 pod 可以被 ts2phc 进程访问。
如果 GPS satellite 广播新的闰秒数据,PTP Operator 会使用新数据更新 leap-configmap 资源。ts2phc 进程自动获取更改。
以下步骤作为参考提供。PTP Operator 的 4.17 版本默认启用自动闰秒管理。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您已以具有
cluster-admin权限的用户身份登录。 - 您已在集群中安装 PTP Operator 并配置了 PTP grandmaster 时钟 (T-GM)。
流程
在
PtpConfigCR 的phc2sysOpts部分中配置自动步处理。设置以下选项:phc2sysOpts: -r -u 0 -m -N 8 -R 16 -S 2 -s ens2f0 -n 24
phc2sysOpts: -r -u 0 -m -N 8 -R 16 -S 2 -s ens2f0 -n 241 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在以前的版本中,T-GM 需要
phc2sys配置 (-O -37) 中的偏移调整才能考虑历史的秒。这已不再需要。配置 Intel e810 NIC,以便由
PtpConfigCR 的spec.profile.plugins.e810.ublxCmds部分中的 GPS 接收器启用定期报告NAV-TIMELS消息。例如:- args: #ubxtool -P 29.20 -p CFG-MSG,1,38,248 - "-P" - "29.20" - "-p" - "CFG-MSG,1,38,248"- args: #ubxtool -P 29.20 -p CFG-MSG,1,38,248 - "-P" - "29.20" - "-p" - "CFG-MSG,1,38,248"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证配置的 T-GM 是否收到来自连接的 GPS 的
NAV-TIMELS消息。运行以下命令:oc -n openshift-ptp -c linuxptp-daemon-container exec -it $(oc -n openshift-ptp get pods -o name | grep daemon) -- ubxtool -t -p NAV-TIMELS -P 29.20
$ oc -n openshift-ptp -c linuxptp-daemon-container exec -it $(oc -n openshift-ptp get pods -o name | grep daemon) -- ubxtool -t -p NAV-TIMELS -P 29.20Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
leap-configmap资源是否已由 PTP Operator 成功生成,并且使用最新版本的 leap-seconds.list 保持最新状态。运行以下命令:oc -n openshift-ptp get configmap leap-configmap -o jsonpath='{.data.<node_name>}'$ oc -n openshift-ptp get configmap leap-configmap -o jsonpath='{.data.<node_name>}'1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.7. 将 linuxptp 服务配置为边界时钟 复制链接链接已复制到粘贴板!
您可以通过创建 PtpConfig 自定义资源(CR)对象将 linuxptp 服务(ptp4l、phc2sys)配置为边界时钟。
使用 PtpConfig CR 示例,将 linuxptp 服务配置为特定硬件和环境的边界时钟。这个示例 CR 没有配置 PTP 快速事件。要配置 PTP 快速事件,请为 ptp4lOpts、ptp4lConf 和 ptpClockThreshold 设置适当的值。ptpClockThreshold 仅在启用事件时使用。如需更多信息,请参阅"配置 PTP 快速事件通知发布程序"。
先决条件
-
安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin特权的用户身份登录。 - 安装 PTP Operator。
流程
创建以下
PtpConfigCR,然后在boundaries-clock-ptp-config.yaml文件中保存 YAML。PTP 边界时钟配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Expand 表 5.7. PTP 边界时钟 CR 配置选项 CR 字段 描述 namePtpConfigCR 的名称。配置集指定包括一个或多个
profile的数组。name指定唯一标识配置集对象的配置集对象的名称。
ptp4lOpts为
ptp4l服务指定系统配置选项。该选项不应包含网络接口名称-i <interface>和服务配置文件-f /etc/ptp4l.conf,因为网络接口名称和服务配置文件会被自动附加。ptp4lConf指定启动
ptp4l作为边界时钟所需的配置。例如,ens1f0同步来自 Pumaster 时钟,ens1f3同步连接的设备。<interface_1>接收同步时钟的接口。
<interface_2>发送同步时钟的接口。
tx_timestamp_timeout对于 Intel Columbiaville 800 系列 NIC,将
tx_timestamp_timeout设置为50。boundary_clock_jbod对于 Intel Columbiaville 800 系列 NIC,请确保
boundary_clock_jbod设置为0。对于 Intel Fortville X710 系列 NIC,请确保boundary_clock_jbod设置为1。phc2sysOpts为
phc2sys服务指定系统配置选项。如果此字段为空,PTP Operator 不会启动phc2sys服务。ptpSchedulingPolicyptp4l 和 phc2sys 进程的调度策略。默认值为
SCHED_OTHER。在支持 FIFO 调度的系统上使用SCHED_FIFO。ptpSchedulingPriority当
ptpSchedulingPolicy设置为SCHED_FIFO时,用于为ptp4l和phc2sys进程设置 FIFO 优先级的整数值(1 到 65)。当ptpSchedulingPolicy设置为SCHED_OTHER时,不使用ptpSchedulingPriority字段。ptpClockThreshold可选。如果没有
ptpClockThreshold,用于ptpClockThreshold字段的默认值。ptpClockThreshold配置在触发 PTP 时间前,PTP master 时钟已断开连接的时长。holdOverTimeout是在 PTP master clock 断开连接时,PTP 时钟事件状态更改为FREERUN前的时间值(以秒为单位)。maxOffsetThreshold和minOffsetThreshold设置以纳秒为单位,它们与CLOCK_REALTIME(phc2sys) 或 master 偏移 (ptp4l) 的值进行比较。当ptp4l或phc2sys偏移值超出这个范围时,PTP 时钟状态被设置为FREERUN。当偏移值在这个范围内时,PTP 时钟状态被设置为LOCKED。建议指定包括一个或多个
recommend对象的数组,该数组定义了如何将配置集应用到节点的规则。.recommend.profile指定在
profile部分定义的.recommend.profile对象名称。.recommend.priority使用
0到99之间的一个整数值指定priority。大数值的优先级较低,因此优先级99低于优先级10。如果节点可以根据match字段中定义的规则与多个配置集匹配,则优先级较高的配置集会应用到该节点。.recommend.match使用
nodeLabel或nodeName值指定.recommend.match规则。.recommend.match.nodeLabel通过
oc get nodes --show-labels命令,使用来自节点对象的node.Labels的key设置nodeLabel。例如,node-role.kubernetes.io/worker。.recommend.match.nodeName使用
oc get nodes命令,将nodeName设置为来自节点对象的node.Name值。例如,compute-1.example.com。运行以下命令来创建 CR:
oc create -f boundary-clock-ptp-config.yaml
$ oc create -f boundary-clock-ptp-config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查
PtpConfig配置集是否已应用到节点。运行以下命令,获取
openshift-ptp命名空间中的 pod 列表:oc get pods -n openshift-ptp -o wide
$ oc get pods -n openshift-ptp -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-4xkbb 1/1 Running 0 43m 10.1.196.24 compute-0.example.com linuxptp-daemon-tdspf 1/1 Running 0 43m 10.1.196.25 compute-1.example.com ptp-operator-657bbb64c8-2f8sj 1/1 Running 0 43m 10.129.0.61 control-plane-1.example.com
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-4xkbb 1/1 Running 0 43m 10.1.196.24 compute-0.example.com linuxptp-daemon-tdspf 1/1 Running 0 43m 10.1.196.25 compute-1.example.com ptp-operator-657bbb64c8-2f8sj 1/1 Running 0 43m 10.129.0.61 control-plane-1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查配置集是否正确。检查与
PtpConfig配置集中指定的节点对应的linuxptp守护进程的日志。运行以下命令:oc logs linuxptp-daemon-4xkbb -n openshift-ptp -c linuxptp-daemon-container
$ oc logs linuxptp-daemon-4xkbb -n openshift-ptp -c linuxptp-daemon-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.7.1. 将 linuxptp 服务配置为双 NIC 硬件的边界时钟 复制链接链接已复制到粘贴板!
您可以通过为每个 NIC 创建一个 PtpConfig 自定义资源(CR)对象,将 linuxptp 服务(ptp4l、phc2sys)配置为双 NIC 硬件的边界时钟。
双 NIC 硬件允许您将每个 NIC 连接到相同的上游领导时钟,并将每个 NIC 的 ptp4l 实例连接给下游时钟。
先决条件
-
安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin特权的用户身份登录。 - 安装 PTP Operator。
流程
创建两个单独的
PtpConfigCR,每个 NIC 使用 "Configuring linuxptp 服务作为边界时钟"中的引用 CR,作为每个 CR 的基础。例如:创建
boundary-clock-ptp-config-nic1.yaml,为phc2sysOpts指定值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
boundary-clock-ptp-config-nic2.yaml,删除phc2sysOpts字段,以完全禁用第二个 NIC 的phc2sys服务:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在第二个 NIC上 指定所需的接口来启动
ptp4l作为一个边境时钟。
注意您必须从第二个
PtpConfigCR 中完全删除phc2sysOpts字段,以禁用第二个 NIC 上的phc2sys服务。
运行以下命令来创建双 NIC
PtpConfigCR:创建 CR 来为第一个 NIC 配置 PTP:
oc create -f boundary-clock-ptp-config-nic1.yaml
$ oc create -f boundary-clock-ptp-config-nic1.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 CR 来为第二个 NIC 配置 PTP:
oc create -f boundary-clock-ptp-config-nic2.yaml
$ oc create -f boundary-clock-ptp-config-nic2.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查 PTP Operator 是否为两个 NIC 应用了
PtpConfigCR。检查与安装了双 NIC 硬件的节点对应的linuxptp守护进程的日志。例如,运行以下命令:oc logs linuxptp-daemon-cvgr6 -n openshift-ptp -c linuxptp-daemon-container
$ oc logs linuxptp-daemon-cvgr6 -n openshift-ptp -c linuxptp-daemon-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
ptp4l[80828.335]: [ptp4l.1.config] master offset 5 s2 freq -5727 path delay 519 ptp4l[80828.343]: [ptp4l.0.config] master offset -5 s2 freq -10607 path delay 533 phc2sys[80828.390]: [ptp4l.0.config] CLOCK_REALTIME phc offset 1 s2 freq -87239 delay 539
ptp4l[80828.335]: [ptp4l.1.config] master offset 5 s2 freq -5727 path delay 519 ptp4l[80828.343]: [ptp4l.0.config] master offset -5 s2 freq -10607 path delay 533 phc2sys[80828.390]: [ptp4l.0.config] CLOCK_REALTIME phc offset 1 s2 freq -87239 delay 539Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以将 linuxptp 服务 ptp4l 和 phc2sys 配置为双 PTP 边界时钟 (T-BC) 的高可用性 (HA) 系统时钟。
高可用性系统时钟使用来自双 NIC Intel E810 Salem 频道硬件的多个时间源,配置为两个边界时钟。两个边界时钟实例参与 HA 设置,每个设置都有自己的配置 profile。您可以将每个 NIC 连接到相同的上游领导时钟,每个 NIC 为下游时钟提供单独的 ptp4l 实例。
创建两个 PtpConfig 自定义资源 (CR) 对象,将 NIC 配置为 T-BC 和第三个 PtpConfig CR,以配置两个 NIC 之间的高可用性。
您可以在配置 HA 的 PtpConfig CR 中设置 phc2SysOpts 选项。在 PtpConfig CR 中将 phc2sysOpts 字段设置为配置两个 NIC 的 PtpConfig CR 中的空字符串。这可防止为两个配置集设置单独的 phc2sys 进程。
第三个 PtpConfig CR 配置高度可用的系统时钟服务。CR 将 ptp4lOpts 字段设置为空字符串,以防止 ptp4l 进程运行。CR 在 spec.profile.ptpSettings.haProfiles 键下添加 ptp4l 配置的配置集,并将这些配置集的内核套接字路径传递给 phc2sys 服务。当出现 ptp4l 失败时,phc2sys 服务将切换到备份 ptp4l 配置。当主配置集再次激活时,phc2sys 服务将恢复到原始状态。
确保将 spec.recommend.priority 设置为您用来配置 HA 的所有三个 PtpConfig CR 的值。
先决条件
-
安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin特权的用户身份登录。 - 安装 PTP Operator。
- 使用 Intel E810 Salem 频道双 NIC 配置集群节点。
流程
创建两个单独的
PtpConfigCR,每个 NIC 使用"将 linuxptp 服务配置为双 NIC 硬件边界时钟"中的 CR 作为每个 CR 的引用。创建
ha-ptp-config-nic1.yaml文件,为phc2sysOpts字段指定一个空字符串。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,为 NIC 1 应用
PtpConfigCR:oc create -f ha-ptp-config-nic1.yaml
$ oc create -f ha-ptp-config-nic1.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
ha-ptp-config-nic2.yaml文件,为phc2sysOpts字段指定一个空字符串。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,为 NIC 2 应用
PtpConfigCR:oc create -f ha-ptp-config-nic2.yaml
$ oc create -f ha-ptp-config-nic2.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
创建配置 HA 系统时钟的
PtpConfigCR。例如:创建
ptp-config-for-ha.yaml文件。将haProfiles设置为与配置两个 NIC 的PtpConfigCR 中设置的metadata.name字段匹配。例如:haProfiles: ha-ptp-config-nic1,ha-ptp-config-nic2Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
ptp4lOpts字段设置为空字符串。如果它不为空,p4ptl进程开始时会带有一个严重错误。
重要在配置单个 NIC 的
PtpConfigCR 前,不要应用高可用性PtpConfigCR。运行以下命令来应用 HA
PtpConfigCR:oc create -f ptp-config-for-ha.yaml
$ oc create -f ptp-config-for-ha.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证 PTP Operator 是否已正确应用
PtpConfigCR。执行以下步骤:运行以下命令,获取
openshift-ptp命名空间中的 pod 列表:oc get pods -n openshift-ptp -o wide
$ oc get pods -n openshift-ptp -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-4xkrb 1/1 Running 0 43m 10.1.196.24 compute-0.example.com ptp-operator-657bbq64c8-2f8sj 1/1 Running 0 43m 10.129.0.61 control-plane-1.example.com
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-4xkrb 1/1 Running 0 43m 10.1.196.24 compute-0.example.com ptp-operator-657bbq64c8-2f8sj 1/1 Running 0 43m 10.129.0.61 control-plane-1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意应该只有一个
linuxptp-daemonpod。运行以下命令,检查配置集是否正确。检查与
PtpConfig配置集中指定的节点对应的linuxptp守护进程的日志。oc logs linuxptp-daemon-4xkrb -n openshift-ptp -c linuxptp-daemon-container
$ oc logs linuxptp-daemon-4xkrb -n openshift-ptp -c linuxptp-daemon-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.8. 将 linuxptp 服务配置为常规时钟 复制链接链接已复制到粘贴板!
您可以通过创建 PtpConfig 自定义资源(CR)对象将 linuxptp 服务(ptp4l、phc2sys)配置为常规时钟。
使用 PtpConfig CR 示例,将 linuxptp 服务配置为特定硬件和环境的普通时钟。这个示例 CR 没有配置 PTP 快速事件。要配置 PTP 快速事件,请为 ptp4lOpts、ptp4lConf 和 ptpClockThreshold 设置适当的值。只有在启用事件时才需要 ptpClockThreshold。如需更多信息,请参阅"配置 PTP 快速事件通知发布程序"。
先决条件
-
安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin特权的用户身份登录。 - 安装 PTP Operator。
流程
创建以下
PtpConfigCR,然后在ordinary-clock-ptp-config.yaml文件中保存 YAML。PTP 普通时钟配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Expand 表 5.8. PTP 普通时钟 CR 配置选项 CR 字段 描述 namePtpConfigCR 的名称。配置集指定包括一个或多个
profile的数组。每个配置集的名称都需要是唯一的。interface指定
ptp4l服务要使用的网络接口,如ens787f1。ptp4lOpts为
ptp4l服务指定系统配置选项,例如-2来选择 IEEE 802.3 网络传输。该选项不应包含网络接口名称-i <interface>和服务配置文件-f /etc/ptp4l.conf,因为网络接口名称和服务配置文件会被自动附加。附加--summary_interval -4来对此接口使用 PTP 快速事件。phc2sysOpts为
phc2sys服务指定系统配置选项。如果此字段为空,PTP Operator 不会启动phc2sys服务。对于 Intel Columbiaville 800 Series NIC,将phc2sysOpts选项设置为-a -r -m -n 24 -N 8 -R 16.-m将消息输出到stdout。linuxptp-daemonDaemonSet解析日志并生成 Prometheus 指标。ptp4lConf指定一个字符串,其中包含要替换默认的
/etc/ptp4l.conf文件的配置。要使用默认配置,请将字段留空。tx_timestamp_timeout对于 Intel Columbiaville 800 系列 NIC,将
tx_timestamp_timeout设置为50。boundary_clock_jbod对于 Intel Columbiaville 800 系列 NIC,将
boundary_clock_jbod设置为0。ptpSchedulingPolicyptp4l和phc2sys进程的调度策略。默认值为SCHED_OTHER。在支持 FIFO 调度的系统上使用SCHED_FIFO。ptpSchedulingPriority当
ptpSchedulingPolicy设置为SCHED_FIFO时,用于为ptp4l和phc2sys进程设置 FIFO 优先级的整数值(1 到 65)。当ptpSchedulingPolicy设置为SCHED_OTHER时,不使用ptpSchedulingPriority字段。ptpClockThreshold可选。如果没有
ptpClockThreshold,用于ptpClockThreshold字段的默认值。ptpClockThreshold配置在触发 PTP 时间前,PTP master 时钟已断开连接的时长。holdOverTimeout是在 PTP master clock 断开连接时,PTP 时钟事件状态更改为FREERUN前的时间值(以秒为单位)。maxOffsetThreshold和minOffsetThreshold设置以纳秒为单位,它们与CLOCK_REALTIME(phc2sys) 或 master 偏移 (ptp4l) 的值进行比较。当ptp4l或phc2sys偏移值超出这个范围时,PTP 时钟状态被设置为FREERUN。当偏移值在这个范围内时,PTP 时钟状态被设置为LOCKED。建议指定包括一个或多个
recommend对象的数组,该数组定义了如何将配置集应用到节点的规则。.recommend.profile指定在
profile部分定义的.recommend.profile对象名称。.recommend.priority对于普通时钟,将
.recommend.priority设置为0。.recommend.match使用
nodeLabel或nodeName值指定.recommend.match规则。.recommend.match.nodeLabel通过
oc get nodes --show-labels命令,使用来自节点对象的node.Labels的key设置nodeLabel。例如,node-role.kubernetes.io/worker。.recommend.match.nodeName使用
oc get nodes命令,将nodeName设置为来自节点对象的node.Name值。例如,compute-1.example.com。运行以下命令来创建
PtpConfigCR:oc create -f ordinary-clock-ptp-config.yaml
$ oc create -f ordinary-clock-ptp-config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查
PtpConfig配置集是否已应用到节点。运行以下命令,获取
openshift-ptp命名空间中的 pod 列表:oc get pods -n openshift-ptp -o wide
$ oc get pods -n openshift-ptp -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-4xkbb 1/1 Running 0 43m 10.1.196.24 compute-0.example.com linuxptp-daemon-tdspf 1/1 Running 0 43m 10.1.196.25 compute-1.example.com ptp-operator-657bbb64c8-2f8sj 1/1 Running 0 43m 10.129.0.61 control-plane-1.example.com
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-4xkbb 1/1 Running 0 43m 10.1.196.24 compute-0.example.com linuxptp-daemon-tdspf 1/1 Running 0 43m 10.1.196.25 compute-1.example.com ptp-operator-657bbb64c8-2f8sj 1/1 Running 0 43m 10.129.0.61 control-plane-1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查配置集是否正确。检查与
PtpConfig配置集中指定的节点对应的linuxptp守护进程的日志。运行以下命令:oc logs linuxptp-daemon-4xkbb -n openshift-ptp -c linuxptp-daemon-container
$ oc logs linuxptp-daemon-4xkbb -n openshift-ptp -c linuxptp-daemon-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
下表描述了您必须对引用 PTP 配置所做的更改,以使用 Intel Columbiaville E800 系列 NIC 作为普通时钟。在应用到集群的 PtpConfig 自定义资源(CR)中进行更改。
| PTP 配置 | 推荐的设置 |
|---|---|
|
|
|
|
|
|
|
|
|
对于 phc2sysOpts,-m 会将信息输出到 stdout。linuxptp-daemon DaemonSet 解析日志并生成 Prometheus 指标。
5.2.9. 为 PTP 硬件配置 FIFO 优先级调度 复制链接链接已复制到粘贴板!
在需要低延迟性能的电信或其他部署类型中,PTP 守护进程线程在受限的 CPU 占用空间以及剩余的基础架构组件一起运行。默认情况下,PTP 线程使用 SCHED_OTHER 策略运行。在高负载下,这些线程可能没有获得无错操作所需的调度延迟。
要缓解潜在的调度延迟错误,您可以将 PTP Operator linuxptp 服务配置为允许线程使用 SCHED_FIFO 策略运行。如果为 PtpConfig CR 设置了 SCHED_FIFO,则 ptp4l 和 phc2sys 将在 chrt 的父容器中运行,且由 PtpConfig CR 的 ptpSchedulingPriority 字段设置。
设置 ptpSchedulingPolicy 是可选的,只有在遇到延迟错误时才需要。
流程
编辑
PtpConfigCR 配置集:oc edit PtpConfig -n openshift-ptp
$ oc edit PtpConfig -n openshift-ptpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更改
ptpSchedulingPolicy和ptpSchedulingPriority字段:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存并退出,以将更改应用到
PtpConfigCR。
验证
获取
linuxptp-daemonpod 的名称以及应用PtpConfigCR 的对应节点:oc get pods -n openshift-ptp -o wide
$ oc get pods -n openshift-ptp -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-gmv2n 3/3 Running 0 1d17h 10.1.196.24 compute-0.example.com linuxptp-daemon-lgm55 3/3 Running 0 1d17h 10.1.196.25 compute-1.example.com ptp-operator-3r4dcvf7f4-zndk7 1/1 Running 0 1d7h 10.129.0.61 control-plane-1.example.com
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-gmv2n 3/3 Running 0 1d17h 10.1.196.24 compute-0.example.com linuxptp-daemon-lgm55 3/3 Running 0 1d17h 10.1.196.25 compute-1.example.com ptp-operator-3r4dcvf7f4-zndk7 1/1 Running 0 1d7h 10.129.0.61 control-plane-1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查
ptp4l进程是否使用更新的chrtFIFO 运行:oc -n openshift-ptp logs linuxptp-daemon-lgm55 -c linuxptp-daemon-container|grep chrt
$ oc -n openshift-ptp logs linuxptp-daemon-lgm55 -c linuxptp-daemon-container|grep chrtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
I1216 19:24:57.091872 1600715 daemon.go:285] /bin/chrt -f 65 /usr/sbin/ptp4l -f /var/run/ptp4l.0.config -2 --summary_interval -4 -m
I1216 19:24:57.091872 1600715 daemon.go:285] /bin/chrt -f 65 /usr/sbin/ptp4l -f /var/run/ptp4l.0.config -2 --summary_interval -4 -mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.10. 为 linuxptp 服务配置日志过滤 复制链接链接已复制到粘贴板!
linuxptp 守护进程生成可用于调试目的的日志。在具有有限存储容量的电信或其他部署类型中,这些日志可以添加到存储要求中。
要减少数量日志消息,您可以配置 PtpConfig 自定义资源 (CR) 来排除报告 master offset 值的日志消息。master offset 日志消息以纳秒为单位报告当前节点时钟和 master 时钟之间的区别。
先决条件
-
安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin特权的用户身份登录。 - 安装 PTP Operator。
流程
编辑
PtpConfigCR:oc edit PtpConfig -n openshift-ptp
$ oc edit PtpConfig -n openshift-ptpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
spec.profile中,添加ptpSettings.logReduce规格,并将值设为true:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意为了进行调试,您可以将此规格恢复到
False,使其包含 master 偏移消息。-
保存并退出,以将更改应用到
PtpConfigCR。
验证
获取
linuxptp-daemonpod 的名称以及应用PtpConfigCR 的对应节点:oc get pods -n openshift-ptp -o wide
$ oc get pods -n openshift-ptp -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-gmv2n 3/3 Running 0 1d17h 10.1.196.24 compute-0.example.com linuxptp-daemon-lgm55 3/3 Running 0 1d17h 10.1.196.25 compute-1.example.com ptp-operator-3r4dcvf7f4-zndk7 1/1 Running 0 1d7h 10.129.0.61 control-plane-1.example.com
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-gmv2n 3/3 Running 0 1d17h 10.1.196.24 compute-0.example.com linuxptp-daemon-lgm55 3/3 Running 0 1d17h 10.1.196.25 compute-1.example.com ptp-operator-3r4dcvf7f4-zndk7 1/1 Running 0 1d7h 10.129.0.61 control-plane-1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证 master 偏移信息是否不包括在日志中:
oc -n openshift-ptp logs <linux_daemon_container> -c linuxptp-daemon-container | grep "master offset"
$ oc -n openshift-ptp logs <linux_daemon_container> -c linuxptp-daemon-container | grep "master offset"1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- <linux_daemon_container> 是
linuxptp-daemonpod 的名称,如linuxptp-daemon-gmv2n。
当您配置
logReduce规格时,这个命令会在linuxptp守护进程日志中报告任何master offset实例。
5.2.11. 常见 PTP Operator 故障排除 复制链接链接已复制到粘贴板!
通过执行以下步骤排除 PTP Operator 中的常见问题。
先决条件
-
安装 OpenShift Container Platform CLI(
oc)。 -
以具有
cluster-admin特权的用户身份登录。 - 使用支持 PTP 的主机在裸机集群中安装 PTP Operator。
流程
检查集群中为配置的节点成功部署了 Operator 和操作对象。
oc get pods -n openshift-ptp -o wide
$ oc get pods -n openshift-ptp -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-lmvgn 3/3 Running 0 4d17h 10.1.196.24 compute-0.example.com linuxptp-daemon-qhfg7 3/3 Running 0 4d17h 10.1.196.25 compute-1.example.com ptp-operator-6b8dcbf7f4-zndk7 1/1 Running 0 5d7h 10.129.0.61 control-plane-1.example.com
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-lmvgn 3/3 Running 0 4d17h 10.1.196.24 compute-0.example.com linuxptp-daemon-qhfg7 3/3 Running 0 4d17h 10.1.196.25 compute-1.example.com ptp-operator-6b8dcbf7f4-zndk7 1/1 Running 0 5d7h 10.129.0.61 control-plane-1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意当启用 PTP fast 事件总线时,就绪的
linuxptp-daemonpod 的数量是3/3。如果没有启用 PTP fast 事件总线,则会显示2/2。检查集群中是否已找到支持的硬件。
oc -n openshift-ptp get nodeptpdevices.ptp.openshift.io
$ oc -n openshift-ptp get nodeptpdevices.ptp.openshift.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查节点的可用 PTP 网络接口:
oc -n openshift-ptp get nodeptpdevices.ptp.openshift.io <node_name> -o yaml
$ oc -n openshift-ptp get nodeptpdevices.ptp.openshift.io <node_name> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
- <node_name>
指定您要查询的节点,例如
compute-0.example.com。输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
通过访问对应节点的
linuxptp-daemonpod,检查 PTP 接口是否已与主时钟成功同步。运行以下命令来获取
linuxptp-daemonpod 的名称以及您要排除故障的对应节点:oc get pods -n openshift-ptp -o wide
$ oc get pods -n openshift-ptp -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-lmvgn 3/3 Running 0 4d17h 10.1.196.24 compute-0.example.com linuxptp-daemon-qhfg7 3/3 Running 0 4d17h 10.1.196.25 compute-1.example.com ptp-operator-6b8dcbf7f4-zndk7 1/1 Running 0 5d7h 10.129.0.61 control-plane-1.example.com
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-lmvgn 3/3 Running 0 4d17h 10.1.196.24 compute-0.example.com linuxptp-daemon-qhfg7 3/3 Running 0 4d17h 10.1.196.25 compute-1.example.com ptp-operator-6b8dcbf7f4-zndk7 1/1 Running 0 5d7h 10.129.0.61 control-plane-1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在远程 shell 到所需的
linuxptp-daemon容器:oc rsh -n openshift-ptp -c linuxptp-daemon-container <linux_daemon_container>
$ oc rsh -n openshift-ptp -c linuxptp-daemon-container <linux_daemon_container>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
- <linux_daemon_container>
-
您要诊断的容器,如
linuxptp-daemon-lmvgn。
在与
linuxptp-daemon容器的远程 shell 连接中,使用 PTP Management Client (pmc) 工具诊断网络接口。运行以下pmc命令,以检查 PTP 设备的同步状态,如ptp4l。pmc -u -f /var/run/ptp4l.0.config -b 0 'GET PORT_DATA_SET'
# pmc -u -f /var/run/ptp4l.0.config -b 0 'GET PORT_DATA_SET'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当节点成功同步到主时钟时的输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
对于 GNSS-sourced grandmaster 时钟,运行以下命令来验证 in-tree NIC ice 驱动程序是否正确,例如:
oc rsh -n openshift-ptp -c linuxptp-daemon-container linuxptp-daemon-74m2g ethtool -i ens7f0
$ oc rsh -n openshift-ptp -c linuxptp-daemon-container linuxptp-daemon-74m2g ethtool -i ens7f0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
driver: ice version: 5.14.0-356.bz2232515.el9.x86_64 firmware-version: 4.20 0x8001778b 1.3346.0
driver: ice version: 5.14.0-356.bz2232515.el9.x86_64 firmware-version: 4.20 0x8001778b 1.3346.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 GNSS-sourced grandmaster 时钟,请验证
linuxptp-daemon容器是否从 GNSS antenna 接收信号。如果容器没有收到 GNSS 信号,则不会填充/dev/gnss0文件。要验证,请运行以下命令:oc rsh -n openshift-ptp -c linuxptp-daemon-container linuxptp-daemon-jnz6r cat /dev/gnss0
$ oc rsh -n openshift-ptp -c linuxptp-daemon-container linuxptp-daemon-jnz6r cat /dev/gnss0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
$GNRMC,125223.00,A,4233.24463,N,07126.64561,W,0.000,,300823,,,A,V*0A $GNVTG,,T,,M,0.000,N,0.000,K,A*3D $GNGGA,125223.00,4233.24463,N,07126.64561,W,1,12,99.99,98.6,M,-33.1,M,,*7E $GNGSA,A,3,25,17,19,11,12,06,05,04,09,20,,,99.99,99.99,99.99,1*37 $GPGSV,3,1,10,04,12,039,41,05,31,222,46,06,50,064,48,09,28,064,42,1*62
$GNRMC,125223.00,A,4233.24463,N,07126.64561,W,0.000,,300823,,,A,V*0A $GNVTG,,T,,M,0.000,N,0.000,K,A*3D $GNGGA,125223.00,4233.24463,N,07126.64561,W,1,12,99.99,98.6,M,-33.1,M,,*7E $GNGSA,A,3,25,17,19,11,12,06,05,04,09,20,,,99.99,99.99,99.99,1*37 $GPGSV,3,1,10,04,12,039,41,05,31,222,46,06,50,064,48,09,28,064,42,1*62Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.12. 在 Intel 800 系列 NIC 中获取 CGU 的 DPLL 固件版本 复制链接链接已复制到粘贴板!
您可以通过打开 debug shell 到集群节点并查询 NIC 硬件,在 Intel 800 系列 NIC 中获取 Clock Generation Unit (CGU) 的数字签名循环 (DPLL) 固件版本。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您已以具有
cluster-admin权限的用户身份登录。 - 您已在集群主机中安装了 Intel 800 系列 NIC。
- 您已在带有支持 PTP 的主机的裸机集群中安装 PTP Operator。
流程
运行以下命令来启动 debug pod:
oc debug node/<node_name>
$ oc debug node/<node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
- <node_name>
- 是安装 Intel 800 系列 NIC 的节点。
使用
devlink工具以及安装 NIC 的总线和设备名称,检查 NIC 中的 CGU 固件版本。例如,运行以下命令:devlink dev info <bus_name>/<device_name> | grep cgu
sh-4.4# devlink dev info <bus_name>/<device_name> | grep cguCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
- <bus_name>
-
是安装 NIC 的总线。例如,
pci。 - <device_name>
-
是 NIC 设备名称。例如,
0000:51:00.0。
输出示例
cgu.id 36 fw.cgu 8032.16973825.6021
cgu.id 361 fw.cgu 8032.16973825.60212 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意固件版本的每个版本号部分都包括了前导和 3 个八位字节位。数字
16973825的二进制格式是0001 0000 0011 0000 0000 0000 0001。使用二进制值来解码固件版本。例如:Expand 表 5.10. DPLL 固件版本 二进制部分 十进制值 00011
0000 00113
0000 00000
0000 00011
5.2.13. 收集 PTP Operator 数据 复制链接链接已复制到粘贴板!
您可以使用 oc adm must-gather 命令收集有关集群的信息,包括与 PTP Operator 关联的功能和对象。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。 -
已安装 OpenShift CLI(
oc)。 - 已安装 PTP Operator。
流程
要使用
must-gather来收集 PTP Operator 数据,您必须指定 PTP Operatormust-gather镜像。oc adm must-gather --image=registry.redhat.io/openshift4/ptp-must-gather-rhel9:v4.17
$ oc adm must-gather --image=registry.redhat.io/openshift4/ptp-must-gather-rhel9:v4.17Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3. 使用 REST API v2 开发 PTP 事件消费者应用程序 复制链接链接已复制到粘贴板!
在裸机集群节点上开发使用 Precision Time Protocol (PTP)事件的消费者应用程序时,您可以在单独的应用程序 pod 中部署消费者应用程序。消费者应用程序使用 PTP 事件 REST API v2 订阅 PTP 事件。
以下信息提供了开发使用 PTP 事件的消费者应用程序的一般指导。完整的事件消费者应用示例超出了此信息的范围。
5.3.1. 关于 PTP 快速事件通知框架 复制链接链接已复制到粘贴板!
使用 Precision Time Protocol (PTP) 快速事件 REST API v2 将集群应用程序订阅到裸机集群节点生成的 PTP 事件。
快速事件通知框架使用 REST API 进行通信。PTP 事件 REST API v1 和 v2 基于 O-RAN O-Cloud Notification API Specification for Event Consumers 4.0,它包括在 O-RAN ALLIANCE Specifications 中。
只有 PTP 事件 REST API v2 符合 O-RAN v4。
5.3.2. 使用 PTP 事件 REST API v2 检索 PTP 事件 复制链接链接已复制到粘贴板!
应用程序在生成者云事件代理 sidecar 中使用 O-RAN v4 兼容 REST API 订阅 PTP 事件。cloud-event-proxy sidecar 容器可以访问与主应用程序容器相同的资源,而无需使用主应用程序的任何资源,且没有大量延迟。
图 5.5. 从 PTP 事件制作者 REST API v2 中消耗 PTP 快速事件概述
-
事件在集群主机上生成 -
PTP Operator 管理的 pod 中的
linuxptp-daemon进程作为 KubernetesDaemonSet运行,并管理各种linuxptp进程 (ptp4l、phc2sys,以及可选的用于 grandmaster 时钟ts2phc)。linuxptp-daemon将事件传递给 UNIX 域套接字。 -
事件传递给 cloud-event-proxy sidecar -
PTP 插件从 UNIX 域套接字读取事件,并将其传递给 PTP Operator 管理的 pod 中的
cloud-event-proxysidecar。cloud-event-proxy将 Kubernetes 基础架构的事件提供给具有低延迟的 Cloud-Native Network Function (CNF)。 -
事件已发布 -
PTP Operator 管理的 pod 中的
cloud-event-proxysidecar 处理事件,并使用 PTP 事件 REST API v2 发布事件。 -
消费者应用程序请求订阅并接收订阅的事件 -
消费者应用程序向制作者
cloud-event-proxysidecar 发送 API 请求,以创建 PTP 事件订阅。订阅后,消费者应用程序会侦听资源限定符中指定的地址,并接收和处理 PTP 事件。
5.3.3. 配置 PTP 快速事件通知发布程序 复制链接链接已复制到粘贴板!
要为集群中的网络接口启动使用 PTP fast 事件通知,您必须在 PTP Operator PtpOperatorConfig 自定义资源 (CR) 中启用快速事件发布程序,并在您创建的 PtpConfig CR 中配置 ptpClockThreshold 值。
先决条件
-
已安装 OpenShift Container Platform CLI (
oc)。 -
您已以具有
cluster-admin权限的用户身份登录。 - 已安装 PTP Operator。
流程
修改默认 PTP Operator 配置以启用 PTP 快速事件。
在
ptp-operatorconfig.yaml文件中保存以下 YAML:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在 OpenShift Container Platform 4.13 或更高版本中,当将 HTTP 传输用于 PTP 事件时,您不需要在
PtpOperatorConfig资源中设置spec.ptpEventConfig.transportHost字段。更新
PtpOperatorConfigCR:oc apply -f ptp-operatorconfig.yaml
$ oc apply -f ptp-operatorconfig.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
为 PTP 启用接口创建
PtpConfig自定义资源(CR),并设置ptpClockThreshold和ptp4lOpts所需的值。以下 YAML 演示了您必须在PtpConfigCR 中设置的必要值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 附加
--summary_interval -4以使用 PTP 快速事件。 - 2
- 所需的
phc2sysOpts值。-m将消息输出到stdout。linuxptp-daemonDaemonSet解析日志并生成 Prometheus 指标。 - 3
- 指定一个字符串,其中包含要替换默认的
/etc/ptp4l.conf文件的配置。要使用默认配置,请将字段留空。 - 4
- 可选。如果
ptpClockThreshold小节不存在,则默认值用于ptpClockThreshold字段。小节显示默认的ptpClockThreshold值。ptpClockThreshold值配置 PTP master 时钟在触发 PTP 事件前的时长。holdOverTimeout是在 PTP master clock 断开连接时,PTP 时钟事件状态更改为FREERUN前的时间值(以秒为单位)。maxOffsetThreshold和minOffsetThreshold设置以纳秒为单位,它们与CLOCK_REALTIME(phc2sys) 或 master 偏移 (ptp4l) 的值进行比较。当ptp4l或phc2sys偏移值超出这个范围时,PTP 时钟状态被设置为FREERUN。当偏移值在这个范围内时,PTP 时钟状态被设置为LOCKED。
5.3.4. PTP 事件 REST API v2 消费者应用程序参考 复制链接链接已复制到粘贴板!
PTP 事件消费者应用程序需要以下功能:
-
使用
POST处理程序运行的 Web 服务,以接收云原生 PTP 事件 JSON 有效负载 -
订阅 PTP 事件制作者的
createSubscription功能 -
getCurrentState功能轮询 PTP 事件制作者的当前状态
以下示例 Go 片断演示了这些要求:
Go 中的 PTP 事件消费者服务器功能示例
Go 中的 PTP 事件 createSubscription 功能示例
- 1
- 将
<node_name>替换为正在生成 PTP 事件的节点 FQDN。例如,compute-1.example.com。
Go 中的 PTP 事件消费者 getCurrentState 功能示例
- 1
- 将
<node_name>替换为正在生成 PTP 事件的节点 FQDN。例如,compute-1.example.com。
5.3.5. 使用 PTP 事件 REST API v2 引用事件消费者部署和服务 CR 复制链接链接已复制到粘贴板!
在部署您的 PTP 事件消费者应用程序来与 PTP 事件 REST API v2 一起使用时,使用 PTP 事件消费者自定义资源 (CR) 示例作为一个参考。
仓库云事件消费者命名空间
参考云事件消费者部署
参考云事件消费者服务帐户
apiVersion: v1 kind: ServiceAccount metadata: name: consumer-sa namespace: cloud-events
apiVersion: v1
kind: ServiceAccount
metadata:
name: consumer-sa
namespace: cloud-events
参考云事件消费者服务
5.3.6. 使用 REST API v2 订阅 PTP 事件 复制链接链接已复制到粘贴板!
部署 cloud-event-consumer 应用程序容器,并将 cloud-event-consumer 应用程序订阅到 PTP 事件,这些事件由 PTP Operator 管理的 pod 中的 cloud-event-proxy 容器发布。
通过将 POST 请求发送到 http://ptp-event-publisher-service-NODE_NAME.openshift-ptp.svc.cluster.local:9043/api/ocloudNotifications/v2/subscriptions 传递适当的订阅请求有效负载,将消费者应用程序订阅到 PTP 事件。
9043 是 PTP 事件制作者 pod 中部署的 cloud-event-proxy 容器的默认端口。您可以根据需要为应用程序配置不同的端口。
5.3.7. 验证 PTP 事件 REST API v2 消费者应用程序是否收到事件 复制链接链接已复制到粘贴板!
验证应用程序 pod 中的 cloud-event-consumer 容器是否正在接收 Precision Time Protocol (PTP) 事件。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您已以具有
cluster-admin权限的用户身份登录。 - 已安装并配置了 PTP Operator。
- 您已部署了云事件应用程序 pod 和 PTP 事件消费者应用程序。
流程
检查部署的事件消费者应用的日志。例如,运行以下命令:
oc -n cloud-events logs -f deployment/cloud-consumer-deployment
$ oc -n cloud-events logs -f deployment/cloud-consumer-deploymentCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选。使用
linuxptp-daemon部署中的oc和 port-forwarding 端口9043来测试 REST API。例如,运行以下命令:oc port-forward -n openshift-ptp ds/linuxptp-daemon 9043:9043
$ oc port-forward -n openshift-ptp ds/linuxptp-daemon 9043:9043Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Forwarding from 127.0.0.1:9043 -> 9043 Forwarding from [::1]:9043 -> 9043 Handling connection for 9043
Forwarding from 127.0.0.1:9043 -> 9043 Forwarding from [::1]:9043 -> 9043 Handling connection for 9043Copy to Clipboard Copied! Toggle word wrap Toggle overflow 打开新的 shell 提示符并测试 REST API v2 端点:
curl -X GET http://localhost:9043/api/ocloudNotifications/v2/health
$ curl -X GET http://localhost:9043/api/ocloudNotifications/v2/healthCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
OK
OKCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.8. 监控 PTP 快速事件指标 复制链接链接已复制到粘贴板!
您可以从运行 linuxptp-daemon 的集群节点监控 PTP 快速事件指标。您还可以使用预先配置和自我更新的 Prometheus 监控堆栈来监控 OpenShift Container Platform Web 控制台中的 PTP 快速事件指标。
先决条件
-
安装 OpenShift Container Platform CLI
oc。 -
以具有
cluster-admin特权的用户身份登录。 - 在具有 PTP 功能硬件的节点上安装和配置 PTP Operator。
流程
运行以下命令,为节点启动 debug pod:
oc debug node/<node_name>
$ oc debug node/<node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查
linuxptp-daemon容器公开的 PTP 指标。例如,运行以下命令:curl http://localhost:9091/metrics
sh-4.4# curl http://localhost:9091/metricsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选。您还可以在
cloud-event-proxy容器的日志中找到 PTP 事件。例如,运行以下命令:oc logs -f linuxptp-daemon-cvgr6 -n openshift-ptp -c cloud-event-proxy
$ oc logs -f linuxptp-daemon-cvgr6 -n openshift-ptp -c cloud-event-proxyCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
要在 OpenShift Container Platform web 控制台中查看 PTP 事件,请复制您要查询的 PTP 指标的名称,如
openshift_ptp_offset_ns。 - 在 OpenShift Container Platform web 控制台中点 Observe → Metrics。
- 将 PTP 指标名称粘贴到 Expression 字段中,然后点 Run query。
5.3.9. PTP 快速事件指标参考 复制链接链接已复制到粘贴板!
下表描述了运行 linuxptp-daemon 服务的集群节点可用的 PTP 快速事件指标。
| 指标 | 描述 | Example |
|---|---|---|
|
|
返回接口的 PTP 时钟类。对于 PTP 时钟类的可能值为:6 ( |
|
|
|
返回接口的当前 PTP 时钟状态。PTP 时钟状态的可能值为 |
|
|
| 返回主时钟发送计时数据包和接收计时数据包之间的延迟(以纳秒为单位)。 |
|
|
|
当不同 NIC 上有多个时间源时,返回高可用性系统时钟的当前状态。可能的值为 0 ( |
|
|
|
以纳秒为单位返回 2 PTP 时钟之间的频率调整。例如,在上游时钟和 NIC 之间,系统时钟和 NIC 之间,或在 PTP 硬件时钟( |
|
|
|
返回为接口配置的 PTP 时钟角色。可能的值包括 0 ( |
|
|
|
返回 2 时钟或接口之间的最大偏移量(以纳秒为单位)。例如,在上游 GNSS 时钟和 NIC ( |
|
|
| 返回 DPLL 时钟或 GNSS 时钟源和 NIC 硬件时钟之间的偏移量。 |
|
|
|
返回 |
|
|
| 返回显示 PTP 进程是否正在运行的状态代码。 |
|
|
|
为
|
|
5.3.9.1. 只有在启用 T-GM 时,PTP 快速事件指标 复制链接链接已复制到粘贴板!
下表描述了仅在启用 PTP grandmaster 时钟 (T-GM) 时可用的 PTP 快速事件指标。
| 指标 | 描述 | Example |
|---|---|---|
|
|
返回 NIC 的数字阶段锁定循环(DPLL)频率的当前状态。可能的值为 -1 ( |
|
|
|
返回 NMEA 连接的当前状态。NMEA 是 1PPS NIC 连接使用的协议。可能的值有 0 ( |
|
|
|
返回 NIC 的 DPLL 阶段的状态。可能的值为 -1 ( |
|
|
|
返回 NIC 1PPS 连接的当前状态。您可以使用 1PPS 连接在连接的 NIC 之间同步计时。可能的值有 0 ( |
|
|
|
返回全局导航 Satellite 系统(GNSS)连接的当前状态。GNSS 在全局范围内提供基于 satellite 的位置、导航和计时服务。可能的值包括 0 ( |
|
5.4. PTP 事件 REST API v2 参考 复制链接链接已复制到粘贴板!
使用以下 REST API v2 端点,将 cloud-event-consumer 应用程序订阅到 Precision Time Protocol (PTP) 事件,在 PTP 事件制作者 pod 中的 http://localhost:9043/api/ocloudNotifications/v2 中发布。
api/ocloudNotifications/v2/subscriptions-
POST:创建新订阅 -
GET:删除订阅列表 -
DELETE:删除所有订阅
-
api/ocloudNotifications/v2/subscriptions/{subscription_id}-
GET:返回指定订阅 ID 的详情 -
DELETE:删除与指定订阅 ID 关联的订阅
-
api/ocloudNotifications/v2/health-
GET:返回ocloudNotificationsAPI 的健康状况
-
api/ocloudNotifications/v2/publishers-
GET:返回集群节点的 PTP 事件发布程序列表
-
api/ocloudnotifications/v2/{resource_address}/CurrentState-
GET:返回由{resouce_address}指定的事件类型的当前状态。
-
5.4.1. PTP 事件 REST API v2 端点 复制链接链接已复制到粘贴板!
5.4.1.1. api/ocloudNotifications/v2/subscriptions 复制链接链接已复制到粘贴板!
HTTP 方法
GET api/ocloudNotifications/v2/subscriptions
描述
返回订阅列表。如果订阅存在,则返回 200 OK 状态代码以及订阅列表。
API 响应示例
HTTP 方法
POST api/ocloudNotifications/v2/subscriptions
描述
通过传递适当的有效负载来为所需的事件创建新订阅。
您可以订阅以下 PTP 事件:
-
sync-state事件 -
lock-state事件 -
gnss-sync-status events事件 -
os-clock-sync-state事件 -
clock-class事件
| 参数 | 类型 |
|---|---|
| subscription | data |
sync-state 订阅有效负载示例
{
"EndpointUri": "http://consumer-events-subscription-service.cloud-events.svc.cluster.local:9043/event",
"ResourceAddress": "/cluster/node/{node_name}/sync/sync-status/sync-state"
}
{
"EndpointUri": "http://consumer-events-subscription-service.cloud-events.svc.cluster.local:9043/event",
"ResourceAddress": "/cluster/node/{node_name}/sync/sync-status/sync-state"
}
PTP lock-state 事件订阅有效负载示例
{
"EndpointUri": "http://consumer-events-subscription-service.cloud-events.svc.cluster.local:9043/event",
"ResourceAddress": "/cluster/node/{node_name}/sync/ptp-status/lock-state"
}
{
"EndpointUri": "http://consumer-events-subscription-service.cloud-events.svc.cluster.local:9043/event",
"ResourceAddress": "/cluster/node/{node_name}/sync/ptp-status/lock-state"
}
PTP gnss-sync-status 事件订阅有效负载示例
{
"EndpointUri": "http://consumer-events-subscription-service.cloud-events.svc.cluster.local:9043/event",
"ResourceAddress": "/cluster/node/{node_name}/sync/gnss-status/gnss-sync-status"
}
{
"EndpointUri": "http://consumer-events-subscription-service.cloud-events.svc.cluster.local:9043/event",
"ResourceAddress": "/cluster/node/{node_name}/sync/gnss-status/gnss-sync-status"
}
PTP os-clock-sync-state 事件订阅有效负载示例
{
"EndpointUri": "http://consumer-events-subscription-service.cloud-events.svc.cluster.local:9043/event",
"ResourceAddress": "/cluster/node/{node_name}/sync/sync-status/os-clock-sync-state"
}
{
"EndpointUri": "http://consumer-events-subscription-service.cloud-events.svc.cluster.local:9043/event",
"ResourceAddress": "/cluster/node/{node_name}/sync/sync-status/os-clock-sync-state"
}
PTP clock-class 事件订阅有效负载示例
{
"EndpointUri": "http://consumer-events-subscription-service.cloud-events.svc.cluster.local:9043/event",
"ResourceAddress": "/cluster/node/{node_name}/sync/ptp-status/clock-class"
}
{
"EndpointUri": "http://consumer-events-subscription-service.cloud-events.svc.cluster.local:9043/event",
"ResourceAddress": "/cluster/node/{node_name}/sync/ptp-status/clock-class"
}
API 响应示例
可能会出现以下订阅状态事件:
| 状态代码 | 描述 |
|---|---|
|
| 表示已创建了订阅 |
|
| 表示服务器无法处理请求,因为它是不正确的或无效 |
|
| 表示订阅资源不可用 |
|
| 表示订阅已存在 |
HTTP 方法
DELETE api/ocloudNotifications/v2/subscriptions
描述
删除所有订阅。
API 响应示例
{
"status": "deleted all subscriptions"
}
{
"status": "deleted all subscriptions"
}
HTTP 方法
GET api/ocloudNotifications/v2/subscriptions/{subscription_id}
描述
返回 ID 为 subscription_id 的订阅详情。
| 参数 | 类型 |
|---|---|
|
| string |
API 响应示例
HTTP 方法
DELETE api/ocloudNotifications/v2/subscriptions/{subscription_id}
描述
使用 ID subscription_id 删除订阅。
| 参数 | 类型 |
|---|---|
|
| string |
| HTTP 响应 | 描述 |
|---|---|
| 204 无内容 | 成功 |
5.4.1.3. api/ocloudNotifications/v2/health 复制链接链接已复制到粘贴板!
HTTP 方法
GET api/ocloudNotifications/v2/health/
描述
返回 ocloudNotifications REST API 的健康状况。
| HTTP 响应 | 描述 |
|---|---|
| 200 OK | 成功 |
5.4.1.4. api/ocloudNotifications/v2/publishers 复制链接链接已复制到粘贴板!
HTTP 方法
GET api/ocloudNotifications/v2/publishers
描述
返回集群节点的发布者详情列表。当相关的设备状态改变时,系统会生成通知。
您可以组合使用设备同步状态订阅,以提供有关系统总体同步健康状况的详细视图。
API 响应示例
| HTTP 响应 | 描述 |
|---|---|
| 200 OK | 成功 |
HTTP 方法
GET api/ocloudNotifications/v2/cluster/node/{node_name}/sync/ptp-status/lock-state/CurrentState
GET api/ocloudNotifications/v2/cluster/node/{node_name}/sync/sync-status/os-clock-sync-state/CurrentState
GET api/ocloudNotifications/v2/cluster/node/{node_name}/sync/ptp-status/clock-class/CurrentState
GET api/ocloudNotifications/v2/cluster/node/{node_name}/sync/sync-status/sync-state/CurrentState
GET api/ocloudNotifications/v2/cluster/node/{node_name}/sync/gnss-status/gnss-sync-state/CurrentState
描述
返回集群节点的 os-clock-sync-state,clock-class,lock-state,gnss-sync-status, 或 sync-state 事件的当前状态。
-
os-clock-sync-state通知描述了主机操作系统时钟同步状态。可以是LOCKED或FREERUN状态。 -
clock-class通知描述了 PTP 时钟类的当前状态。 -
lock-state通知描述了 PTP 设备锁定状态的当前状态。可以处于LOCKED、HOLDOVER或FREERUN状态。 -
sync-state通知描述了最少 PTP 时钟lock-state和os-clock-sync-state状态同步的当前状态。 -
GNSS-sync-status通知描述了 GNSS 时钟同步状态。
| 参数 | 类型 |
|---|---|
|
| string |
lock-state API 响应示例
os-clock-sync-state API 响应示例
clock-class API 响应示例
sync-state API 响应示例
gnss-sync-state API 响应示例
5.5. 使用 REST API v1 开发 PTP 事件消费者应用程序 复制链接链接已复制到粘贴板!
在裸机集群节点上开发使用 Precision Time Protocol (PTP)事件的消费者应用程序时,您可以在单独的应用程序 pod 中部署消费者应用程序。消费者应用程序使用 PTP 事件 REST API v1 订阅 PTP 事件。
以下信息提供了开发使用 PTP 事件的消费者应用程序的一般指导。完整的事件消费者应用示例超出了此信息的范围。
PTP 事件 REST API v1 和事件消费者应用程序 sidecar 是一个已弃用的功能。弃用的功能仍然包含在 OpenShift Container Platform 中,并将继续被支持。但是,这个功能会在以后的发行版本中被删除,且不建议在新的部署中使用。
有关 OpenShift Container Platform 中已弃用或删除的主要功能的最新列表,请参阅 OpenShift Container Platform 发行注记中已弃用和删除的功能部分。
5.5.1. 关于 PTP 快速事件通知框架 复制链接链接已复制到粘贴板!
使用 Precision Time Protocol (PTP) 快速事件 REST API v2 将集群应用程序订阅到裸机集群节点生成的 PTP 事件。
快速事件通知框架使用 REST API 进行通信。PTP 事件 REST API v1 和 v2 基于 O-RAN O-Cloud Notification API Specification for Event Consumers 4.0,它包括在 O-RAN ALLIANCE Specifications 中。
只有 PTP 事件 REST API v2 符合 O-RAN v4。
5.5.2. 使用 PTP 事件 REST API v1 检索 PTP 事件 复制链接链接已复制到粘贴板!
应用程序以 sidecar 模式运行 cloud-event-proxy 容器,以订阅 PTP 事件。cloud-event-proxy sidecar 容器可以访问与主应用程序容器相同的资源,而无需使用主应用程序的任何资源,且没有大量延迟。
图 5.6. 带有消费者 sidecar 和 HTTP 消息传输的 PTP 快速事件概述
-
事件在集群主机上生成 -
PTP Operator 管理的 pod 中的
linuxptp-daemon作为 KubernetesDaemonSet运行,并管理各种linuxptp进程 (ptp4l、phc2sys,以及可选的用于 grandmaster 时钟ts2phc)。linuxptp-daemon将事件传递给 UNIX 域套接字。 -
事件传递给 cloud-event-proxy sidecar -
PTP 插件从 UNIX 域套接字读取事件,并将其传递给 PTP Operator 管理的 pod 中的
cloud-event-proxysidecar。cloud-event-proxy将 Kubernetes 基础架构的事件提供给具有低延迟的 Cloud-Native Network Function (CNF)。 -
事件是持久的 -
PTP Operator 管理的 pod 中的
cloud-event-proxysidecar 处理事件,并使用 REST API 发布云原生事件。 -
消息已传输 -
消息传输程序通过 HTTP 将事件传送到应用程序 pod 中的
cloud-event-proxysidecar。 -
来自 REST API 的事件 -
Application pod 中的
cloud-event-proxysidecar 处理事件并使用 REST API 使其可用。 -
消费者应用程序请求订阅并接收订阅的事件 -
消费者应用程序向应用程序 pod 中的
cloud-event-proxysidecar 发送 API 请求,以创建 PTP 事件订阅。cloud-event-proxysidecar 为订阅中指定的资源创建一个 HTTP 消息传递监听程序协议。
应用程序 pod 中的 cloud-event-proxy sidecar 接收来自 PTP Operator 管理的 pod 的事件,取消封装云事件对象以检索数据,并将事件发布到消费者应用程序。消费者应用程序侦听资源限定符中指定的地址,并接收和处理 PTP 事件。
5.5.3. 配置 PTP 快速事件通知发布程序 复制链接链接已复制到粘贴板!
要为集群中的网络接口启动使用 PTP fast 事件通知,您必须在 PTP Operator PtpOperatorConfig 自定义资源 (CR) 中启用快速事件发布程序,并在您创建的 PtpConfig CR 中配置 ptpClockThreshold 值。
先决条件
-
已安装 OpenShift Container Platform CLI (
oc)。 -
您已以具有
cluster-admin权限的用户身份登录。 - 已安装 PTP Operator。
流程
修改默认 PTP Operator 配置以启用 PTP 快速事件。
在
ptp-operatorconfig.yaml文件中保存以下 YAML:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 通过将
enableEventPublisher设置为true来启用 PTP 快速事件通知。
注意在 OpenShift Container Platform 4.13 或更高版本中,当将 HTTP 传输用于 PTP 事件时,您不需要在
PtpOperatorConfig资源中设置spec.ptpEventConfig.transportHost字段。更新
PtpOperatorConfigCR:oc apply -f ptp-operatorconfig.yaml
$ oc apply -f ptp-operatorconfig.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
为 PTP 启用接口创建
PtpConfig自定义资源(CR),并设置ptpClockThreshold和ptp4lOpts所需的值。以下 YAML 演示了您必须在PtpConfigCR 中设置的必要值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 附加
--summary_interval -4以使用 PTP 快速事件。 - 2
- 所需的
phc2sysOpts值。-m将消息输出到stdout。linuxptp-daemonDaemonSet解析日志并生成 Prometheus 指标。 - 3
- 指定一个字符串,其中包含要替换默认的
/etc/ptp4l.conf文件的配置。要使用默认配置,请将字段留空。 - 4
- 可选。如果
ptpClockThreshold小节不存在,则默认值用于ptpClockThreshold字段。小节显示默认的ptpClockThreshold值。ptpClockThreshold值配置 PTP master 时钟在触发 PTP 事件前的时长。holdOverTimeout是在 PTP master clock 断开连接时,PTP 时钟事件状态更改为FREERUN前的时间值(以秒为单位)。maxOffsetThreshold和minOffsetThreshold设置以纳秒为单位,它们与CLOCK_REALTIME(phc2sys) 或 master 偏移 (ptp4l) 的值进行比较。当ptp4l或phc2sys偏移值超出这个范围时,PTP 时钟状态被设置为FREERUN。当偏移值在这个范围内时,PTP 时钟状态被设置为LOCKED。
5.5.4. PTP 事件消费者应用程序参考 复制链接链接已复制到粘贴板!
PTP 事件消费者应用程序需要以下功能:
-
使用
POST处理程序运行的 Web 服务,以接收云原生 PTP 事件 JSON 有效负载 -
订阅 PTP 事件制作者的
createSubscription功能 -
getCurrentState功能轮询 PTP 事件制作者的当前状态
以下示例 Go 片断演示了这些要求:
Go 中的 PTP 事件消费者服务器功能示例
Go 中的 PTP 事件 createSubscription 功能示例
- 1
- 将
<node_name>替换为正在生成 PTP 事件的节点 FQDN。例如,compute-1.example.com。
Go 中的 PTP 事件消费者 getCurrentState 功能示例
5.5.5. 引用 cloud-event-proxy 部署和服务 CR 复制链接链接已复制到粘贴板!
在部署 PTP 事件消费者应用程序时,使用 cloud-event-proxy 部署和订阅者服务 CR 示例作为参考。
使用 HTTP 传输引用 cloud-event-proxy 部署
参考 cloud-event-proxy 订阅者服务
5.5.6. 使用 REST API v1 订阅 PTP 事件 复制链接链接已复制到粘贴板!
在单独的应用程序 pod 中部署 cloud-event-consumer 应用程序容器和 cloud-event-proxy sidecar 容器。
将 cloud-event-consumer 应用程序订阅到 PTP 事件,这些事件由 cloud-event-proxy 容器发布,位于应用程序 pod 中的 http://localhost:8089/api/ocloudNotifications/v1/。
9089 是在应用程序 Pod 中部署的 cloud-event-consumer 容器的默认端口。您可以根据需要为应用程序配置不同的端口。
5.5.7. 验证 PTP 事件 REST API v1 消费者应用程序是否收到事件 复制链接链接已复制到粘贴板!
验证应用程序 pod 中的 cloud-event-proxy 容器是否接收 PTP 事件。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您已以具有
cluster-admin权限的用户身份登录。 - 已安装并配置了 PTP Operator。
流程
获取活跃的
linuxptp-daemonpod 列表。运行以下命令:oc get pods -n openshift-ptp
$ oc get pods -n openshift-ptpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE linuxptp-daemon-2t78p 3/3 Running 0 8h linuxptp-daemon-k8n88 3/3 Running 0 8h
NAME READY STATUS RESTARTS AGE linuxptp-daemon-2t78p 3/3 Running 0 8h linuxptp-daemon-k8n88 3/3 Running 0 8hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,访问所需的消费者端的
cloud-event-proxy容器的指标:oc exec -it <linuxptp-daemon> -n openshift-ptp -c cloud-event-proxy -- curl 127.0.0.1:9091/metrics
$ oc exec -it <linuxptp-daemon> -n openshift-ptp -c cloud-event-proxy -- curl 127.0.0.1:9091/metricsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
- <linuxptp-daemon>
指定您要查询的 pod,例如
linuxptp-daemon-2t78p。输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.5.8. 监控 PTP 快速事件指标 复制链接链接已复制到粘贴板!
您可以从运行 linuxptp-daemon 的集群节点监控 PTP 快速事件指标。您还可以使用预先配置和自我更新的 Prometheus 监控堆栈来监控 OpenShift Container Platform Web 控制台中的 PTP 快速事件指标。
先决条件
-
安装 OpenShift Container Platform CLI
oc。 -
以具有
cluster-admin特权的用户身份登录。 - 在具有 PTP 功能硬件的节点上安装和配置 PTP Operator。
流程
运行以下命令,为节点启动 debug pod:
oc debug node/<node_name>
$ oc debug node/<node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查
linuxptp-daemon容器公开的 PTP 指标。例如,运行以下命令:curl http://localhost:9091/metrics
sh-4.4# curl http://localhost:9091/metricsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选。您还可以在
cloud-event-proxy容器的日志中找到 PTP 事件。例如,运行以下命令:oc logs -f linuxptp-daemon-cvgr6 -n openshift-ptp -c cloud-event-proxy
$ oc logs -f linuxptp-daemon-cvgr6 -n openshift-ptp -c cloud-event-proxyCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
要在 OpenShift Container Platform web 控制台中查看 PTP 事件,请复制您要查询的 PTP 指标的名称,如
openshift_ptp_offset_ns。 - 在 OpenShift Container Platform web 控制台中点 Observe → Metrics。
- 将 PTP 指标名称粘贴到 Expression 字段中,然后点 Run query。
5.5.9. PTP 快速事件指标参考 复制链接链接已复制到粘贴板!
下表描述了运行 linuxptp-daemon 服务的集群节点可用的 PTP 快速事件指标。
| 指标 | 描述 | Example |
|---|---|---|
|
|
返回接口的 PTP 时钟类。对于 PTP 时钟类的可能值为:6 ( |
|
|
|
返回接口的当前 PTP 时钟状态。PTP 时钟状态的可能值为 |
|
|
| 返回主时钟发送计时数据包和接收计时数据包之间的延迟(以纳秒为单位)。 |
|
|
|
当不同 NIC 上有多个时间源时,返回高可用性系统时钟的当前状态。可能的值为 0 ( |
|
|
|
以纳秒为单位返回 2 PTP 时钟之间的频率调整。例如,在上游时钟和 NIC 之间,系统时钟和 NIC 之间,或在 PTP 硬件时钟( |
|
|
|
返回为接口配置的 PTP 时钟角色。可能的值包括 0 ( |
|
|
|
返回 2 时钟或接口之间的最大偏移量(以纳秒为单位)。例如,在上游 GNSS 时钟和 NIC ( |
|
|
| 返回 DPLL 时钟或 GNSS 时钟源和 NIC 硬件时钟之间的偏移量。 |
|
|
|
返回 |
|
|
| 返回显示 PTP 进程是否正在运行的状态代码。 |
|
|
|
为
|
|
5.5.9.1. 只有在启用 T-GM 时,PTP 快速事件指标 复制链接链接已复制到粘贴板!
下表描述了仅在启用 PTP grandmaster 时钟 (T-GM) 时可用的 PTP 快速事件指标。
| 指标 | 描述 | Example |
|---|---|---|
|
|
返回 NIC 的数字阶段锁定循环(DPLL)频率的当前状态。可能的值为 -1 ( |
|
|
|
返回 NMEA 连接的当前状态。NMEA 是 1PPS NIC 连接使用的协议。可能的值有 0 ( |
|
|
|
返回 NIC 的 DPLL 阶段的状态。可能的值为 -1 ( |
|
|
|
返回 NIC 1PPS 连接的当前状态。您可以使用 1PPS 连接在连接的 NIC 之间同步计时。可能的值有 0 ( |
|
|
|
返回全局导航 Satellite 系统(GNSS)连接的当前状态。GNSS 在全局范围内提供基于 satellite 的位置、导航和计时服务。可能的值包括 0 ( |
|
5.6. PTP events REST API v1 参考 复制链接链接已复制到粘贴板!
使用以下 Precision Time Protocol (PTP) 快速事件 REST API v1 端点,将 cloud-event-consumer 应用程序订阅到 PTP 事件,由 cloud-event-proxy 容器发布,位于应用程序 pod 中的 http://localhost:8089/api/ocloudNotifications/v1/。
PTP 事件 REST API v1 和事件消费者应用程序 sidecar 是一个已弃用的功能。弃用的功能仍然包含在 OpenShift Container Platform 中,并将继续被支持。但是,这个功能会在以后的发行版本中被删除,且不建议在新的部署中使用。
有关 OpenShift Container Platform 中已弃用或删除的主要功能的最新列表,请参阅 OpenShift Container Platform 发行注记中已弃用和删除的功能部分。
可用的 API 端点如下:
api/ocloudNotifications/v1/subscriptions-
POST:创建新订阅 -
GET:删除订阅列表 -
DELETE:删除所有订阅
-
api/ocloudNotifications/v1/subscriptions/{subscription_id}-
GET:返回指定订阅 ID 的详情 -
DELETE:删除与指定订阅 ID 关联的订阅
-
api/ocloudNotifications/v1/health-
GET:返回ocloudNotificationsAPI 的健康状况
-
api/ocloudNotifications/v1/publishers-
GET:返回集群节点的 PTP 事件发布程序列表
-
api/ocloudnotifications/v1/{resource_address}/CurrentState-
GET:返回以下事件类型的当前状态:sync-state,os-clock-sync-state,clock-class,lock-state, 或gnss-sync-status事件
-
5.6.1. PTP 事件 REST API v1 端点 复制链接链接已复制到粘贴板!
5.6.1.1. api/ocloudNotifications/v1/subscriptions 复制链接链接已复制到粘贴板!
HTTP 方法
GET api/ocloudNotifications/v1/subscriptions
描述
返回订阅列表。如果订阅存在,则返回 200 OK 状态代码以及订阅列表。
API 响应示例
HTTP 方法
POST api/ocloudNotifications/v1/subscriptions
描述
通过传递适当的有效负载来为所需的事件创建新订阅。如果订阅成功创建,或者已存在,则返回 201 Created 状态代码。您可以订阅以下 PTP 事件:
-
lock-state事件 -
os-clock-sync-state事件 -
clock-class事件 -
gnss-sync-status事件 -
sync-state事件
| 参数 | 类型 |
|---|---|
| subscription | data |
PTP 事件订阅有效负载示例
{
"endpointUri": "http://localhost:8989/event",
"resource": "/cluster/node/compute-1.example.com/ptp"
}
{
"endpointUri": "http://localhost:8989/event",
"resource": "/cluster/node/compute-1.example.com/ptp"
}
PTP lock-state 事件订阅有效负载示例
{
"endpointUri": "http://localhost:8989/event",
"resource": "/cluster/node/{node_name}/sync/ptp-status/lock-state"
}
{
"endpointUri": "http://localhost:8989/event",
"resource": "/cluster/node/{node_name}/sync/ptp-status/lock-state"
}
PTP os-clock-sync-state 事件订阅有效负载示例
{
"endpointUri": "http://localhost:8989/event",
"resource": "/cluster/node/{node_name}/sync/sync-status/os-clock-sync-state"
}
{
"endpointUri": "http://localhost:8989/event",
"resource": "/cluster/node/{node_name}/sync/sync-status/os-clock-sync-state"
}
PTP clock-class 事件订阅有效负载示例
{
"endpointUri": "http://localhost:8989/event",
"resource": "/cluster/node/{node_name}/sync/ptp-status/clock-class"
}
{
"endpointUri": "http://localhost:8989/event",
"resource": "/cluster/node/{node_name}/sync/ptp-status/clock-class"
}
PTP gnss-sync-status 事件订阅有效负载示例
{
"endpointUri": "http://localhost:8989/event",
"resource": "/cluster/node/{node_name}/sync/gnss-status/gnss-sync-status"
}
{
"endpointUri": "http://localhost:8989/event",
"resource": "/cluster/node/{node_name}/sync/gnss-status/gnss-sync-status"
}
sync-state 订阅有效负载示例
{
"endpointUri": "http://localhost:8989/event",
"resource": "/cluster/node/{node_name}/sync/sync-status/sync-state"
}
{
"endpointUri": "http://localhost:8989/event",
"resource": "/cluster/node/{node_name}/sync/sync-status/sync-state"
}
HTTP 方法
DELETE api/ocloudNotifications/v1/subscriptions
描述
删除所有订阅。
API 响应示例
{
"status": "deleted all subscriptions"
}
{
"status": "deleted all subscriptions"
}
HTTP 方法
GET api/ocloudNotifications/v1/subscriptions/{subscription_id}
描述
返回 ID 为 subscription_id 的订阅详情。
| 参数 | 类型 |
|---|---|
|
| string |
API 响应示例
HTTP 方法
DELETE api/ocloudNotifications/v1/subscriptions/{subscription_id}
描述
使用 ID subscription_id 删除订阅。
| 参数 | 类型 |
|---|---|
|
| string |
API 响应示例
{
"status": "OK"
}
{
"status": "OK"
}
5.6.1.3. api/ocloudNotifications/v1/health 复制链接链接已复制到粘贴板!
HTTP 方法
GET api/ocloudNotifications/v1/health/
描述
返回 ocloudNotifications REST API 的健康状况。
API 响应示例
OK
OK
5.6.1.4. api/ocloudNotifications/v1/publishers 复制链接链接已复制到粘贴板!
api/ocloudNotifications/v1/publishers 端点仅对于 PTP Operator 管理的 pod 中的 cloud-event-proxy 容器可用。它对于应用程序 Pod 中的消费者应用程序不可用。
HTTP 方法
GET api/ocloudNotifications/v1/publishers
描述
返回集群节点的发布者详情列表。当相关的设备状态改变时,系统会生成通知。
您可以组合使用设备同步状态订阅,以提供有关系统总体同步健康状况的详细视图。
API 响应示例
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/clock-class/CurrentState
GET api/ocloudNotifications/v1/cluster/node/{node_name}/sync/sync-status/sync-state/CurrentState
GET api/ocloudNotifications/v1/cluster/node/{node_name}/sync/gnss-status/gnss-sync-state/CurrentState
描述
返回集群节点的 os-clock-sync-state,clock-class,lock-state,gnss-sync-status, 或 sync-state 事件的当前状态。
-
os-clock-sync-state通知描述了主机操作系统时钟同步状态。可以是LOCKED或FREERUN状态。 -
clock-class通知描述了 PTP 时钟类的当前状态。 -
lock-state通知描述了 PTP 设备锁定状态的当前状态。可以处于LOCKED、HOLDOVER或FREERUN状态。 -
sync-state通知描述了至少ptp-status/lock-state和sync-status/os-clock-sync-state端点同步的当前状态。 -
GNSS-sync-status通知描述了 GNSS 时钟同步状态。
| 参数 | 类型 |
|---|---|
|
| string |
lock-state API 响应示例
os-clock-sync-state API 响应示例
clock-class API 响应示例
sync-state API 响应示例
gnss-sync-status API 响应示例
Legal Notice
复制链接链接已复制到粘贴板!
Copyright © 2025 Red Hat
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.