コンテンツへスキップ

PingSource オブジェクトの作成

stage version

このトピックでは、PingSource オブジェクトを作成する方法について説明します。

PingSource は、指定された cron スケジュールで、固定ペイロードを持つイベントを生成するイベントソースです。

以下の例は、毎分イベントをシンクとして使用される `event-display` という名前の Knative サービスに送信するイベントソースとして PingSource を構成する方法を示しています。既存のシンクがある場合は、例を独自のの値に置き換えることができます。

始める前に

PingSource を作成するには

  • Knative Eventing をインストールする必要があります。PingSource イベントソースタイプは、Knative Eventing をインストールするとデフォルトで有効になります。
  • シンクや PingSource などのコンポーネントを作成するには、`kubectl` コマンドまたは `kn` コマンドを使用できます。
  • この手順の検証ステップ中にログを記録するには、`kubectl` または `kail` を使用できます。

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 仕様で `data` の代わりに `dataBase64` を使用すると、base64 エンコードされたバイナリデータを送信できます。

    次のいずれかのオプションを使用します。

    • テキスト、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>` は送信するデータです。このデータは、バイナリではなく、テキストとして表現する必要があります。たとえば、`{"message": "Hello world!"}` のような JSON オブジェクトです。
      • `<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>` は送信するデータです。このデータは、バイナリではなく、テキストとして表現する必要があります。たとえば、`{"message": "Hello world!"}` のような JSON オブジェクトです。
        • `<sink-kind>` はシンクとして使用する任意のサポートされる Addressable オブジェクトです。たとえば、`Service` または `Deployment` です。
        • `<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` サービスに送信したイベントの `Attributes` プロパティと `Data` プロパティを返しました。

    ☁️  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 と共有されます。詳細はこちら。