建立 PingSource 物件¶
本主題描述如何建立 PingSource 物件。
PingSource 是一個事件來源,會根據指定的 cron 排程產生具有固定酬載的事件。
以下範例顯示如何將 PingSource 設定為每分鐘將事件傳送到名為 event-display
的 Knative 服務的事件來源,該服務用作接收器。如果您有現有的接收器,則可以使用自己的值取代範例。
開始之前¶
若要建立 PingSource
- 您必須安裝 Knative Eventing。當您安裝 Knative Eventing 時,預設會啟用 PingSource 事件來源類型。
- 您可以使用
kubectl
或kn
命令來建立元件,例如接收器和 PingSource。 - 您可以使用
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 檔案
其中kubectl apply -f <filename>.yaml
<filename>
是您在上一個步驟中建立的檔案名稱。
-
-
建立 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
-
使用以下範本建立 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 物件,例如Service
或Deployment
。<sink-name>
是您的接收器名稱,例如event-display
。
如需有關您可以為 PingSource 物件設定的欄位的詳細資訊,請參閱PingSource 參考。
-
執行以下命令來套用 YAML 檔案
其中kubectl apply -f <filename>.yaml
<filename>
是您在上一個步驟中建立的檔案名稱。
-
-
若要建立傳送二進位資料的 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 檔案
其中kubectl apply -f <filename>.yaml
<filename>
是您在上一個步驟中建立的檔案名稱。
-
-
驗證 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 物件和所有相關資源,請執行下列命令刪除命名空間
其中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
。