高级网络
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(maximum transmission unit)。这一更改具有破坏性,因为必须重启集群节点才能完成 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.20.0。有关 Butane 的信息,请参阅"使用 Butane 创建机器配置"。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
worker-interface.bu文件中创建以下 Butane 配置:注意您在配置文件中指定的 Butane 版本应与 OpenShift Container Platform 版本匹配,并且始终以
0结尾。例如:4.20.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 章 BGP 路由 复制链接链接已复制到粘贴板!
5.1. 关于 BGP 路由 复制链接链接已复制到粘贴板!
此功能为集群提供原生边框网关协议(BGP)路由功能。
如果您使用 MetalLB Operator,且 metallb-system 命名空间中有由集群管理员或 MetalLB Operator 以外的第三方集群组件创建的现有 FRRConfiguration CR,您必须确保它们被复制到 openshift-frr-k8s 命名空间,或者这些第三方集群组件使用新命名空间。如需更多信息,请参阅迁移 FRR-K8s 资源。
5.1.1. 关于边框网关协议(BGP)路由 复制链接链接已复制到粘贴板!
OpenShift Container Platform 通过 FRRouting (FRR)支持 BGP 路由,它是一个免费的开源互联网路由协议套件,用于 Linux、UNIX 和类似操作系统。FRR-K8s 是基于 Kubernetes 的守护进程集,通过与 Kubernetes 兼容的方式公开 FRR API 的子集。作为集群管理员,您可以使用 FRRConfiguration 自定义资源(CR)来访问 FRR 服务。
5.1.1.1. 支持的平台 复制链接链接已复制到粘贴板!
以下基础架构类型支持 BGP 路由:
- 裸机
BGP 路由需要您为网络供应商正确配置 BGP。网络供应商的中断或错误配置可能会导致集群网络中断。
5.1.1.2. MetalLB Operator 中使用的注意事项 复制链接链接已复制到粘贴板!
MetalLB Operator 作为集群的附加组件安装。MetalLB Operator 的部署会自动启用 FRR-K8s 作为额外的路由功能供应商,并使用此功能安装的 FRR-K8s 守护进程。
在升级到 4.18 之前,metallb-system 命名空间中的任何现有 FRRConfiguration 都不受 MetalLB operator 管理(由集群管理员添加或任何其他组件)都需要手动复制到 openshift-frr-k8s 命名空间,如有必要创建命名空间。
如果您使用 MetalLB Operator,且在由集群管理员或 MetalLB Operator 以外的第三方集群组件创建的 metallb-system 命名空间中已有 FRRConfiguration CR,则必须:
-
确保这些现有的
FRRConfigurationCR 复制到openshift-frr-k8s命名空间中。 -
确保第三方集群组件为它们创建的
FRRConfigurationCR 使用新命名空间。
5.1.1.3. Cluster Network Operator 配置 复制链接链接已复制到粘贴板!
Cluster Network Operator API 会公开以下 API 字段来配置 BGP 路由:
-
spec.additionalRoutingCapabilities:为集群启用 FRR-K8s 守护进程部署,它们可以独立于路由公告使用。启用后,FRR-K8s 守护进程会在所有节点上部署。
5.1.1.4. BGP 路由自定义资源 复制链接链接已复制到粘贴板!
以下自定义资源用于配置 BGP 路由:
FRRConfiguration- 此自定义资源为 BGP 路由定义 FRR 配置。此 CR 针对于特定命名空间。
5.1.2. 配置 FRRConfiguration CRD 复制链接链接已复制到粘贴板!
以下部分提供了使用 FRRConfiguration 自定义资源 (CR) 的参考示例。
5.1.2.1. router 字段 复制链接链接已复制到粘贴板!
您可以使用 router 字段配置多个路由器,每个虚拟路由和转发 (VRF) 资源对应一个。对于每个路由器,您必须定义自主系统号 (ASN)。
您还可以定义要连接的边框网关协议 (BGP) 邻居列表,如下例所示:
FRRConfiguration CR 示例
5.1.2.2. toAdvertise 字段 复制链接链接已复制到粘贴板!
默认情况下,FRR-K8s 不会公告配置为路由器配置的前缀。要公告它们,您可以使用 toAdvertise 字段。
您可以公告前缀的子集,如下例所示:
FRRConfiguration CR 示例
- 1
- 广告一个前缀子集。
以下示例演示了如何公告所有前缀:
FRRConfiguration CR 示例
- 1
- 公告所有前缀。
5.1.2.3. toReceive 字段 复制链接链接已复制到粘贴板!
默认情况下,FRR-K8s 不处理邻居公告的任何前缀。您可以使用 toReceive 字段来处理此类地址。
您可以为前缀的子集配置,如下例所示:
FRRConfiguration CR 示例
以下示例将 FRR 配置为处理声明的所有前缀:
FRRConfiguration CR 示例
5.1.2.4. bgp 字段 复制链接链接已复制到粘贴板!
您可以使用 bgp 字段定义各种 BFD 配置集,并将它们与邻居关联。在以下示例中,BFD 备份 BGP 会话,FRR 可以检测链接失败:
FRRConfiguration CR 示例
5.1.2.5. nodeSelector 字段 复制链接链接已复制到粘贴板!
默认情况下,FRR-K8s 将配置应用到守护进程运行的所有节点。您可以使用 nodeSelector 字段指定要应用配置的节点。例如:
FRRConfiguration CR 示例
5.1.2.6. interface 字段 复制链接链接已复制到粘贴板!
您可以使用 interface 字段配置 unnumbered BGP peering,使用以下示例配置:
FRRConfiguration CR 示例
- 1
- 激活未编号的 BGP 对等。
要使用 interface 字段,您必须在两个 BGP 对等点之间建立点对点、第 2 层连接。您可以将未编号的 BGP 对等用于 IPv4、IPv6 或双栈,但您必须启用 IPv6 RAs (Router Advertisements)。每个接口都限制为一个 BGP 连接。
如果使用此字段,则无法在 spec.bgp.routers.neighbors.address 字段中指定一个值。
FRRConfiguration 自定义资源的字段在下表中描述:
| 字段 | 类型 | 描述 |
|---|---|---|
|
|
| 指定 FRR 来配置的路由器(每个 VRF 一个)。 |
|
|
| 用于会话的本地后端的自主系统编号(ASN)。 |
|
|
|
指定 |
|
|
| 指定用于建立来自此路由器会话的主机 vrf。 |
|
|
| 指定要建立 BGP 会话的邻居。 |
|
|
|
指定用于会话远程结尾的 ASN。如果使用此字段,则无法在 |
|
|
|
检测用于会话远程端的 ASN,而不明确设置它。为具有相同 ASN 的邻居指定 |
|
|
|
指定要建立会话的 IP 地址。如果使用此字段,则无法在 |
|
|
| 指定建立会话时使用的接口名称。使用此字段配置未编号的 BGP 对等。必须有两个 BGP 对等点之间的点对点、第 2 层连接。您可以将未编号的 BGP 对等用于 IPv4、IPv6 或双栈,但您必须启用 IPv6 RAs (Router Advertisements)。每个接口都限制为一个 BGP 连接。 |
|
|
| 指定建立会话时要结束的端口。默认值为 179。 |
|
|
|
指定用来建立 BGP 会话的密码。 |
|
|
|
指定邻居的身份验证 secret 的名称。secret 必须是 "kubernetes.io/basic-auth" 类型,并且与 FRR-K8s 守护进程位于同一个命名空间中。密钥 "password" 将密码存储在 secret 中。 |
|
|
| 根据 RFC4271 指定请求的 BGP 保留时间。默认为 180s。 |
|
|
|
根据 RFC4271 指定请求的 BGP keepalive 时间。默认值为 |
|
|
| 指定 BGP 在连接尝试到邻居之间等待的时间。 |
|
|
| 指明 BGPPeer 是否离开了多跃点。 |
|
|
| 指定用于与 BGP 会话关联的 BFD 会话的 BFD Profile 名称。如果没有设置,则不会设置 BFD 会话。 |
|
|
| 表示要公告给邻居的前缀列表,以及相关的属性。 |
|
|
| 指定要公告到邻居的前缀列表。此列表必须与您在路由器中定义的前缀匹配。 |
|
|
|
指定处理前缀时要使用的模式。您可以将 |
|
|
| 指定与公告的本地首选项关联的前缀。您必须在允许公告的前缀中指定与本地首选项关联的前缀。 |
|
|
| 指定与本地首选项关联的前缀。 |
|
|
| 指定与前缀关联的本地首选项。 |
|
|
| 指定与公告的 BGP 社区关联的前缀。您必须在您要公告的前缀列表中包含与本地首选项关联的前缀。 |
|
|
| 指定与社区关联的前缀。 |
|
|
| 指定与前缀关联的社区。 |
|
|
| 指定要从邻居接收的前缀。 |
|
|
| 指定要从邻居接收的信息。 |
|
|
| 指定来自邻居的前缀。 |
|
|
|
指定处理前缀时要使用的模式。当设置为 |
|
|
| 禁用 MP BGP 以防止它将 IPv4 和 IPv6 路由划分为不同的 BGP 会话。 |
|
|
| 指定从此路由器实例公告的所有前缀。 |
|
|
| 指定配置邻居时要使用的 bfd 配置集列表。 |
|
|
| 要在配置的其他部分中引用的 BFD 配置集的名称。 |
|
|
|
指定此系统可以接收控制数据包的最小间隔(以毫秒为单位)。默认值为 |
|
|
|
指定排除 jitter 的最小传输间隔,此系统希望用来发送 BFD 控制数据包(以毫秒为单位)。默认值为 |
|
|
| 配置检测倍数以确定数据包丢失。要确定连接丢失检测计时器,请将远程传输间隔乘以这个值。 |
|
|
|
配置此系统可以处理的最小 echo receive transfer-interval (以毫秒为单位)。默认值为 |
|
|
| 启用或禁用回显传输模式。这个模式默认为禁用,在多跃点设置中不支持。 |
|
|
| 将会话标记为被动。被动会话不会尝试启动连接,并在开始回复前等待来自对等的控制数据包。 |
|
|
| 仅限多跃点会话。为传入的 BFD 控制数据包配置最低预期 TTL。 |
|
|
| 限制尝试应用此配置的节点。如果指定,则只有标签与指定选择器匹配的节点才会应用配置。如果没有指定,则所有节点都会尝试应用此配置。 |
|
|
| 定义 FRRConfiguration 的观察状态。 |
5.2. 启用 BGP 路由 复制链接链接已复制到粘贴板!
作为集群管理员,您可以为集群启用 OVN-Kubernetes 边框网关协议(BGP)路由支持。
5.2.1. 启用边框网关协议(BGP)路由 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在裸机基础架构上为集群启用边框网关协议(BGP)路由支持。
如果您将 BGP 路由与 MetalLB Operator 搭配使用,则会自动启用所需的 BGP 路由支持。您不需要手动启用 BGP 路由支持。
5.2.1.1. 启用 BGP 路由支持 复制链接链接已复制到粘贴板!
作为集群管理员,您可以为集群启用 BGP 路由支持。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin角色的用户身份登录到集群。 - 集群安装在兼容基础架构上。
流程
要启用动态路由供应商,请输入以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3. 禁用 BGP 路由 复制链接链接已复制到粘贴板!
作为集群管理员,您可以为集群启用 OVN-Kubernetes 边框网关协议(BGP)路由支持。
5.3.1. 禁用边框网关协议(BGP)路由 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在裸机基础架构上为集群禁用边框网关协议(BGP)路由支持。
5.3.1.1. 启用 BGP 路由支持 复制链接链接已复制到粘贴板!
作为集群管理员,您可以禁用集群的 BGP 路由支持。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin角色的用户身份登录到集群。 - 集群安装在兼容基础架构上。
流程
要禁用动态路由,请输入以下命令:
oc patch Network.operator.openshift.io/cluster --type=merge -p '{$ oc patch Network.operator.openshift.io/cluster --type=merge -p '{ "spec": { "additionalRoutingCapabilities": null } }'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4. 迁移 FRR-K8s 资源 复制链接链接已复制到粘贴板!
在 OpenShift Container Platform 4.17 及更早的版本下,metallb-system 命名空间中所有用户创建的 FRR-K8s 自定义资源(CR)必须迁移到 openshift-frr-k8s 命名空间。作为集群管理员,完成此流程中的步骤来迁移 FRR-K8s 自定义资源。
5.4.1. 迁移 FRR-K8s 资源 复制链接链接已复制到粘贴板!
您可以将 FRR-K8s FRRConfiguration 自定义资源从 metallb-system 命名空间迁移到 openshift-frr-k8s 命名空间。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin角色的用户身份登录到集群。
流程
当从部署了 Metal LB Operator 的 OpenShift Container Platform 版本升级时,您必须手动将自定义 FRRConfiguration 配置从 metallb-system 命名空间迁移到 openshift-frr-k8s 命名空间。要移动这些 CR,请输入以下命令:
运行以下命令来创建
openshift-frr-k8s命名空间:oc create namespace openshift-frr-k8s
$ oc create namespace openshift-frr-k8sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要自动化迁移,请创建一个名为
migrate.sh的 shell 脚本,其中包含以下内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要执行迁移,请运行以下命令:
bash migrate.sh
$ bash migrate.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要确认迁移成功,请运行以下命令:
oc get frrconfigurations.frrk8s.metallb.io -n openshift-frr-k8s
$ oc get frrconfigurations.frrk8s.metallb.io -n openshift-frr-k8sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
迁移完成后,您可以从 metallb-system 命名空间中删除 FRRConfiguration 自定义资源。
第 6 章 路由公告 复制链接链接已复制到粘贴板!
6.1. 关于路由公告 复制链接链接已复制到粘贴板!
此功能为 OVN-Kubernetes 网络插件提供路由公告功能。Border Gateway Router (BGP) 供应商是必需的。如需更多信息,请参阅关于 BGP 路由。
6.1.1. 使用边框网关协议公告集群网络路由 复制链接链接已复制到粘贴板!
在启用路由公告后,OVN-Kubernetes 网络插件支持默认 pod 网络和集群用户定义的(CUDN)网络公告网络路由到提供商网络,包括 EgressIPs,以及将提供商网络中的路由导入到默认 pod 网络和 CUDN。从提供商网络中,可以直接访问从默认 pod 网络和 CUDN 公告的 IP 地址。
例如,您可以将路由导入到默认 pod 网络,因此不再需要在每个节点上手动配置路由。在以前的版本中,您可能已将 routingViaHost 参数设置为 true,并在每个节点上手动配置路由与大约类似的配置。通过路由公告,您可以无缝完成此任务,并将 routingViaHost 参数设置为 false。
您还可以在集群的 Network 自定义资源 CR 中将 routingViaHost 参数设置为 true,但必须在每个节点上手动配置路由来模拟类似的配置。启用路由公告时,您可以在 Network CR 中设置 routingViaHost=false,而无需手动配置每个节点的路由。
支持提供商网络上的路由反映器,并可减少在大型网络上公告路由所需的 BGP 连接数量。
如果您使用启用了路由广告的 EgressIPs,则第 3 层提供商网络会支持 EgressIP 故障转移。这意味着您可以找到在第 2 层段上托管 EgressIPs 的集群节点,在以前,只有第 2 层提供商网络支持,因此需要所有出口节点都位于同一个第 2 层段中。
6.1.1.1. 支持的平台 复制链接链接已复制到粘贴板!
在裸机基础架构类型上支持带有边框网关协议(BGP)的广告路由。
6.1.1.2. 基础架构要求 复制链接链接已复制到粘贴板!
要使用路由公告,您必须为网络基础架构配置了 BGP。在网络基础架构出现中断或被错误配置时可能会导致集群网络中断。
6.1.1.3. 与其他网络功能兼容 复制链接链接已复制到粘贴板!
路由公告支持以下 OpenShift Container Platform 网络功能:
- 多外部网关(MEG)
- MEG 不支持此功能。
- EgressIPs
支持使用和公告 EgressIPs。出口 IP 地址所在的节点公告 EgressIP。出口 IP 地址必须与出口节点位于同一个第 2 层网络子网。以下限制适用:
- 不支持以第 2 层模式运行的用户定义的网络(CUDN)的广告 EgressIP。
- 将出口 IP 地址分配给主网络接口和分配给额外网络接口的出口 IP 地址的网络的广告 EgressIP 是不切实际的。所有 EgressIPs 都会在所选 FRRConfiguration 实例的所有 BGP 会话上公告,无论这些会话是否在 EgressIP 分配给的同一接口上创建。这可能会导致不需要的公告。
- 服务
- 与 MetalLB Operator 一起工作,向提供商网络公告服务。
- Egress 服务
- 完全支持。
- 出口防火墙
- 完全支持。
- Egress QoS
- 完全支持。
- 网络策略
- 完全支持。
- 直接 pod ingress
- 完全支持默认集群网络以及集群用户定义的(CUDN)网络。
6.1.1.4. MetalLB Operator 中使用的注意事项 复制链接链接已复制到粘贴板!
MetalLB Operator 作为集群的附加组件安装。MetalLB Operator 的部署会自动启用 FRR-K8s 作为额外的路由功能供应商。此功能和 MetalLB Operator 使用相同的 FRR-K8s 部署。
6.1.1.5. 命名集群用户定义的网络的注意事项(CUDN) 复制链接链接已复制到粘贴板!
当在 FRRConfiguration CR 中引用 VRF 设备时,VRF 名称需要与 VRF 的 CUDN 名称相同,它需要小于或等于 15 个字符。建议您使用 VRF 名称不要超过 15 个字符,以便从 CUDN 名称中推断 VRF 名称。
6.1.1.6. BGP 路由自定义资源 复制链接链接已复制到粘贴板!
以下自定义资源(CR)用于通过 BGP 配置路由公告:
RouteAdvertisements-
此 CR 定义 BGP 路由公告。在这个 CR 中,OVN-Kubernetes 控制器生成一个
FRRConfiguration对象,它将 FRR 守护进程配置为公告集群网络路由。此 CR 是集群范围。 FRRConfiguration-
此 CR 用于定义 BGP 对等点,并配置从提供商网络到集群网络的路由导入。在应用
RouteAdvertisements对象前,必须首先定义一个 FRRConfiguration 对象来配置 BGP 对等点。此 CR 针对于特定命名空间。
6.1.1.7. OVN-Kubernetes 控制器生成 FRRConfiguration 对象 复制链接链接已复制到粘贴板!
为每个网络和由 RouteAdvertisements CR 选择的节点生成 FRRConfiguration 对象,其中包含适用于每个节点的适当公告前缀。OVN-Kubernetes 控制器检查 RouteAdvertisements-CR-selected 节点是否是 RouteAdvertisements-CR-selected FRR 配置选择的节点子集。
要接收的任何过滤或选择前缀都不会在从 RouteAdvertisement CR 生成的 FRRConfiguration 对象中考虑。配置要在其他 FRRConfiguration 对象上接收的任何前缀。OVN-Kubernetes 将路由从 VRF 导入到适当的网络中。
6.1.1.8. Cluster Network Operator 配置 复制链接链接已复制到粘贴板!
Cluster Network Operator (CNO) API 会公开几个字段来配置路由公告:
-
spec.additionalRoutingCapabilities.providers: 指定额外的路由供应商,该供应商需要公告路由。唯一支持的值是FRR,它为集群启用 FRR-K8S 守护进程部署。启用后,FRR-K8S 守护进程会在所有节点上部署。 -
spec.defaultNetwork.ovnKubernetesConfig.routeAdvertisements: 为默认集群网络和 CUDN 网络启用路由公告。spec.additionalRoutingCapabilities字段必须设置为FRR才能启用此功能。
6.1.2. RouteAdvertisements 对象配置 复制链接链接已复制到粘贴板!
您可以使用以下属性定义 RouteAdvertisements 对象,该对象是集群范围的。
下表中描述了 RouteAdvertisements 自定义资源 (CR) 的字段:
| 字段 | 类型 | 描述 |
|---|---|---|
|
|
|
指定 |
|
|
|
指定包含要公告的不同类型的网络列表的数组。只支持 |
|
|
|
确定 OVN-Kubernetes 驱动的 |
|
|
| 指定要在默认集群网络和集群网络(CUDN)之间公告的网络。 |
|
|
|
将公告限制为所选节点。当选择了 |
|
|
|
决定在哪个路由器中公告路由。路由在与此虚拟路由和转发(VRF)目标关联的路由器上公告,如所选 |
6.1.3. 使用 BGP 广告 pod IP 地址示例 复制链接链接已复制到粘贴板!
以下示例描述了使用边框网关协议(BGP)广告 pod IP 地址和 EgressIPs 的几个配置。外部网络边框路由器具有 172.18.0.5 IP 地址。这些配置假设您配置了外部路由反映器,它可以将路由转发到集群网络上的所有节点。
6.1.3.1. 公告默认集群网络 复制链接链接已复制到粘贴板!
在这种情况下,默认集群网络会公开给外部网络,以便 pod IP 地址和 EgressIPs 被公告到提供商网络。
这个场景依赖于以下 FRRConfiguration 对象:
FRRConfiguration CR
当 OVN-Kubernetes 控制器看到这个 RouteAdvertisements CR 时,它会根据将 FRR 守护进程配置为公告默认集群网络的路由,生成其他 FRRConfiguration 对象。
OVN-Kubernetes 生成的 FRRConfiguration CR 示例
在生成的 FRRConfiguration 对象中,<default_network_host_subnet> 是公告到提供商网络的默认集群网络的子网。
6.1.3.2. 通过 BGP 广告集群用户定义的网络的 pod IP 复制链接链接已复制到粘贴板!
在这种情况下,blue 集群用户定义的网络(CUDN)公开给外部网络,以便网络的 pod IP 地址和 EgressIPs 会公告到提供商网络。
这个场景依赖于以下 FRRConfiguration 对象:
FRRConfiguration CR
使用这个 FRRConfiguration 对象,路由将从邻居 172.18.0.5 导入到默认的 VRF 中,并可用于默认集群网络。
CUDN 通过默认的 VRF 公告,如下图所示:
- Red CUDN
-
名为
red的 VRF 与名为red的 CUDN 关联 -
子网
10.0.0.0/24
-
名为
- Blue CUDN
-
名为
blue的 VRF 与名为blue的 CUDN 关联 -
子网
10.0.1.0/24
-
名为
在此配置中,定义了两个单独的 CUDN。red 网络涵盖 10.0.0.0/24 子网,blue 网络涵盖 10.0.1.0/24 子网。red 和 blue 网络被标记为 export: true。
以下 RouteAdvertisements CR 描述了 red 和 blue 租户的配置:
red 和 blue 租户的 RouteAdvertisements CR
当 OVN-Kubernetes 控制器看到这个 RouteAdvertisements CR 时,它会根据将 FRR 守护进程配置为公告路由的所选 FRRConfiguration 对象生成其他 FRRConfiguration 对象。以下示例是这样的配置对象,根据所选的节点和网络创建 FRRConfiguration 对象的数量。
OVN-Kubernetes 生成的 FRRConfiguration CR 示例
生成的 FRRConfiguration 对象配置子网 10.0.1.0/24,它属于网络 blue,以导入到默认的 VRF 中,并公告到 172.18.0.5 邻居。为每个网络和由 RouteAdvertisements CR 选择的节点生成 FRRConfiguration 对象,其具有适用于每个节点的适当前缀。
当省略 targetVRF 字段时,路由会被泄漏,并通过默认的 VRF 公告。另外,在初始 FRRConfiguration 对象定义后导入到默认 VRF 的路由也会导入到 blue VRF 中。
6.1.3.3. 使用 VPN 通过 BGP 广告集群用户定义的网络的 pod IP 复制链接链接已复制到粘贴板!
在这种情况下,VLAN 接口附加到与 blue 网络关联的 VRF 设备。此设置提供了一个 VRF lite 设计,其中 FRR-K8S 用于通过 blue 网络 VRF/VLAN 链路上对应的 BGP 会话向下一跃点提供 Edge (PE)路由器公告 blue 网络。red 租户使用相同的配置。blue 和 red 网络被标记为 export: true。
这个场景不支持使用 EgressIP。
下图演示了此配置:
- Red CUDN
-
名为
red的 VRF 与名为red的 CUDN 关联 - 附加到 VRF 设备的 VLAN 接口并连接到外部 PE 路由器
-
分配的子网
10.0.2.0/24
-
名为
- Blue CUDN
-
名为
blue的 VRF 与名为blue的 CUDN 关联 - 附加到 VRF 设备的 VLAN 接口并连接到外部 PE 路由器
-
分配的子网
10.0.1.0/24
-
名为
只有在 OVN-Kubernetes 网络插件的 ovnKubernetesConfig.gatewayConfig 规格中设置 routingViaHost=true 时,这个方法才可用。
在以下配置中,额外的 FRRConfiguration CR 使用 blue 和 red VLAN 上的 PE 路由器配置对等路由器:
为 BGP VPN 设置手动配置 FRRConfiguration CR
以下 RouteAdvertisements CR 描述了 blue 和 red 租户的配置:
blue 和 red 租户的 RouteAdvertisements CR
在 RouteAdvertisements CR 中,目标VRF 被设置为 auto,以便在与所选独立网络的 VRF 设备中进行公告。在这种情况下,blue VRF 设备的 Pod 子网会公告,而 red VRF 设备的 pod 子网会公告红色的 VRF 设备。另外,每个 BGP 会话导入路由只路由到由初始 FRRConfiguration 对象定义的对应 CUDN VRF。
当 OVN-Kubernetes 控制器看到这个 RouteAdvertisements CR 时,它会根据将 FRR 守护进程配置为公告 blue 和 red 租户的路由,生成其他 FRRConfiguration 对象。
OVN-Kubernetes 生成的 FRRConfiguration CR 用于 blue 和 red 租户
在这种情况下,必须在定义对等关系的 FRRConfiguration CR 中完成要接收的任何过滤或选择路由。
6.2. 启用路由公告 复制链接链接已复制到粘贴板!
作为集群管理员,您可以为集群配置额外的路由公告。您必须使用 OVN-Kubernetes 网络插件。
6.2.1. 启用路由公告 复制链接链接已复制到粘贴板!
作为集群管理员,您可以为集群启用额外的路由支持。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin角色的用户身份登录到集群。 - 集群安装在兼容基础架构上。
流程
要启用路由供应商和其他路由公告,请输入以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3. 禁用路由公告 复制链接链接已复制到粘贴板!
作为集群管理员,您可以为集群禁用额外的路由公告。
6.3.1. 禁用路由公告 复制链接链接已复制到粘贴板!
作为集群管理员,您可以为集群禁用额外的路由公告。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin角色的用户身份登录到集群。 - 集群安装在兼容基础架构上。
流程
要禁用附加路由支持,请输入以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4. 路由公告设置示例 复制链接链接已复制到粘贴板!
作为集群管理员,您可以为集群配置以下示例路由公告设置。此配置旨在作为演示如何配置路由广告的示例。
6.4.1. 路由公告设置示例 复制链接链接已复制到粘贴板!
作为集群管理员,您可以为集群启用边框网关协议(BGP)路由支持。此配置旨在作为演示如何配置路由广告的示例。配置使用路由反映而不是完整的网格设置。
BGP 路由只在裸机基础架构上被支持。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin权限的用户身份登录集群。 - 集群安装在裸机基础架构上。
- 您有一个裸机系统,可访问集群,在其中计划运行 FRR 守护进程容器。
流程
运行以下命令确认启用了
RouteAdvertisements功能门:oc get featuregate -oyaml | grep -i routeadvertisement
$ oc get featuregate -oyaml | grep -i routeadvertisementCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
- name: RouteAdvertisements
- name: RouteAdvertisementsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令配置 Cluster Network Operator (CNO):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow CNO 重启所有节点可能需要几分钟时间。
运行以下命令,获取节点的 IP 地址:
oc get node -owide
$ oc get node -owideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,获取每个节点的默认 pod 网络:
oc get node <node_name> -o=jsonpath={.metadata.annotations.k8s\\.ovn\\.org/node-subnets}$ oc get node <node_name> -o=jsonpath={.metadata.annotations.k8s\\.ovn\\.org/node-subnets}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
{"default":["10.129.0.0/23"],"ns1.udn-network-primary-layer3":["10.150.6.0/24"]}{"default":["10.129.0.0/23"],"ns1.udn-network-primary-layer3":["10.150.6.0/24"]}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在裸机虚拟机监控程序上,运行以下命令来获取要使用的外部 FRR 容器的 IP 地址:
ip -j -d route get <a cluster node's IP> | jq -r '.[] | .dev' | xargs ip -d -j address show | jq -r '.[] | .addr_info[0].local'
$ ip -j -d route get <a cluster node's IP> | jq -r '.[] | .dev' | xargs ip -d -j address show | jq -r '.[] | .addr_info[0].local'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 FRR 创建一个
frr.conf文件,其中包含每个节点的 IP 地址,如下例所示:frr.conf配置文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
daemons的文件,其中包含以下内容:daemons配置文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
frr.conf和daemons文件保存在同一目录中,如/tmp/frr。 运行以下命令来创建外部 FRR 容器:
sudo podman run -d --privileged --network host --rm --ulimit core=-1 --name frr --volume /tmp/frr:/etc/frr quay.io/frrouting/frr:9.1.0
$ sudo podman run -d --privileged --network host --rm --ulimit core=-1 --name frr --volume /tmp/frr:/etc/frr quay.io/frrouting/frr:9.1.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建以下
FRRConfiguration和RouteAdvertisements配置:创建一个包含以下内容的
receive_all.yaml文件:receive_all.yaml配置文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个包含以下内容的
ra.yaml文件:ra.yaml配置文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令应用
receive_all.yaml和ra.yaml文件:for f in receive_all.yaml ra.yaml; do oc apply -f $f; done
$ for f in receive_all.yaml ra.yaml; do oc apply -f $f; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证配置是否已应用:
运行以下命令验证
FRRConfiguration配置是否已创建:oc get frrconfiguration -A
$ oc get frrconfiguration -ACopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证
RouteAdvertisements配置是否已创建:oc get ra -A
$ oc get ra -ACopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS default Accepted
NAME STATUS default AcceptedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令来获取外部 FRR 容器 ID:
sudo podman ps | grep frr
$ sudo podman ps | grep frrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
22cfc713890e quay.io/frrouting/frr:9.1.0 /usr/lib/frr/dock... 5 hours ago Up 5 hours ago frr
22cfc713890e quay.io/frrouting/frr:9.1.0 /usr/lib/frr/dock... 5 hours ago Up 5 hours ago frrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您在上一步中获取的容器 ID 检查外部 FRR 容器的
vtysh会话中的 BGP 邻居和路由。运行以下命令:sudo podman exec -it <container_id> vtysh -c "show ip bgp"
$ sudo podman exec -it <container_id> vtysh -c "show ip bgp"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,为每个集群节点查找
frr-k8spod:oc -n openshift-frr-k8s get pod -owide
$ oc -n openshift-frr-k8s get pod -owideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 OpenShift Container Platform 集群中,运行以下命令来检查 FRR 容器中集群节点
frr-k8spod 上的 BGP 路由:oc -n openshift-frr-k8s -c frr rsh frr-k8s-86wmq
$ oc -n openshift-frr-k8s -c frr rsh frr-k8s-86wmqCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查集群节点的 IP 路由:
vtysh
sh-5.1# vtyshCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Hello, this is FRRouting (version 8.5.3). Copyright 1996-2005 Kunihiro Ishiguro, et al.
Hello, this is FRRouting (version 8.5.3). Copyright 1996-2005 Kunihiro Ishiguro, et al.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令检查 IP 路由:
worker-2# show ip bgp
worker-2# show ip bgpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 OpenShift Container Platform 集群中,运行以下命令来调试节点:
oc debug node/<node_name>
$ oc debug node/<node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Temporary namespace openshift-debug-lbtgh is created for debugging node... Starting pod/worker-2-debug-zrg4v ... To use host binaries, run `chroot /host` Pod IP: 192.168.111.25 If you don't see a command prompt, try pressing enter.
Temporary namespace openshift-debug-lbtgh is created for debugging node... Starting pod/worker-2-debug-zrg4v ... To use host binaries, run `chroot /host` Pod IP: 192.168.111.25 If you don't see a command prompt, try pressing enter.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令确认 BGP 路由正在公告:
ip route show | grep bgp
sh-5.1# ip route show | grep bgpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 7 章 使用 PTP 硬件 复制链接链接已复制到粘贴板!
7.1. 关于 OpenShift 集群节点中的 PTP 复制链接链接已复制到粘贴板!
精度时间协议(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 功能的设备。
7.1.1. PTP 域的元素 复制链接链接已复制到粘贴板!
PTP 用于将网络中连接的多个节点与每个节点的时钟同步。PTP 同步时钟以领导层次结构进行组织。层次结构由最佳 master 时钟 (BMC) 算法自动创建和更新,该算法在每个时钟上运行。后续时钟与领导时钟同步,后续时钟本身可以是其他下游时钟的来源。
图 7.1. 网络中的 PTP 节点
下面描述了三种 PTP 时钟类型。
- Grandmaster 时钟
- grandmaster 时钟向网络上的其他时钟提供标准时间信息并确保准确和稳定的同步。它写入时间戳并响应来自其他时钟的时间间隔。grandmaster 时钟与全局导航 Satellite 系统 (GNSS) 时间源同步。Grandmaster 时钟是网络中权威时间来源,负责为所有其他设备提供时间同步。
- Boundary 时钟
- Boundary(边界)时钟在两个或更多个通信路径中具有端口,并且可以是指向其他目标时钟的源和目标。边界时钟作为上游目标时钟工作。目标时钟接收计时消息,针对延迟进行调整,然后创建一个新的源时间信号来传递网络。边界时钟生成一个新的计时数据包,它仍然与源时钟正确同步,并可减少直接报告到源时钟的连接设备数量。
- Ordinary 时钟
- Ordinary(普通)时钟具有一个端口连接,可根据其在网络中的位置扮演源或目标时钟的角色。普通时钟可以读取和写入时间戳。
7.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 接收器。
7.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 时间。
图 7.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 持续调整本地时钟频率和阶段,以最大程度降低本地时钟和参考时钟之间的阶段差异。
7.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 应用程序立即断开语音调用和数据会话。
7.1.4. 关于 PTP 和时钟同步错误事件 复制链接链接已复制到粘贴板!
虚拟 RAN (vRAN) 等云原生应用需要访问对整个网络运行至关重要的硬件计时事件通知。PTP 时钟同步错误可能会对低延迟应用程序的性能和可靠性造成负面影响,例如:在一个分布式单元 (DU) 中运行的 vRAN 应用程序。
丢失 PTP 同步是 RAN 网络的一个关键错误。如果在节点上丢失同步,则可能会关闭无线广播,并且网络 Over the Air (OTA) 流量可能会转移到无线网络中的另一个节点。快速事件通知允许集群节点与 DU 中运行的 vRAN 应用程序通信 PTP 时钟同步状态,从而缓解工作负载错误。
事件通知可用于在同一 DU 节点上运行的 vRAN 应用。发布/订阅 REST API 将事件通知传递到消息传递总线。发布-订阅消息传递或发布-订阅消息传递是服务通信架构的异步服务,通过服务通信架构,所有订阅者会立即收到发布到某一主题的消息。
PTP Operator 为每个支持 PTP 的网络接口生成快速事件通知。消费者应用程序可以使用 PTP 事件 REST API v2 订阅 PTP 事件。
PTP 快速事件通知可用于配置为使用 PTP 普通时钟、PTP grandmaster 时钟或 PTP 边界时钟。
7.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 在多个站点间分发无线功能,带有将它们链接到核心网络的连接。
图 7.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。
7.1.6. 使用双端口 NIC 来提高 PTP 普通时钟的冗余 复制链接链接已复制到粘贴板!
OpenShift Container Platform 支持单端口网络接口卡(NIC)作为 PTP 时间的普通时钟。要提高冗余,您可以使用一个端口作为活跃端口配置双端口 NIC,另一个端口作为待机。
将 linuxptp 服务配置为带有双端口 NIC 冗余的普通时钟只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
在这个配置中,双端口 NIC 中的端口按如下方式操作:
-
活动端口作为常规时钟在
Following端口状态下运行。 -
待机端口保持在 Listening
端口状态。 - 如果活跃端口失败,待机端口转换为 active,以确保持续 PTP 时间同步。
-
如果两个端口都出现故障,时钟状态将移至
HOLDOVER状态,然后在保存超时过期时FREERUN状态,然后再重新同步到领导时钟。
7.1.6.1. 硬件要求 复制链接链接已复制到粘贴板!
您可以使用 x86_64 或 AArch64 架构节点上添加冗余配置 PTP 普通时钟。
对于 x86_64 架构节点,节点必须具有支持 PTP 的双端口 NIC,并为每个 NIC 公开单个 PTP 硬件时钟(PHC),如 Intel E810。
对于 AArch64 架构节点,您只能使用以下双端口 NIC:
- NVIDIA ConnectX-7 系列
NVIDIA BlueField-3 系列,在 NIC 模式中
- 在将接口配置为改进冗余的普通时钟之前,您必须在 NIC 模式中配置 NVIDIA BlueField-3 系列 DPU。有关配置 NIC 模式的更多信息,请参阅 BlueField-3 的 NIC 模式 (NVIDIA 文档)、BlueField Management (NVIDIA)文档,以及 从主机 BIOS HII UEFI 菜单(NVIDIA 文档)中配置 NIC 模式。
- 在改到一个 NIC 模式后,您必须重启卡。有关重启卡的更多信息,请参阅 NVIDIA BlueField Reset 和 Reboot procedures (NVIDIA 文档)。
- 使用最新支持的 NVIDIA 驱动程序和固件来确保正确 PTP 支持,并为每个 NIC 公开一个 PHC。
7.1.7. 3-card Intel E810 PTP grandmaster 时钟 复制链接链接已复制到粘贴板!
OpenShift Container Platform 支持使用 3 个 Intel E810 NIC 作为 PTP grandmaster 时钟(T-GM)的集群主机。
- 3card 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 在多个站点间分发无线功能,带有将它们链接到核心网络的连接。
图 7.4. 3-card Intel E810 PTP grandmaster 时钟
注意在 3 个卡 T-GM 配置中,单个
ts2phc进程报告为系统中的 3ts2phc实例。
7.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.20 中,PtpConfig 插件支持 Intel E810 NIC。
7.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.20.0-202301261535 Succeeded
Name Phase 4.20.0-202301261535 SucceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.2. 使用 Web 控制台安装 PTP Operator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 Web 控制台安装 PTP Operator。
如上一节所述,您必须创建命名空间和 operator 组。
流程
使用 OpenShift Container Platform Web 控制台安装 PTP Operator:
- 在 OpenShift Container Platform Web 控制台中,点 Ecosystem → Software Catalog。
- 从可用的 Operator 列表中选择 PTP Operator,然后点 Install。
- 在 Install Operator 页面中,在 A specific namespace on the cluster 下选择 openshift-ptp。然后点击 Install。
可选:验证是否成功安装了 PTP Operator:
- 切换到 Ecosystem → Installed Operators 页面。
确保 openshift-ptp 项目中列出的 PTP Operator 的 Status 为 InstallSucceeded。
注意在安装过程中,Operator 可能会显示 Failed 状态。如果安装过程结束后有 InstallSucceeded 信息,您可以忽略这个 Failed 信息。
如果 Operator 没有被成功安装,请按照以下步骤进行故障排除:
- 进入 Ecosystem → Installed Operators 页面,检查 Operator Subscriptions 和 Install Plans 选项卡中的 Status 项中是否有任何错误。
-
进入 Workloads → Pods 页面,检查
openshift-ptp项目中 pod 的日志。
7.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
7.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文件中:例 7.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
7.2.4.1. 将 linuxptp 服务配置为 2 E810 NIC 的 grandmaster 时钟 复制链接链接已复制到粘贴板!
您可以通过创建一个配置 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 提供的 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文件中:例 7.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
7.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 保存到
三nic-grandmaster-clock-ptp-config.yaml文件中:例 7.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
7.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,并在 |
|
|
为 |
|
|
当 |
|
|
可选。如果 |
|
|
设置
|
|
|
为 |
|
|
指定包括一个或多个 |
|
|
指定在 |
|
|
使用 |
|
|
使用 |
|
|
通过 |
|
|
使用 |
7.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.
7.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 (Transmit timestamping)
<channel number > : 与物理连接器关联的数字。以下频道号与物理连接器关联:
-
1:SMA1或U.FL1 -
2:SMA2或U.FL2
示例:
-
0 1:禁用映射到SMA1或U.FL1的 pin。 -
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 状态和配置设置。 |
7.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:用于 1PPS OUT 传输(Tx)
<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 配置接口。
7.2.5.4. 3-card E810 NIC 配置参考 复制链接链接已复制到粘贴板!
使用此信息了解如何将 3 E810 NIC 配置为 PTP grandmaster 时钟(T-GM)。
在配置 3card 集群主机前,您必须使用 1PPS 连接 3 个 NIC。主 NIC 1PPS_out 输出提供其他 2 NIC。
当您配置 3 个卡 T-GM 时,您需要使用 SMA1 连接端口连接 NIC 时发生 1PPS 信号延迟。电缆长度、基线温度、组件和制造容错等各种因素可能会影响信号延迟。要满足延迟要求,您必须计算用于偏移信号延迟的特定值。
| PtpConfig 字段 | 描述 |
|---|---|
|
| 使用 PTP Operator E810 硬件插件配置 E810 硬件固定。
|
|
|
使用 |
|
|
将 |
7.2.6. 在有 GNSS 作为源时在 grandmaster 时钟中延续 复制链接链接已复制到粘贴板!
holdover 允许 grandmaster (T-GM)时钟在全局导航 satellite 系统(GNSS)源不可用时维护同步性能。在此期间,T-GM 时钟依赖于其内部 oscillator 并保存参数,以减少时间中断。
您可以通过在 PTPConfig 自定义资源(CR)中配置以下 holdover 参数来定义保存的行为:
MaxInSpecOffset-
以纳秒为单位指定允许的最大偏移量。如果 T-GM 时钟超过
MaxInSpecOffset值,它将过渡到FREERUN状态(时钟状态gm.ClockClass 248)。 LocalHoldoverTimeout-
指定在过渡到
FREERUN状态前 T-GM 时钟保持处于保存状态的最长持续时间(以秒为单位)。 LocalMaxHoldoverOffSet- 指定 T-GM 时钟可在延续状态以纳秒为单位访问的最大偏移量。
如果 MaxInSpecOffset 值小于 LocalMaxHoldoverOffset 值,并且 T-GM 时钟超过最大偏移值,T-GM 时钟将从 holdover 状态转换为 FREERUN 状态。
如果 LocalMaxHoldoverOffSet 值小于 MaxInSpecOffset 值,则在时钟达到最大偏移前发生 holdover 超时。要解决这个问题,将 MaxInSpecOffset 字段和 LocalMaxHoldoverOffset 字段设置为相同的值。
有关时钟类状态的详情,请参考 "Grandmaster 时钟类同步状态参考" 文档。
T-GM 时钟使用 holdover 参数 LocalMaxHoldoverOffSet 和 LocalHoldoverTimeout 来计算 slope。slope 是阶段偏移随时间变化的速度。它衡量每秒的偏移(纳秒为单位),其中设置的值代表在一个给定时间段内偏移量增加了多少。
T-GM 时钟使用 slope 值来预测和补偿时间偏差,从而减少了维护期间的时间中断。T-GM 时钟使用以下公式来计算 slope:
Slope =
localMaxHoldoverOffSet/localHoldoverTimeout例如,如果
LocalHoldOverTimeout参数设置为 60 秒,并且LocalMaxHoldoverOffset参数设置为 3000 纳秒,则 slope 计算如下:slope = 3000 纳秒 / 60 秒 = 每秒 50纳秒
T-GM 时钟在 60 秒内达到最大偏移量。
阶段偏移从 picoseconds 转换为纳秒。因此,在 holdover 过程中计算的阶段偏移以纳秒表示,生成的 slope 以每秒纳秒表示。
下图演示了 T-GM 时钟中的 holdover 行为,使用 GNSS 作为源:
图 7.5. 保存在 T-GM 时钟中,使用 GNSS 作为源
GNSS 信号丢失,从而导致 T-GM 时钟进入 HOLDOVER 模式。T-GM 时钟使用其内部时钟保持时间准确性。
GNSS 信号已被恢复,T-GM 时钟重新进入 LOCKED 模式。当恢复了 GNSS 信号时,T-GM 时钟仅在同步链中的所有依赖组件,如 ts2phc 偏移、数字阶段锁定循环 (DPLL) 阶段偏移和 GNSS 偏移都进入一个稳定的 LOCKED 模式后,才会重新进入 LOCKED 模式。
GNSS 信号再次丢失,T-GM 时钟重新进入 HOLDOVER 模式。时间错误开始增加。
由于可追溯性丢失,时间错误超过 MaxInSpecOffset 阈值。
GNSS 信号已被恢复,T-GM 时钟会恢复同步。时间错误将开始减少。
时间错误减少了,并返回到 MaxInSpecOffset 阈值内。
7.2.7. 为 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.20 版本默认启用自动 leap 秒管理。
先决条件
-
已安装 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
7.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,然后在boundaries-clock-ptp-config.yaml文件中保存 YAML。PTP 边界时钟配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Expand 表 7.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
7.2.8.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
7.2.9. 将 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 表 7.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 指标。
7.2.9.2. 将 linuxptp 服务配置为具有双端口 NIC 冗余的普通时钟 复制链接链接已复制到粘贴板!
您可以通过创建 PtpConfig 自定义资源(CR)对象,将 linuxptp 服务(ptp4l、phc2sys)配置为带有双端口 NIC 冗余的普通时钟。在普通时钟的双端口 NIC 配置中,如果一个端口失败,待机端口会接管,维护 PTP 时间同步。
将 linuxptp 服务配置为带有双端口 NIC 冗余的普通时钟只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
先决条件
-
安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin特权的用户身份登录。 - 安装 PTP Operator。
- 检查硬件要求,将您的双端口 NIC 用作带有添加冗余的普通时钟。如需更多信息,请参阅"使用双端口 NIC 来提高 PTP 普通时钟冗余"。
流程
创建以下
PtpConfigCR,然后在oc-dual-port-ptp-config.yaml文件中保存 YAML。PTP 普通时钟双端口配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
PtpConfigCR:oc create -f oc-dual-port-ptp-config.yaml
$ oc create -f oc-dual-port-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
7.2.10. 为 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
7.2.11. 配置 PTP 日志减少 复制链接链接已复制到粘贴板!
linuxptp-daemon 生成可用于调试目的的日志。在具有有限存储容量的电信或其他部署类型中,这些日志可以添加到存储要求中。目前,默认的日志记录率很高,从而导致日志在 24 小时内轮转,因此很难跟踪更改并识别问题。
您可以通过配置 PtpConfig 自定义资源(CR)来排除报告 master offset 值的日志消息,以实现基本日志缩减。master offset 日志消息以纳秒为单位报告当前节点的时钟和 master 时钟之间的区别。但是,使用此方法,过滤的日志没有摘要状态。增强的日志缩减功能允许您配置 PTP 日志的日志率。您可以设置特定的日志记录率,这有助于减少 linuxptp-daemon 生成的日志卷,同时仍保留用于故障排除的必要信息。通过增强的日志缩减功能,您还可以指定一个阈值,如果偏移大于该阈值,仍会显示偏移日志。
7.2.11.1. 为 PTP 配置日志过滤 复制链接链接已复制到粘贴板!
修改 PtpConfig 自定义资源(CR),以配置报告 master offset 值的基本日志过滤和排除日志消息。
先决条件
-
安装 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实例。
7.2.11.2. 配置增强的 PTP 日志减少 复制链接链接已复制到粘贴板!
基本日志缩减会有效地过滤掉频繁的日志。但是,如果您想要过滤的日志定期概述,请使用增强的日志缩减功能。
先决条件
-
安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin特权的用户身份登录。 - 安装 PTP Operator。
流程
编辑
PtpConfig自定义资源(CR):oc edit PtpConfig -n openshift-ptp
$ oc edit PtpConfig -n openshift-ptpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
spec.profile部分添加ptpSettings.logReduce规格,并将值设置为增强的:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:为 master offset 日志配置概述日志的时间间隔,以及以纳秒为单位的阈值。例如,要将间隔设置为 60 秒,以及阈值设置为 100 nanoseconds,请在
spec.profile部分添加ptpSettings.logReduce规格,并将值设置为增强的 60s 100。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 默认情况下,如果未指定值,则
linuxptp-daemon配置为每 30 秒生成概述日志。在示例配置中,守护进程每 60 秒生成摘要日志,并为 master offset 日志设置 100 nanoseconds 阈值。这意味着守护进程仅在指定间隔生成概述日志。但是,如果您的时钟来自 master 的偏移超过加减 100 纳秒,则会记录特定的日志条目。
可选: 要在没有 master 偏移阈值的情况下设置间隔,请将
logReduce字段配置为在 YAML 中增强 60s。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 运行以下命令,验证 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。
7.2.12. 常见 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
7.2.13. 在 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 表 7.10. DPLL 固件版本 二进制部分 十进制值 00011
0000 00113
0000 00000
0000 00011
7.2.14. 收集 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.20
$ oc adm must-gather --image=registry.redhat.io/openshift4/ptp-must-gather-rhel9:v4.20Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3. 使用 REST API v2 开发 PTP 事件消费者应用程序 复制链接链接已复制到粘贴板!
在裸机集群节点上开发使用 Precision Time Protocol (PTP)事件的消费者应用程序时,您可以在单独的应用程序 pod 中部署消费者应用程序。消费者应用程序使用 PTP 事件 REST API v2 订阅 PTP 事件。
以下信息提供了开发使用 PTP 事件的消费者应用程序的一般指导。完整的事件消费者应用示例超出了此信息的范围。
7.3.1. 关于 PTP 快速事件通知框架 复制链接链接已复制到粘贴板!
使用 Precision Time Protocol (PTP) 快速事件 REST API v2 将集群应用程序订阅到裸机集群节点生成的 PTP 事件。
快速事件通知框架使用 REST API 进行通信。PTP 事件 REST API v2 基于 O-RAN O-Cloud Notification API Specification for Event Consumers 4.0,它包括在 O-RAN ALLIANCE Specifications 中。
7.3.2. 使用 PTP 事件 REST API v2 检索 PTP 事件 复制链接链接已复制到粘贴板!
应用程序在生成者云事件代理 sidecar 中使用 O-RAN v4 兼容 REST API 订阅 PTP 事件。cloud-event-proxy sidecar 容器可以访问与主应用程序容器相同的资源,而无需使用主应用程序的任何资源,且没有大量延迟。
图 7.6. 从 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 事件。
7.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 - 1
- 通过将
enableEventPublisher设置为true来启用 PTP 快速事件通知。
更新
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。
7.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。
7.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
参考云事件消费者服务
7.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 容器的默认端口。您可以根据需要为应用程序配置不同的端口。
7.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
7.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。
7.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 进程是否正在运行的状态代码。 |
|
|
|
为
|
|
7.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 ( |
|
7.4. PTP 事件 REST API v2 参考 复制链接链接已复制到粘贴板!
使用以下 REST API v2 端点,将 cloud-event-consumer 应用程序订阅到 Precision Time Protocol (PTP)事件,在 PTP 事件制作者 pod 中的 http://ptp-event-publisher-service-NODE_NAME.openshift-ptp.svc.cluster.local: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}指定的事件类型的当前状态。
-
7.4.1. PTP 事件 REST API v2 端点 复制链接链接已复制到粘贴板!
7.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 无内容 | 成功 |
7.4.1.3. api/ocloudNotifications/v2/health 复制链接链接已复制到粘贴板!
HTTP 方法
GET api/ocloudNotifications/v2/health/
描述
返回 ocloudNotifications REST API 的健康状况。
| HTTP 响应 | 描述 |
|---|---|
| 200 OK | 成功 |
7.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 响应示例
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.