コンテンツにスキップ

ApiServerSourceオブジェクトの作成

version

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

始める前に

ApiServerSourceオブジェクトを作成する前に

  • クラスターにKnative Eventingがインストールされている必要があります。
  • kubectl CLIツールをインストールする必要があります。
  • オプション:knコマンドを使用する場合は、knツールをインストールします。

ApiServerSourceオブジェクトを作成する

  1. オプション:次のコマンドを実行して、APIサーバーソースインスタンスのネームスペースを作成します。

    kubectl create namespace <namespace>
    
    ここで、<namespace>は作成するネームスペースの名前です。

    注意

    ApiServerSourceおよび関連コンポーネントのネームスペースを作成すると、これらのコンポーネントがdefaultネームスペースに存在する可能性のある他のコンポーネントから分離されるため、このワークフローの変更とイベントをより簡単に表示できます。

    また、ネームスペースを削除してすべてのリソースを削除できるため、ソースの削除も簡単になります。

  2. ServiceAccountを作成する

    1. 次のテンプレートを使用してYAMLファイルを作成します。

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: <service-account>
        namespace: <namespace>
      
      ここで

      • <service-account>は、作成するServiceAccountの名前です。
      • <namespace>は、手順1で先に作成したネームスペースです。
    2. 次のコマンドを実行して、YAMLファイルを適用します。

      kubectl apply -f <filename>.yaml
      
      ここで、<filename>は前の手順で作成したファイルの名前です。

  3. ロールを作成する

    1. 次のテンプレートを使用してYAMLファイルを作成します。

      apiVersion: rbac.authorization.k8s.io/v1
      kind: Role
      metadata:
        name: <role>
        namespace: <namespace>
      rules:
        <rules>
      
      ここで

      • <role>は、作成するロールの名前です。
      • <namespace>は、手順1で先に作成したネームスペースの名前です。
      • <rules>は、APIServerSourceオブジェクトに付与する権限のセットです。この権限のセットは、イベントを受信するリソースと一致する必要があります。たとえば、eventsリソースに関連するイベントを受信するには、次の権限のセットを使用します。

        - apiGroups:
          - ""
          resources:
          - events
          verbs:
          - get
          - list
          - watch
        

        注意

        必要な動詞は、getlistwatchのみです。

    2. 次のコマンドを実行して、YAMLファイルを適用します。

      kubectl apply -f <filename>.yaml
      
      ここで、<filename>は前の手順で作成したファイルの名前です。

  4. RoleBindingを作成する

    1. 次のテンプレートを使用してYAMLファイルを作成します。

      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
        name: <role-binding>
        namespace: <namespace>
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: Role
        name: <role>
      subjects:
      - kind: ServiceAccount
        name: <service-account>
        namespace: <namespace>
      
      ここで

      • <role-binding>は、作成するRoleBindingの名前です。
      • <namespace>は、手順1で先に作成したネームスペースの名前です。
      • <role>は、手順3で先に作成したロールの名前です。
      • <service-account>は、手順2で先に作成したServiceAccountの名前です。
    2. 次のコマンドを実行して、YAMLファイルを適用します。

      kubectl apply -f <filename>.yaml
      
      ここで、<filename>は前の手順で作成したファイルの名前です。

  5. シンクを作成します。独自のシンクがない場合は、次の例のサービスを使用して、着信メッセージをログにダンプできます。

    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>は前の手順で作成したファイルの名前です。

  6. ApiServerSourceオブジェクトを作成する

    • ApiServerSourceを作成するには、次のコマンドを実行します。

      kn source apiserver create <apiserversource> \
        --namespace <namespace> \
        --mode "Resource" \
        --resource "Event:v1" \
        --service-account <service-account> \
        --sink <sink-name>
      
      ここで

      • <apiserversource>は、作成するソースの名前です。
      • <namespace>は、手順1で先に作成したネームスペースの名前です。
      • <service-account>は、手順2で先に作成したServiceAccountの名前です。
      • <sink-name>は、シンクの名前です(例:http://event-display.pingsource-example.svc.cluster.local)。

      使用可能なオプションの一覧については、Knativeクライアントのドキュメントを参照してください。

    1. 次のテンプレートを使用してYAMLファイルを作成します。

      apiVersion: sources.knative.dev/v1
      kind: ApiServerSource
      metadata:
       name: <apiserversource-name>
       namespace: <namespace>
      spec:
       serviceAccountName: <service-account>
       mode: <event-mode>
       resources:
         - apiVersion: v1
           kind: Event
       sink:
         ref:
           apiVersion: v1
           kind: <sink-kind>
           name: <sink-name>
      
      ここで

      • <apiserversource-name>は、作成するソースの名前です。
      • <namespace>は、手順1で先に作成したネームスペースの名前です。
      • <service-account>は、手順2で先に作成したServiceAccountの名前です。
      • <event-mode>は、ResourceまたはReferenceのいずれかです。Resourceに設定すると、イベントペイロードには、イベントが対象とするリソース全体が含まれます。Referenceに設定すると、イベントペイロードには、イベントが対象とするリソースへの参照のみが含まれます。デフォルトはReferenceです。
      • <sink-kind>は、シンクとして使用する、サポートされているAddressableオブジェクト(例:ServiceまたはDeployment)です。
      • <sink-name>は、シンクの名前です。

      ApiServerSourceオブジェクトに構成できるフィールドの詳細については、ApiServerSourceリファレンスを参照してください。

    2. 次のコマンドを実行して、YAMLファイルを適用します。

      kubectl apply -f <filename>.yaml
      
      ここで、<filename>は前の手順で作成したファイルの名前です。

ApiServerSourceオブジェクトを確認する

  1. Kubernetes APIサーバーでイベントを作成させるには、次のコマンドを実行して、ネームスペースにテストPodを起動します。

    kubectl run busybox --image=busybox --namespace=<namespace> --restart=Never -- ls
    
    ここで、<namespace>は、手順1で先に作成したネームスペースの名前です。

  2. 次のコマンドを実行して、テストPodを削除します。

    kubectl --namespace=<namespace> delete pod busybox
    
    ここで、<namespace>は、手順1で先に作成したネームスペースの名前です。

  3. 次のコマンドを実行して、Knative EventingシステムによってKubernetesイベントがシンクに送信されたことを確認するためにログを表示します。

    kubectl logs --namespace=<namespace> -l app=<sink> --tail=100
    
    ここで

    • <namespace>は、手順1で先に作成したネームスペースの名前です。
    • <sink>は、手順5でシンクとして使用したPodSpecableオブジェクトの名前です。

    ログ出力の例

    ☁️  cloudevents.Event
    Validation: valid
    Context Attributes,
      specversion: 1.0
      type: dev.knative.apiserver.resource.update
      source: https://10.96.0.1:443
      subject: /apis/v1/namespaces/apiserversource-example/events/testevents.15dd3050eb1e6f50
      id: e0447eb7-36b5-443b-9d37-faf4fe5c62f0
      time: 2020-07-28T19:14:54.719501054Z
      datacontenttype: application/json
    Extensions,
      kind: Event
      name: busybox.1626008649e617e3
      namespace: apiserversource-example
    Data,
      {
        "apiVersion": "v1",
        "count": 1,
        "eventTime": null,
        "firstTimestamp": "2020-07-28T19:14:54Z",
        "involvedObject": {
          "apiVersion": "v1",
          "fieldPath": "spec.containers{busybox}",
          "kind": "Pod",
          "name": "busybox",
          "namespace": "apiserversource-example",
          "resourceVersion": "28987493",
          "uid": "1efb342a-737b-11e9-a6c5-42010a8a00ed"
        },
        "kind": "Event",
        "lastTimestamp": "2020-07-28T19:14:54Z",
        "message": "Started container",
        "metadata": {
          "creationTimestamp": "2020-07-28T19:14:54Z",
          "name": "busybox.1626008649e617e3",
          "namespace": "default",
          "resourceVersion": "506088",
        "selfLink": "/api/v1/namespaces/apiserversource-example/events/busybox.1626008649e617e3",
          "uid": "2005af47-737b-11e9-a6c5-42010a8a00ed"
        },
        "reason": "Started",
        "reportingComponent": "",
        "reportingInstance": "",
        "source": {
          "component": "kubelet",
          "host": "gke-knative-auto-cluster-default-pool-23c23c4f-xdj0"
        },
        "type": "Normal"
      }
    

ApiServerSourceオブジェクトを削除する

ApiServerSourceオブジェクトと関連するすべてのリソースを削除するには

  • 次のコマンドを実行して、ネームスペースを削除します。

    kubectl delete namespace <namespace>
    
    ここで、<namespace>は、手順1で先に作成したネームスペースの名前です。

当社は、サイトトラフィックを把握するために分析とCookieを使用しています。当サイトの使用に関する情報は、その目的のためにGoogleと共有されます。詳細はこちら。