PingSource オブジェクトの作成¶
このトピックでは、PingSource オブジェクトを作成する方法について説明します。
PingSource は、指定された cron スケジュールで、固定ペイロードを持つイベントを生成するイベントソースです。
以下の例は、毎分イベントをシンクとして使用される `event-display` という名前の Knative サービスに送信するイベントソースとして PingSource を構成する方法を示しています。既存のシンクがある場合は、例を独自のの値に置き換えることができます。
始める前に¶
PingSource を作成するには
- Knative Eventing をインストールする必要があります。PingSource イベントソースタイプは、Knative Eventing をインストールするとデフォルトで有効になります。
- シンクや PingSource などのコンポーネントを作成するには、`kubectl` コマンドまたは `kn` コマンドを使用できます。
- この手順の検証ステップ中にログを記録するには、`kubectl` または `kail` を使用できます。
PingSource オブジェクトの作成¶
-
オプション: 次のコマンドを実行して、PingSource の名前空間を作成します。
kubectl create namespace <namespace>
ここで、`<namespace>` は PingSource で使用する名前空間です。たとえば、`pingsource-example` です。
注
PingSource および関連コンポーネントの名前空間を作成すると、`default` 名前空間に存在する可能性のある他のコンポーネントから分離されるため、このワークフローの変更やイベントをより簡単に表示できます。
また、名前空間を削除してすべてのリソースを削除できるため、ソースの削除も容易になります。 -
シンクを作成します。独自のシンクがない場合は、次の例のサービスを使用して、受信メッセージをログに出力できます。
-
以下の 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 で作成した名前空間の名前です。
-
次のコマンドを実行して YAML ファイルを適用します。
ここで、`<filename>` は前の手順で作成したファイルの名前です。kubectl apply -f <filename>.yaml
-
-
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 を作成するには
-
以下のテンプレートを使用して 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 リファレンスを参照してください。
-
次のコマンドを実行して YAML ファイルを適用します。
ここで、`<filename>` は前の手順で作成したファイルの名前です。kubectl apply -f <filename>.yaml
-
-
バイナリデータを送信する PingSource を作成するには
-
以下のテンプレートを使用して 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 リファレンスを参照してください。
-
次のコマンドを実行して YAML ファイルを適用します。
ここで、`<filename>` は前の手順で作成したファイルの名前です。kubectl apply -f <filename>.yaml
-
-
PingSource オブジェクトの検証¶
-
次のコマンドを実行して、`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
-
出力が、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 オブジェクトとすべての関連リソースを削除するには、次のコマンドを実行して名前空間を削除します。
ここで、`<namespace>` は PingSource オブジェクトを含む名前空間です。kubectl delete namespace <namespace>
-
PingSource インスタンスのみを削除するには、次のコマンドを実行します。
ここで、`<pingsource-name>` は削除する PingSource の名前です。たとえば、`test-ping-source` です。kn source ping delete <pingsource-name>
ここで、`<pingsource-name>` は削除する PingSource の名前です。たとえば、`test-ping-source` です。kubectl delete pingsources.sources.knative.dev <pingsource-name>
-
シンクのみを削除するには、次のコマンドを実行します。
ここで、`<sink-name>` はシンクの名前です。たとえば、`event-display` です。kn service delete <sink-name>
ここで、`<sink-name>` はシンクの名前です。たとえば、`event-display` です。kubectl delete service.serving.knative.dev <sink-name>