跳至內容

建立 PingSource 物件

stage version

本主題描述如何建立 PingSource 物件。

PingSource 是一個事件來源,會根據指定的 cron 排程產生具有固定酬載的事件。

以下範例顯示如何將 PingSource 設定為每分鐘將事件傳送到名為 event-display 的 Knative 服務的事件來源,該服務用作接收器。如果您有現有的接收器,則可以使用自己的值取代範例。

開始之前

若要建立 PingSource

  • 您必須安裝 Knative Eventing。當您安裝 Knative Eventing 時,預設會啟用 PingSource 事件來源類型。
  • 您可以使用 kubectlkn 命令來建立元件,例如接收器和 PingSource。
  • 您可以使用 kubectlkail 在此程序中的驗證步驟期間進行記錄。

建立 PingSource 物件

  1. 選用:執行下列命令,為您的 PingSource 建立命名空間

    kubectl create namespace <namespace>
    

    其中 <namespace> 是您要讓 PingSource 使用的命名空間。例如,pingsource-example

    注意

    為您的 PingSource 和相關元件建立命名空間可讓您更輕鬆地檢視此工作流程的變更和事件,因為這些會與 default 命名空間中可能存在的其他元件隔離。

    這也使得移除來源更容易,因為您可以刪除命名空間以移除所有資源。

  2. 建立接收器。如果您沒有自己的接收器,則可以使用以下範例服務,該服務會將傳入訊息傾印到記錄中

    1. 將下列 YAML 複製到檔案中

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: event-display
        namespace: <namespace>
      spec:
        replicas: 1
        selector:
          matchLabels: &labels
            app: event-display
        template:
          metadata:
            labels: *labels
          spec:
            containers:
              - name: event-display
                image: gcr.io/knative-releases/knative.dev/eventing/cmd/event_display
      
      ---
      
      kind: Service
      apiVersion: v1
      metadata:
        name: event-display
        namespace: <namespace>
      spec:
        selector:
          app: event-display
        ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
      

      其中 <namespace> 是您在上述步驟 1 中建立的命名空間名稱。

    2. 執行以下命令來套用 YAML 檔案

      kubectl apply -f <filename>.yaml
      
      其中 <filename> 是您在上一個步驟中建立的檔案名稱。

  3. 建立 PingSource 物件。

    注意

    您要傳送的資料必須在 PingSource YAML 檔案中以文字表示。無法在 YAML 中直接序列化傳送二進位資料的事件。但是,您可以使用 PingSource 規格中的 dataBase64 來傳送經過 base64 編碼的二進位資料,而不是 data

    使用下列其中一個選項

    • 若要建立傳送可以表示為純文字(例如文字、JSON 或 XML)的資料的 PingSource,請執行下列命令

      kn source ping create <pingsource-name> \
        --namespace <namespace> \
        --schedule "<cron-schedule>" \
        --data '<data>' \
        --sink <sink-name>
      
      其中

      • <pingsource-name> 是您要建立的 PingSource 名稱,例如 test-ping-source
      • <namespace> 是您在上述步驟 1 中建立的命名空間名稱。
      • <cron-schedule> 是 PingSource 傳送事件排程的 cron 運算式,例如,*/1 * * * * 每分鐘傳送一次事件。支援標準Quartz Scheduler cron 格式,後者支援秒欄位。
      • <data> 是您要傳送的資料。此資料必須以文字表示,而非二進位。例如,JSON 物件,例如 {"message": "Hello world!"}
      • <sink-name> 是您的接收器名稱,例如 http://event-display.pingsource-example.svc.cluster.local

      如需可用選項的清單,請參閱Knative 用戶端文件

    • 若要建立傳送二進位資料的 PingSource,請執行下列命令

      kn source ping create <pingsource-name> \
        --namespace <namespace> \
        --schedule "<cron-schedule>" \
        --data '<base64-data>' \
        --encoding 'base64' \
        --sink <sink-name>
      
      其中

      • <pingsource-name> 是您要建立的 PingSource 名稱,例如 test-ping-source
      • <namespace> 是您在上述步驟 1 中建立的命名空間名稱。
      • <cron-schedule> 是 PingSource 傳送事件排程的 cron 運算式,例如,*/1 * * * * 每分鐘傳送一次事件。支援標準Quartz Scheduler cron 格式,後者支援秒欄位。
      • <base64-data> 是您要傳送的 base64 編碼二進位資料,例如 ZGF0YQ==
      • <sink-name> 是您的接收器名稱,例如 http://event-display.pingsource-example.svc.cluster.local

      如需可用選項的清單,請參閱Knative 用戶端文件

    • 若要建立傳送可以表示為純文字(例如文字、JSON 或 XML)的資料的 PingSource

      1. 使用以下範本建立 YAML 檔案

        apiVersion: sources.knative.dev/v1
        kind: PingSource
        metadata:
          name: <pingsource-name>
          namespace: <namespace>
        spec:
          schedule: "<cron-schedule>"
          contentType: "<content-type>"
          data: '<data>'
          sink:
            ref:
              apiVersion: v1
              kind: <sink-kind>
              name: <sink-name>
        
        其中

        • <pingsource-name> 是您要建立的 PingSource 名稱,例如 test-ping-source
        • <namespace> 是您在上述步驟 1 中建立的命名空間名稱。
        • <cron-schedule> 是 PingSource 傳送事件排程的 cron 運算式,例如,*/1 * * * * 每分鐘傳送一次事件。支援標準Quartz Scheduler cron 格式,後者支援秒欄位。
        • <content-type> 是您要傳送的資料的媒體類型,例如 application/json
        • <data> 是您要傳送的資料。此資料必須以文字表示,而非二進位。例如,JSON 物件,例如 {"message": "Hello world!"}
        • <sink-kind> 是您要用作接收器的任何支援的 Addressable 物件,例如 ServiceDeployment
        • <sink-name> 是您的接收器名稱,例如 event-display

        如需有關您可以為 PingSource 物件設定的欄位的詳細資訊,請參閱PingSource 參考

      2. 執行以下命令來套用 YAML 檔案

        kubectl apply -f <filename>.yaml
        
        其中 <filename> 是您在上一個步驟中建立的檔案名稱。

    • 若要建立傳送二進位資料的 PingSource

      1. 使用以下範本建立 YAML 檔案

        apiVersion: sources.knative.dev/v1
        kind: PingSource
        metadata:
          name: <pingsource-name>
          namespace: <namespace>
        spec:
          schedule: "<cron-schedule>"
          contentType: "<content-type>"
          dataBase64: "<base64-data>"
          sink:
            ref:
              apiVersion: v1
              kind: <sink-kind>
              name: <sink-name>
        
        其中

        • <pingsource-name> 是您要建立的 PingSource 名稱,例如 test-ping-source-binary
        • <namespace> 是您在上述步驟 1 中建立的命名空間名稱。
        • <cron-schedule> 是 PingSource 傳送事件排程的 cron 運算式,例如,*/1 * * * * 每分鐘傳送一次事件。支援標準Quartz Scheduler cron 格式,後者支援秒欄位。
        • <content-type> 是您要傳送的資料的媒體類型,例如 application/json
        • <base64-data> 是您要傳送的 base64 編碼二進位資料,例如 ZGF0YQ==
        • <sink-kind> 是您要用作接收器的任何支援的 Addressable 物件,例如 Kubernetes Service。
        • <sink-name> 是您的接收器名稱,例如 event-display

        如需有關您可以為 PingSource 物件設定的欄位的詳細資訊,請參閱PingSource 參考

      2. 執行以下命令來套用 YAML 檔案

        kubectl apply -f <filename>.yaml
        
        其中 <filename> 是您在上一個步驟中建立的檔案名稱。

