13.7. PTP 硬件快速事件通知框架
带有普通时钟的 PTP 事件只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
13.7.1. 关于 PTP 和时钟同步错误事件
虚拟 RAN 等云原生应用需要访问对整个网络运行至关重要的硬件计时事件通知。快速事件通知是有关即将到来和实时安全时间协议 (PTP) 时钟同步事件的早期警告信号。PTP 时钟同步错误可能会对低延迟应用程序的性能和可靠性造成负面影响,例如:在一个分布式单元 (DU) 中运行的 vRAN 应用程序。
丢失 PTP 同步是 RAN 网络的一个关键错误。如果在节点上丢失同步,则可能会关闭无线广播,并且网络 Over the Air (OTA) 流量可能会转移到无线网络中的另一个节点。快速事件通知允许集群节点与 DU 中运行的 vRAN 应用程序通信 PTP 时钟同步状态,从而缓解工作负载错误。
事件通知可用于在同一 DU 节点上运行的 RAN 应用。发布/订阅 REST API 将事件通知传递到消息传递总线。发布/订阅消息传递或发布/订阅消息传递是服务通信架构的异步服务,通过服务通信架构,所有订阅者会立即收到发布到某一主题的消息。
OpenShift Container Platform 中的 PTP Operator 为支持 PTP 的每个网络接口生成快速事件通知。通过高级消息队列协议 (AMQP) 消息总线,可使用 cloud-event-proxy
sidecar 容器提供这些事件。AMQP 消息总线由 AMQ Interconnect Operator 提供。
PTP 快速事件通知可用于配置为使用 PTP 普通时钟或 PTP 边界时钟。
13.7.2. 关于 PTP 快速事件通知框架
您可以将分布式单元 (DU) 应用程序订阅到 Precision Time Protocol (PTP) 快速事件通知,这些通知由 OpenShift Container Platform 使用 PTP Operator 和 cloud-event-proxy
sidecar 容器生成。您可以通过在 ptpOperatorConfig
自定义资源(CR)中将 enableEventPublisher
字段设置为 true
来启用 cloud-event-proxy
sidecar 容器,并指定 Advanced Message Queue Protocol(AMQP) transportHost
地址。PTP fast 事件使用 AMQ Interconnect Operator 提供的 AMQP 事件通知总线。AMQ Interconnect 是 Red Hat AMQ 的一个组件,它是在支持 AMQP 的端点之间提供灵活的消息路由的消息传递路由器。以下是 PTP 快速事件框架的概述:
图 13.1. PTP 快速事件概述
![PTP 快速事件概述](https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.10-Networking-zh-CN/images/daae4e9ea3b23abc237af713fc6bec90/218_OpenShift_PTP_events_0222.png)
cloud-event-proxy
sidecar 容器可以在不使用主应用程序的任何资源的情况下访问与主 vRAN 应用程序相同的资源,且无显著延迟。
快速事件通知框架使用 REST API 进行通信,并且基于 O-RAN REST API 规范。框架由发布者、订户和 AMQ 消息传递总线组成,以处理发布者和订阅者应用程序之间的通信。cloud-event-proxy
sidecar 是一个在 pod 中运行的实用程序容器,它与 DU 节点上的主 DU 应用程序容器松散耦合。它提供了一个事件发布框架,允许您订阅 DU 应用程序来发布的 PTP 事件。
DU 应用程序以 sidecar 模式运行 cloud-event-proxy
容器,以订阅 PTP 事件。以下工作流描述了 DU 应用程序如何使用 PTP 快速事件:
-
DU 应用程序请求一个订阅:DU 将 API 请求发送到
cloud-event-proxy
sidecar 以创建 PTP 事件订阅。cloud-event-proxy
sidecar 创建一个订阅资源。 -
cloud-event-proxy sidecar 创建订阅: 事件资源由
cloud-event-proxy
sidecar 保留。cloud-event-proxy
sidecar 容器发送带有 ID 和 URL 位置的确认,以访问存储的订阅资源。sidecar 为订阅中指定的资源创建一个 AMQ 消息传递监听程序协议。 -
DU 应用程序接收 PTP 事件通知 :
cloud-event-proxy
sidecar 容器侦听资源限定器中指定的地址。DU 事件消费者处理消息并将其传递到订阅中指定的返回 URL。 -
cloud-event-proxy sidecar 验证 PTP 事件并将其发布到 DU 应用程序:
cloud-event-proxy
sidecar 接收事件,解封云事件对象以检索数据,并获取返回 URL 以将事件发回到 DU 消费者应用程序。 - DU 应用程序使用 PTP 事件: DU 应用程序事件消费者接收和处理 PTP 事件。
13.7.3. 安装 AMQ 消息传递总线
要在节点上的发布程序与订阅者之间传递 PTP 快速事件通知,您必须安装和配置 AMQ 消息传递总线,以便在节点上本地运行。您可以通过安装 AMQ Interconnect Operator 来在集群中使用。
先决条件
-
安装 OpenShift Container Platform CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
-
将 AMQ Interconnect Operator 安装到其自己的
amq-interconnect
命名空间。请参阅添加 Red Hat Integration - AMQ Interconnect Operator。
验证
检查 AMQ Interconnect Operator 是否可用,且所需的 pod 是否正在运行:
$ oc get pods -n amq-interconnect
输出示例
NAME READY STATUS RESTARTS AGE amq-interconnect-645db76c76-k8ghs 1/1 Running 0 23h interconnect-operator-5cb5fc7cc-4v7qm 1/1 Running 0 23h
检查所需的
linuxptp-daemon
PTP 事件制作者 pod 是否在openshift-ptp
命名空间中运行。$ oc get pods -n openshift-ptp
输出示例
NAME READY STATUS RESTARTS AGE linuxptp-daemon-2t78p 3/3 Running 0 12h linuxptp-daemon-k8n88 3/3 Running 0 12h
13.7.4. 配置 PTP 快速事件通知发布程序
要为集群中的网络接口启动使用 PTP fast 事件通知,您必须在 PTP Operator PtpOperatorConfig
自定义资源 (CR) 中启用快速事件发布程序,并在您创建的 PtpConfig
CR 中配置 ptpClockThreshold
值。
先决条件
-
安装 OpenShift Container Platform CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。 - 安装 PTP Operator 和 AMQ Interconnect Operator。
流程
修改默认 PTP Operator 配置以启用 PTP 快速事件。
在
ptp-operatorconfig.yaml
文件中保存以下 YAML:apiVersion: ptp.openshift.io/v1 kind: PtpOperatorConfig metadata: name: default namespace: openshift-ptp spec: daemonNodeSelector: node-role.kubernetes.io/worker: "" ptpEventConfig: enableEventPublisher: true 1 transportHost: amqp://<instance_name>.<namespace>.svc.cluster.local 2
更新
PtpOperatorConfig
CR:$ oc apply -f ptp-operatorconfig.yaml
为 PTP 启用接口创建
PtpConfig
自定义资源(CR),并设置ptpClockThreshold
和ptp4lOpts
所需的值。以下 YAML 演示了您必须在PtpConfig
CR 中设置的必要值:spec: profile: - name: "profile1" interface: "enp5s0f0" ptp4lOpts: "-2 -s --summary_interval -4" 1 phc2sysOpts: "-a -r -m -n 24 -N 8 -R 16" 2 ptp4lConf: "" 3 ptpClockThreshold: 4 holdOverTimeout: 5 maxOffsetThreshold: 100 minOffsetThreshold: -100
- 1
- 附加
--summary_interval -4
以使用 PTP 快速事件。 - 2
- 所需的
phc2sysOpts
值。-m
将消息输出到stdout
。linuxptp-daemon
DaemonSet
解析日志并生成 Prometheus 指标。 - 3
- 指定包含配置来替换默认 /etc/ptp4l.conf 文件的字符串。要使用默认配置,请将字段留空。
- 4
- 可选的。如果
ptpClockThreshold
小节不存在,则默认值用于ptpClockThreshold
字段。小节显示默认的ptpClockThreshold
值。ptpClockThreshold
值配置 PTP master 时钟在触发 PTP 事件前的时长。holdOverTimeout
是在 PTP master clock 断开连接时,PTP 时钟事件状态更改为FREERUN
前的时间值(以秒为单位)。maxOffsetThreshold
和minOffsetThreshold
设置以纳秒为单位,它们与CLOCK_REALTIME
(phc2sys
) 或 master 偏移 (ptp4l
) 的值进行比较。当ptp4l
或phc2sys
偏移值超出这个范围时,PTP 时钟状态被设置为FREERUN
。当偏移值在这个范围内时,PTP 时钟状态被设置为LOCKED
。
其他资源
-
有关将
linuxptp
服务配置为具有 PTP 快速事件的普通时钟的完整示例 CR,请参阅将 linuxptp 服务配置为普通时钟。
13.7.5. 将 DU 应用程序订阅到 PTP 事件 REST API 参考
使用 PTP 事件通知 REST API 将分布式单元(DU)应用程序订阅到父节点上生成的 PTP 事件。
使用资源地址 /cluster/node/<node_name>/ptp
将应用程序订阅到 PTP 事件,其中 <node_name>
是运行 DU 应用程序的集群节点。
在单独的 DU 应用程序 pod 中部署 cloud-event-consumer
DU 应用程序容器和 cloud-event-proxy
sidecar 容器。cloud-event-consumer
DU 应用程序订阅应用程序 Pod 中的 cloud-event-proxy
容器。
使用以下 API 端点,将 cloud-event-consumer
DU 应用程序订阅到 PTP 事件,这些事件由 cloud-event-proxy
容器发布,位于 DU 应用程序 pod 中的 http://localhost:8089/api/ocloudNotifications/v1/
:
/api/ocloudNotifications/v1/subscriptions
-
POST
:创建新订阅 -
GET
:删除订阅列表
-
/api/ocloudNotifications/v1/subscriptions/<subscription_id>
-
GET
:返回指定订阅 ID 的详情
-
api/ocloudNotifications/v1/subscriptions/status/<subscription_id>
-
PUT
:为指定订阅 ID 创建新状态 ping 请求
-
/api/ocloudNotifications/v1/health
-
GET
:返回ocloudNotifications
API 的健康状况
-
9089
是在应用程序 Pod 中部署的 cloud-event-consumer
容器的默认端口。您可以根据需要为 DU 应用程序配置不同的端口。
13.7.5.1. api/ocloudNotifications/v1/subscriptions
13.7.5.1.1. HTTP 方法
GET api/ocloudNotifications/v1/subscriptions
13.7.5.1.1.1. 描述
返回订阅列表。如果订阅存在,则返回 200 OK
状态代码以及订阅列表。
API 响应示例
[ { "id": "75b1ad8f-c807-4c23-acf5-56f4b7ee3826", "endpointUri": "http://localhost:9089/event", "uriLocation": "http://localhost:8089/api/ocloudNotifications/v1/subscriptions/75b1ad8f-c807-4c23-acf5-56f4b7ee3826", "resource": "/cluster/node/compute-1.example.com/ptp" } ]
13.7.5.1.2. HTTP 方法
POST api/ocloudNotifications/v1/subscriptions
13.7.5.1.2.1. 描述
创建新订阅。如果订阅成功创建,或者已存在,则返回 201 Created
状态代码。
参数 | 类型 |
---|---|
subscription | data |
有效负载示例
{ "uriLocation": "http://localhost:8089/api/ocloudNotifications/v1/subscriptions", "resource": "/cluster/node/compute-1.example.com/ptp" }
13.7.5.2. api/ocloudNotifications/v1/subscriptions/<subscription_id>
13.7.5.2.1. HTTP 方法
GET api/ocloudNotifications/v1/subscriptions/<subscription_id>
13.7.5.2.1.1. 描述
返回 ID 为 <subscription_id>
的订阅详情
参数 | 类型 |
---|---|
| 字符串 |
API 响应示例
{ "id":"48210fb3-45be-4ce0-aa9b-41a0e58730ab", "endpointUri": "http://localhost:9089/event", "uriLocation":"http://localhost:8089/api/ocloudNotifications/v1/subscriptions/48210fb3-45be-4ce0-aa9b-41a0e58730ab", "resource":"/cluster/node/compute-1.example.com/ptp" }
13.7.5.3. api/ocloudNotifications/v1/subscriptions/status/<subscription_id>
13.7.5.3.1. HTTP 方法
PUT api/ocloudNotifications/v1/subscriptions/status/<subscription_id>
13.7.5.3.1.1. 描述
为 ID 为 <subscription_id>
的订阅创建一个新的状态 ping 请求。如果订阅存在,状态请求将成功,并返回 202 Accepted
状态代码。
参数 | 类型 |
---|---|
| 字符串 |
API 响应示例
{"status":"ping sent"}
13.7.5.4. api/ocloudNotifications/v1/health/
13.7.5.4.1. HTTP 方法
GET api/ocloudNotifications/v1/health/
13.7.5.4.1.1. 描述
返回 ocloudNotifications
REST API 的健康状况。
API 响应示例
OK
13.7.6. 使用 CLI 监控 PTP 快速事件指标
您可以使用 oc
CLI 直接从 cloud-event-proxy
容器监控快速事件总线指标。
OpenShift Container Platform Web 控制台中还提供了 PTP fast 事件通知指标。
先决条件
-
安装 OpenShift Container Platform CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。 - 安装和配置 PTP Operator。
流程
获取活跃的
linuxptp-daemon
pod 列表。$ oc get pods -n openshift-ptp
输出示例
NAME READY STATUS RESTARTS AGE linuxptp-daemon-2t78p 3/3 Running 0 8h linuxptp-daemon-k8n88 3/3 Running 0 8h
运行以下命令,访问所需
cloud-event-proxy
容器的指标:$ oc exec -it <linuxptp-daemon> -n openshift-ptp -c cloud-event-proxy -- curl 127.0.0.1:9091/metrics
其中:
- <linuxptp-daemon>
指定您要查询的 pod,例如
linuxptp-daemon-2t78p
。输出示例
# HELP cne_amqp_events_published Metric to get number of events published by the transport # TYPE cne_amqp_events_published gauge cne_amqp_events_published{address="/cluster/node/compute-1.example.com/ptp/status",status="success"} 1041 # HELP cne_amqp_events_received Metric to get number of events received by the transport # TYPE cne_amqp_events_received gauge cne_amqp_events_received{address="/cluster/node/compute-1.example.com/ptp",status="success"} 1019 # HELP cne_amqp_receiver Metric to get number of receiver created # TYPE cne_amqp_receiver gauge cne_amqp_receiver{address="/cluster/node/mock",status="active"} 1 cne_amqp_receiver{address="/cluster/node/compute-1.example.com/ptp",status="active"} 1 cne_amqp_receiver{address="/cluster/node/compute-1.example.com/redfish/event",status="active"} ...
13.7.7. 在 web 控制台中监控 PTP fast 事件指标
您可以使用预配置和自我更新 Prometheus 监控堆栈在 OpenShift Container Platform Web 控制台中监控 PTP 快速事件指标。
先决条件
-
安装 OpenShift Container Platform CLI
oc
。 -
以具有
cluster-admin
权限的用户身份登录。
流程
输入以下命令从
cloud-event-proxy
sidecar 容器返回可用 PTP 指标列表:$ oc exec -it <linuxptp_daemon_pod> -n openshift-ptp -c cloud-event-proxy -- curl 127.0.0.1:9091/metrics
其中:
- <linuxptp_daemon_pod>
-
指定您要查询的 pod,例如
linuxptp-daemon-2t78p
。
-
从返回的指标列表中复制您要查询的 PTP 指标名称,例如
cne_amqp_events_received
。 -
在 OpenShift Container Platform web 控制台中点 Observe
Metrics。 - 将 PTP 指标粘贴到 Expression 字段中,点 Run query。
其他资源