13.7. PTP 하드웨어 빠른 이벤트 알림 프레임워크

중요

일반 클럭이 있는 PTP 이벤트는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

13.7.1. PTP 및 클럭 동기화 오류 이벤트 정보

가상 RAN과 같은 클라우드 네이티브 애플리케이션에서는 전체 네트워크의 작동에 중요한 하드웨어 타이밍 이벤트에 대한 알림에 액세스해야 합니다. 빠른 이벤트 알림은 임박한 실시간 PTP(Precision Time Protocol) 클럭 동기화 이벤트에 대한 조기 경고 신호입니다. PTP 클럭 동기화 오류는 낮은 대기 시간 애플리케이션의 성능과 안정성에 부정적인 영향을 줄 수 있습니다(예: 분산 장치(DU)에서 실행되는 vRAN 애플리케이션).

PTP 동기화 손실은 RAN 네트워크에 심각한 오류입니다. 노드에서 동기화가 손실된 경우 라디오가 종료될 수 있으며 네트워크 Over the Air (OTA) 트래픽이 무선 네트워크의 다른 노드로 이동될 수 있습니다. 클러스터 노드에서 PTP 클럭 동기화 상태를 DU에서 실행 중인 vRAN 애플리케이션에 통신할 수 있도록 함으로써 이벤트 알림이 워크로드 오류와 비교하여 완화됩니다.

동일한 DU 노드에서 실행되는 RAN 애플리케이션에서 이벤트 알림을 사용할 수 있습니다. 게시/서브스크립션 REST API는 이벤트 알림을 메시징 버스에 전달합니다. 게시/서브스크립션 메시징 또는 pub/sub 메시징은 주제에 게시된 모든 메시지가 해당 주제에 대한 모든 가입자에 의해 즉시 수신되는 서비스 통신 아키텍처에 대한 비동기식 서비스입니다.

빠른 이벤트 알림은 OpenShift Container Platform의 PTP Operator에서 모든 PTP 가능 네트워크 인터페이스에 대해 생성됩니다. 이 이벤트는 AMQP(Advanced Message Queuing Protocol) 메시지 버스를 통해 cloud-event-proxy 사이드카 컨테이너를 사용하여 사용할 수 있습니다. AMQP 메시지 버스는 AMQ Interconnect Operator에서 제공합니다.

참고

PTP 빠른 이벤트 알림은 PTP 일반 클럭 또는 PTP 경계 시계를 사용하도록 구성된 네트워크 인터페이스에 사용할 수 있습니다.

13.7.2. PTP 빠른 이벤트 알림 프레임워크 정보

DCN(Distributed Unit) 애플리케이션은 PTP Operator 및 cloud-event-proxy 사이드카 컨테이너를 사용하여 OpenShift Container Platform에서 생성한 PTP(Precision Time Protocol) 빠른 이벤트 알림을 구독할 수 있습니다. ptpOperatorConfig CR(사용자 정의 리소스)에서 enableEventPublisher 필드를 true 로 설정하고 AMQP(Advanced Messagehiera Protocol) transportHost 주소를 지정하여 cloud-event-proxy 사이드카 컨테이너를 활성화합니다. PTP 빠른 이벤트는 AMQ Interconnect Operator에서 제공하는 AMQP 이벤트 알림 버스를 사용합니다. AMQ Interconnect는 AMQP 지원 엔드포인트 간에 유연한 메시지 라우팅을 제공하는 메시징 라우터인 Red Hat AMQ의 구성 요소입니다. PTP 빠른 이벤트 프레임워크의 개요는 다음과 같습니다.

그림 13.1. PTP 빠른 이벤트 개요

PTP 빠른 이벤트 개요

cloud-event-proxy 사이드카 컨테이너는 기본 애플리케이션의 리소스를 사용하지 않고 대기 시간 없이 기본 vRAN 애플리케이션과 동일한 리소스에 액세스할 수 있습니다.