驗證 PingSource 物件

  1. 執行下列命令以檢視 event-display 事件取用者的記錄

    kubectl -n pingsource-example logs -l app=event-display --tail=100
    
    kail -l serving.knative.dev/service=event-display -c user-container --since=10m
    
  2. 確認輸出會傳回 PingSource 傳送至接收器的事件屬性。在以下範例中,命令傳回了 PingSource 傳送至 event-display 服務的事件的 AttributesData 屬性

    ☁️  cloudevents.Event
    Validation: valid
    Context Attributes,
      specversion: 1.0
      type: dev.knative.sources.ping
      source: /apis/v1/namespaces/pingsource-example/pingsources/test-ping-source
      id: 49f04fe2-7708-453d-ae0a-5fbaca9586a8
      time: 2021-03-25T19:41:00.444508332Z
      datacontenttype: application/json
    Data,
      {
        "message": "Hello world!"
      }
    

刪除 PingSource 物件

您可以刪除 PingSource 和所有相關資源,也可以個別刪除資源

  • 若要移除 PingSource 物件和所有相關資源,請執行下列命令刪除命名空間

    kubectl delete namespace <namespace>
    
    其中 <namespace> 是包含 PingSource 物件的命名空間。

  • 若只要刪除 PingSource 執行個體,請執行下列命令

    kn source ping delete <pingsource-name>
    
    其中 <pingsource-name> 是您要刪除的 PingSource 名稱,例如 test-ping-source

    kubectl delete pingsources.sources.knative.dev <pingsource-name>
    
    其中 <pingsource-name> 是您要刪除的 PingSource 名稱,例如 test-ping-source

  • 若只要刪除接收器,請執行下列命令

    kn service delete <sink-name>
    
    其中 <sink-name> 是您的接收器名稱,例如 event-display

    kubectl delete service.serving.knative.dev <sink-name>
    
    其中 <sink-name> 是您的接收器名稱,例如 event-display

我們使用分析和 Cookie 來了解網站流量。您使用我們網站的相關資訊會與 Google 分享,以達到此目的。瞭解詳情。