빠른 이벤트 알림 프레임워크는 통신에 REST API를 사용하며 O-RAN REST API 사양을 기반으로 합니다. 프레임워크는 게시자 및 구독자 애플리케이션 간의 통신을 처리하는 게시자, 구독자 및 AMQ 메시징 버스로 구성됩니다. cloud-event-proxy 사이드카는 DU 노드의 기본 DU 애플리케이션 컨테이너에 느슨하게 연결된 Pod에서 실행되는 유틸리티 컨테이너입니다. DU 애플리케이션을 게시된 PTP 이벤트에 등록할 수 있는 이벤트 게시 프레임워크를 제공합니다.

DU 애플리케이션은 사이드카 패턴에서 cloud-event-proxy 컨테이너를 실행하여 PTP 이벤트를 구독합니다. 다음 워크플로는 DU 애플리케이션에서 PTP 빠른 이벤트를 사용하는 방법을 설명합니다.

  1. DU 애플리케이션에서 서브스크립션 요청: DU는 API 요청을 cloud-event-proxy 사이드카로 전송하여 PTP 이벤트 서브스크립션을 생성합니다. cloud-event-proxy 사이드카는 서브스크립션 리소스를 생성합니다.
  2. cloud-event-proxy 사이드카는 서브스크립션을 생성: 이벤트 리소스는 cloud-event-proxy 사이드카에 의해 유지됩니다. cloud-event-proxy 사이드카 컨테이너는 ID 및 URL 위치가 있는 승인을 전송하여 저장된 서브스크립션 리소스에 액세스합니다. 사이드카는 서브스크립션에 지정된 리소스에 대한 AMQ 메시징 리스너 프로토콜을 생성합니다.
  3. DU 애플리케이션에서 PTP 이벤트 알림 수신: cloud-event-proxy 사이드카 컨테이너가 리소스 한정자에 지정된 주소를 수신합니다. DU 이벤트 소비자는 메시지를 처리하고 서브스크립션에 지정된 반환 URL로 전달합니다.
  4. cloud-event-proxy 사이드카는 PTP 이벤트를 검증하고 DU 애플리케이션에 게시: cloud-event-proxy 사이드카는 이벤트를 수신하고 클라우드 이벤트 오브젝트를 래핑하여 데이터를 검색하고 반환 URL을 가져와 이벤트를 DU 소비자 애플리케이션에 다시 게시합니다.
  5. DU 애플리케이션은 PTP 이벤트 사용: DU 애플리케이션 이벤트 소비자가 PTP 이벤트를 수신하고 처리합니다.

13.7.3. AMQ 메시징 버스 설치

노드에서 게시자와 구독자 간에 PTP 빠른 이벤트 알림을 전달하려면 노드에서 로컬로 실행되도록 AMQ 메시징 버스를 설치하고 구성해야 합니다. 클러스터에서 사용할 AMQ Interconnect Operator를 설치하여 이 작업을 수행합니다.

사전 요구 사항

  • OpenShift Container Platform CLI (oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.

절차

검증

  1. 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

  2. 필수 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 빠른 이벤트 알림을 사용하려면 PTP Operator PtpOperatorConfig CR(사용자 정의 리소스)에서 빠른 이벤트 게시자를 활성화하고 생성한 PtpConfig CR에서 ptpClockThreshold 값을 구성해야 합니다.

사전 요구 사항

  • OpenShift Container Platform CLI (oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • PTP Operator 및 AMQ Interconnect Operator를 설치합니다.

절차

  1. 기본 PTP Operator 구성을 수정하여 PTP 빠른 이벤트를 활성화합니다.

    1. 다음 YAML을 ptp-operatorconfig.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
      1
      enableEventPublishertrue로 설정하여 PTP 빠른 이벤트 알림을 활성화합니다.
      2
      < instance_name > 및 < namespace >가 AMQ Interconnect 라우터 인스턴스 이름과 네임스페이스(예: amqp://amq-interconnect.amq-interconnect.svc.cluster.local)에 해당합니다.
    2. PtpOperatorConfig CR을 업데이트합니다.

      $ oc apply -f ptp-operatorconfig.yaml
  2. PTP 지원 인터페이스에 대한 PtpConfig CR(사용자 정의 리소스)을 생성하고 ptpClockThresholdptp4lOpts 에 필요한 값을 설정합니다. 다음 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
    PTP 빠른 이벤트를 사용하려면 --summary_interval -4 를 추가합니다.
    2
    필수 phc2sysOpts 값. -m 에서 stdout 에 메시지를 출력합니다. linuxptp-daemon DaemonSet 은 로그를 구문 분석하고 Prometheus 지표를 생성합니다.
    3
    기본 /etc/ptp4l.conf 파일을 대체할 구성이 포함된 문자열을 지정합니다. 기본 구성을 사용하려면 필드를 비워 둡니다.
    4
    선택 사항: ptpClockThreshold 가 없으면 기본값이 ptpClockThreshold 필드에 사용됩니다. 스탠자는 기본 ptpClockThreshold 값을 표시합니다. ptpClockThreshold 값은 PTP 이벤트가 트리거되기 전에 PTP 마스터 클럭이 연결 해제된 후의 기간을 구성합니다. holdOverTimeout 은 PTP 마스터 클럭의 연결이 끊어지면 PTP 클럭 이벤트 상태가 FREERUN 로 변경되기 전 시간(초)입니다. maxOffsetThresholdminOffsetThreshold 설정은 CLOCK_REALTIME (phc2sys) 또는 마스터 오프셋(ptp4l)의 값과 비교되는 나노초에 오프셋 값을 구성합니다. ptp4l 또는 phc2sys 오프셋 값이 이 범위를 벗어나는 경우 PTP 클럭 상태가 FREERUN 로 설정됩니다. 오프셋 값이 이 범위 내에 있으면 PTP 클럭 상태가 LOCKED 로 설정됩니다.

추가 리소스

13.7.5. PTP 이벤트 REST API 참조에 DU 애플리케이션 구독

PTP 이벤트 알림 REST API를 사용하여 분산 장치(DU) 애플리케이션을 상위 노드에서 생성된 PTP 이벤트에 등록합니다.

리소스 주소 /cluster/node/<node_name>/ptp 를 사용하여 PTP 이벤트에 애플리케이션을 서브스크립션합니다. 여기서 < node_name >은 DU 애플리케이션을 실행하는 클러스터 노드입니다.

별도의 DU 애플리케이션 pod에 cloud-event-consumer DU 애플리케이션 컨테이너 및 cloud-event-proxy 사이드카 컨테이너를 배포합니다. cloud-event-consumer DU 애플리케이션은 애플리케이션 Pod의 cloud-event-proxy 컨테이너에 가입합니다.

다음 API 끝점을 사용하여 DU 애플리케이션 Pod의 http://localhost:8089/api/ocloudNotifications/v1/ 에서 cloud-event- consumer DU 애플리케이션을 게시한 PTP 이벤트에 등록합니다.

  • /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 는 애플리케이션 포드에 배포된 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 상태 코드가 반환됩니다.

표 13.4. 쿼리 매개변수

매개변수유형

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>인 서브스크립션에 대한 세부 정보를 반환합니다.

표 13.5. 쿼리 매개변수

매개변수유형

<subscription_id>

string

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 상태 코드가 반환됩니다.

표 13.6. 쿼리 매개변수

매개변수유형

<subscription_id>

string

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 웹 콘솔에서 PTP 빠른 이벤트 알림 메트릭도 사용할 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform CLI (oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • PTP Operator를 설치하고 구성합니다.

절차

  1. 활성 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

  2. 다음 명령을 실행하여 필요한 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. 웹 콘솔에서 PTP 빠른 이벤트 메트릭 모니터링

사전 구성 및 자체 업데이트 Prometheus 모니터링 스택을 사용하여 OpenShift Container Platform 웹 콘솔에서 PTP 빠른 이벤트 메트릭을 모니터링할 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform CLI oc를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.

절차

  1. 다음 명령을 입력하여 cloud-event-proxy 사이드카 컨테이너에서 사용 가능한 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 ).
  2. 반환된 메트릭 목록에서 쿼리할 PTP 메트릭의 이름을 복사합니다(예: cne_amqp_events_received ).
  3. OpenShift Container Platform 웹 콘솔에서 모니터링메트릭을 클릭합니다.
  4. PTP 메트릭을 표현식 필드에 붙여넣고 쿼리 실행을 클릭합니다.

추가 리소스