GCP サービスの検出と使用

概要

Kubernetes Service Catalog を使用して Google Cloud Platform(GCP)Service Broker を介して利用できるサービスを一覧表示し、サービス インスタンスをプロビジョニングし、プロビジョニングされたサービス インスタンスを Google Kubernetes Engine クラスタで動作するアプリケーションにバインドできます。

この機能を使用するには、最初に Service Catalog をインストールし、Service Broker を登録します。

Service Catalog の詳細については、Kubernetes Service Catalog のドキュメントをご覧ください。

Google Cloud Platform のサービスとプランの検出

Service Broker は、Pub/Sub、Cloud SQL(MySQL)、Cloud Storage、Cloud Spanner など、GCP のサービスのいくつかを提供しています。各サービスは、1 つ以上のサービスプランを提供できます。各サービスプランは、サービスの異なる構成またはサービス階層を表します。

サービスの一覧表示

svcat

現在利用可能な GCP サービスを一覧表示するには、次のコマンドを実行します。

svcat get classes

次のようなリストが出力されます。

            NAME                       DESCRIPTION                             UUID
+---------------------------+--------------------------------+--------------------------------------+
  cloud-spanner               The first horizontally           4197a602-3eb9-4d40-8e21-0311a7a8eecb
                              scalable, strongly consistent,
                              relational database service
  cloud-iam-service-account   Specialized service which        5dcd0ba6-8df6-4a2a-b5fd-981d0aa76803
                              provisions Google Cloud
                              Platform IAM service accounts.
  cloud-pubsub                Ingest event streams from        6f4e8d17-4fde-45bd-9dcf-28bcb7eeea5c
                              anywhere, at any scale, for
                              simple, reliable, real-time
                              stream analytics
  ...                         ...                              ...

kubectl

現在利用可能な GCP サービスを一覧表示するには、kubectl get clusterserviceclasses コマンドを実行します。

kubectl -o 'custom-columns=SERVICE-NAME:.metadata.name,SERVICE-EXTERNAL-NAME:.spec.externalName' get clusterserviceclasses

次のようなリストが出力されます。

SERVICE-NAME                           SERVICE-EXTERNAL-NAME
4197a602-3eb9-4d40-8e21-0311a7a8eecb   cloud-spanner
5dcd0ba6-8df6-4a2a-b5fd-981d0aa76803   cloud-iam-service-account
6f4e8d17-4fde-45bd-9dcf-28bcb7eeea5c   cloud-pubsub
...                                    ...

コンソール UI

現在利用可能な Google Cloud サービスを一覧表示するには、次のいずれかを行います。

サービスプランを一覧表示する

svcat

利用可能なサービスプランを一覧表示することもできます。

svcat get plans

次の形式のリストが出力されます。

  NAME             CLASS                      DESCRIPTION                             UUID
+------+---------------------------+--------------------------------+--------------------------------------+
  beta   cloud-spanner               Cloud Spanner plan for Beta      21198c77-9452-4bf2-8935-babacc8294cb
                                     release of the Google Cloud Platform Service Broker
  beta   cloud-iam-service-account   A GCP IAM      d6f98382-a101-401f-80df-33afe9c4b5c7
                                     service account
  beta   cloud-pubsub                Pub/Sub plan for Beta release    444fe472-aabc-4c8a-a707-1975e2e908c8
                                     of the Google Cloud Platform Service Broker
  ...    ...                         ...                              ...

kubectl

利用可能なサービスプランを一覧表示することもできます。

kubectl -o 'custom-columns=PLAN-NAME:.metadata.name,PLAN-EXTERNAL-NAME:.spec.externalName,CLASS:.spec.clusterServiceClassRef.name' get clusterserviceplans

次の形式のリストが表示されます。

PLAN-NAME                              PLAN-EXTERNAL-NAME   CLASS
21198c77-9452-4bf2-8935-babacc8294cb   beta                 4197a602-3eb9-4d40-8e21-0311a7a8eecb
444fe472-aabc-4c8a-a707-1975e2e908c8   beta                 6f4e8d17-4fde-45bd-9dcf-28bcb7eeea5c
7bb7e217-2088-4455-8298-f711b09b1806   beta                 8e0bbfa6-2cac-40b6-8adf-e5ee8dcbe4e8
...                                    ...                  ...

コンソール UI

Google Cloud Console で [サービス インスタンス] ページに移動し、リスト内のサービスの名前をクリックすることで、特定のサービスで利用可能なサービスプランを一覧表示できます。利用可能なプランとその説明のリストとともにサービスの概要を示すページが表示されます。

サービスプランを表示する

svcat

プロビジョニングとバインディングのパラメータの詳細など、特定サービスのプランに関する詳細を表示するには、次のコマンドを使用します。

svcat describe plan [CLASS_NAME]/[PLAN_NAME]

例: svcat describe plan cloud-pubsub/beta:

  Name:          beta
  Description:   Pub/Sub plan for the Beta release of the Google Cloud Platform Service Broker
UUID: 444fe472-aabc-4c8a-a707-1975e2e908c8 Status: Active Free: false Class: cloud-pubsub Instances: No instances defined Instance Create Parameter Schema: ...

kubectl

プロビジョニングとバインディングのパラメータの詳細など、特定サービスのプランを表示するには、使用可能なサービスプランのリストから PLAN-NAME(GUID)を指定して次のコマンドを使用します。

kubectl get clusterserviceplans [PLAN_NAME] -o yaml

たとえば、kubectl get clusterserviceplans 444fe472-aabc-4c8a-a707-1975e2e908c8 -o yaml では、プランの詳細が YAML 形式で出力されます。

apiVersion: servicecatalog.k8s.io/v1beta1
kind: ClusterServicePlan
metadata:
  creationTimestamp: 2018-04-11T18:09:30Z
  name: 444fe472-aabc-4c8a-a707-1975e2e908c8
  resourceVersion: "280"
  selfLink: /apis/servicecatalog.k8s.io/v1beta1/clusterserviceplans/444fe472-aabc-4c8a-a707-1975e2e908c8
  uid: 7b2f013c-3db3-11e8-b262-0a580a140108
spec:
  bindable: true
  clusterServiceBrokerName: gcp-beta
  clusterServiceClassRef:
    name: 6f4e8d17-4fde-45bd-9dcf-28bcb7eeea5c
  description: |
    Pub/Sub plan for the Beta release of the Google Cloud Platform Service Broker
  externalID: 444fe472-aabc-4c8a-a707-1975e2e908c8
  externalMetadata:
    bullets:
    - Provisioning an instance will create a new pubsub topic
    - Binding will grant the provided service account with access on the pubsub topic
    displayName: Cloud Pub/Sub
  externalName: beta
  free: false
  instanceCreateParameterSchema:
  ...

コンソール UI

Google Cloud Console で [サービス インスタンス] ページに移動し、リスト内のサービスの名前をクリックすることで、特定のサービスで利用可能なサービスプランを一覧表示できます。利用可能なプランのリストとともにサービスの概要を示すページが表示されます。

サービスプランの JSON スキーマを表示する

プロビジョニングとバインディング用の YAML 構成を記述するときに、サービスプランの JSON スキーマを調べたい場合があります。

svcat

サービスプランの JSON スキーマを表示するには、次のコマンドを使用します。

svcat describe plan [CLASS_NAME]/[PLAN_NAME]

例: svcat describe plan cloud-pubsub/beta:


  Name:          beta
  Description:   Pub/Sub plan for the Beta release of the Google Cloud Platform Service Broker
UUID: 444fe472-aabc-4c8a-a707-1975e2e908c8 Status: Active Free: false Class: cloud-pubsub

Instances: No instances defined

Instance Create Parameter Schema: $schema: http://json-schema.org/draft-04/schema# definitions: {} description: Input parameters to create an instance - a Pubsub topic. form:

  • key: topicId validationMessage: 'Must be 3-255 characters, start with an alphanumeric character, and contain only the following characters: letters, numbers, dashes, periods, underscores, tildes, percents or plus signs. Cannot start with goog.' properties: topicId: description: A user-specified Pubsub topic ID. maxLength: 255 minLength: 3 pattern: ^[A-Za-z][-_.~+%A-Za-z0-9]+$ title: Topic name type: string required:
  • topicId type: object ...

Instance Create Parameter Schema は、プロビジョニング用の JSON スキーマを示します。この例では、必須フィールドである topicId を指定する必要があります。

同様に、Binding Create Parameter Schema でバインディング用の JSON スキーマを確認できます。

kubectl

サービスプランの JSON スキーマを表示するには、PLAN-NAME(GUID)を指定して次のコマンドを使用します。

kubectl get clusterserviceplans [PLAN_NAME] -o yaml

例: kubectl get clusterserviceplans 444fe472-aabc-4c8a-a707-1975e2e908c8 -o yaml:

apiVersion: servicecatalog.k8s.io/v1beta1
kind: ClusterServicePlan
metadata:
  creationTimestamp: 2018-04-11T18:09:30Z
  name: 444fe472-aabc-4c8a-a707-1975e2e908c8
  resourceVersion: "280"
  selfLink: /apis/servicecatalog.k8s.io/v1beta1/clusterserviceplans/444fe472-aabc-4c8a-a707-1975e2e908c8
  uid: 7b2f013c-3db3-11e8-b262-0a580a140108
spec:
  ...
  instanceCreateParameterSchema:
    $schema: http://json-schema.org/draft-04/schema#
    definitions: {}
    description: Input parameters to create an instance - a Pubsub topic.
    form:
    - key: topicId
      validationMessage: 'Must be 3-255 characters, start with an alphanumeric character,
        and contain only the following characters: letters, numbers, dashes, periods,
        underscores, tildes, percents or plus signs. Cannot start with goog.'
    properties:
      topicId:
        description: A user-specified Pubsub topic ID.
        maxLength: 255
        minLength: 3
        pattern: ^[A-Za-z][-_.~+%A-Za-z0-9]+$
        title: Topic name
        type: string
    required:
    - topicId
    type: object
...

instanceCreateParameterSchema は、プロビジョニング用の JSON スキーマを示します。この例では、必須フィールドである topicId を指定する必要があります。

同様に、serviceBindingCreateParameterSchema でバインディング用の JSON スキーマを確認できます。

コンソール UI

現時点では Google Cloud Console に JSON スキーマは表示されません。kubectlsvcat を使用してください。

Google Cloud Platform サービスの使用

GKE クラスタ内で GCP サービスを使用するには、最初にサービスのインスタンスをプロビジョニングし、次にそれをインスタンスにバインドする必要があります。バインディングを作成すると、アプリケーションで使用されるサービス アカウントに、サービス インスタンスにアクセスするための適切な権限が付与されます。また、アプリケーションで利用できるインスタンスにアクセスするために必要な情報が Kubernetes シークレットの形式で作成されます。

インスタンスをプロビジョニングする

Service Catalog は、Open Service Broker API を介して Service Broker と通信することにより、新しい Google Cloud サービス リソースをプロビジョニングします。

svcat

サービスの新しいインスタンスをプロビジョニングするには、次の svcat コマンドを使用します。

svcat provision [NAME] --class [CLASS_NAME] --plan [PLAN_NAME] (--namespace [NAMESPACE] --param [KEY1]=[VALUE1] --param [KEY2]=[VALUE2] ...)

次のコマンドを使用して、インスタンスのステータスを確認できます。

svcat get instance [NAME] (--namespace [NAMESPACE])

kubectl

service_instance_spec.yaml という名前の ServiceInstance YAML ファイルを作成します。このファイルは、サービスの新しいインスタンスをプロビジョニングするために使用されます。

ServiceInstance YAML 仕様の例を以下に示します。

apiVersion: servicecatalog.k8s.io/v1beta1
kind: ServiceInstance
metadata:
  name: [SERVICE_INSTANCE_NAME]  # example: gcp-pubsub-instance
  namespace: [NAMESPACE]         # example: pubsub-app-namespace
spec:
  # References one of the previously returned services
  clusterServiceClassExternalName: [GCP_SERVICE_NAME]  # example: cloud-pubsub
  clusterServicePlanExternalName: [SERVICE_PLAN_NAME]  # example: beta
  parameters:
    [KEY1]: [VALUE1]
    ...

kubectl コマンドで YAML ファイルを使用してサービス インスタンスを作成します。

kubectl create -f service_instance_spec.yaml

次のコマンドを実行して、プロビジョニングが成功したことを確認します。

kubectl get -f service_instance_spec.yaml -o 'custom-columns=INSTANCE-NAME:.metadata.name,SERVICE:.spec.clusterServiceClassExternalName,PLAN:.spec.clusterServicePlanExternalName,STATUS:.status.conditions[0].reason'

コンソール UI

  • サービスクラス ページの利用可能なサービスのリストで、インスタンスを作成するサービスの横にある [インスタンスを構成] ボタンをクリックします。
  • [サービス インスタンスの作成] フォームに記入します。以下を指定する必要があります。

    • サービス インスタンスの名前。
    • サービスを使用するクラスタ。
    • サービスプラン。これはサービスを提供する階層です。
    • サービス インスタンスをバインドできるようにする必要がある名前空間。
    • (オプション)追加のサービス固有のパラメータ。
  • フォームの下部にある [保存] ボタンをクリックして、サービス インスタンスの作成を完了します。[サービス インスタンス] ページが再び表示され、そのページのリスト内に、他のアクティブなサービス インスタンスとともに新しいインスタンスが表示されます。

サービス インスタンスが準備できたら、そのインスタンスにバインドできます。

インスタンスにバインドする

サービス アカウントを取得するには、次のいずれかを行います。

バインディングを作成することにより、Service Broker は指定されたサービス アカウントに権限や役割を付与し、インスタンスに接続およびアクセスするために必要な情報を返します。このようにして、サービス アカウントとして機能するアプリケーションに、サービス インスタンスへのアクセス権が付与されます。

svcat

既存のサービス インスタンスにバインドするには、次の svcat コマンドを使用します。

svcat bind [INSTANCE_NAME] (--namespace [NAMESPACE] --param [KEY1]=[VALUE1] --param [KEY2]=[VALUE2] ...)

これにより、サービス インスタンスと同じ名前のバインディングが作成されます。次のコマンドを使用して、バインディングのステータスを確認できます。

svcat get binding [NAME] (--namespace [NAMESPACE])

kubectl

次の仕様で service_binding_spec.yaml という名前の ServiceBinding YAML リソース ファイルを作成します。

apiVersion: servicecatalog.k8s.io/v1beta1
kind: ServiceBinding
metadata:
  name: [SERVICE_BINDING_NAME]     # example: gcp-pubsub-binding
  namespace: [NAMESPACE]           # example: pubsub-app-namespace
spec:
  instanceRef:
    name: [SERVICE_INSTANCE_NAME]  # example: gcp-pubsub-instance
  parameters:
    [KEY1]: [VALUE1]
    ...

kubectl コマンドで YAML ファイルを使用してサービス バインディングを作成します。

kubectl create -f service_binding_spec.yaml

次のコマンドを実行して、バインディングが成功したことを確認します。

kubectl get -f service_binding_spec.yaml -o 'custom-columns=BINDING-NAME:.metadata.name,SERVICE-INSTANCE:.spec.instanceRef.name,STATUS:.status.conditions[0].reason,OUTPUT-SECRET:.spec.secretName'

コンソール UI

  • [サービス インスタンス] ページに移動し、バインドする先のサービス インスタンスの名前をクリックします。サービス インスタンスの詳細を示すページが表示されます。ページの下部にある [バインディングを作成] ボタンをクリックします。

  • [Create service binding to...] フォームに記入します。以下を指定する必要があります。

    • サービス バインディングの名前。
    • バインディング情報を保存する Kubernetes シークレットの名前。ここでは、バインディングと同じ名前を使用します。
    • (オプション)追加のサービス固有のパラメータ。
  • フォームの下部にある [保存] ボタンをクリックして、サービス バインディングの作成を完了します。サービス インスタンスの詳細ページが再び表示され、そのページのリスト内に、他のアクティブなサービス バインディングとともに新しいバインディングが表示されます。

バインディングの結果、同じ名前のシークレットがサービス インスタンスの名前空間に作成されます。このシークレットには、ブローカーから返された接続情報が含まれています。アプリケーションはこのシークレットを使用してサービス インスタンスに接続できます。

クリーンアップ

サービス インスタンスとバインディングを削除する

上記の手順で使用したリソースについて、ご使用の GCP アカウントに課金されないようにするには、サービス インスタンスとバインディングを削除します。

svcat

  1. サービス インスタンスへのバインドを解除するには、次の svcat コマンドを使用します。

    svcat unbind [INSTANCE_NAME] (--namespace [NAMESPACE])

    これにより、サービス インスタンスのバインディングがすべて削除されます。

  2. サービス インスタンスのプロビジョニングを解除します。

    svcat deprovision [NAME] (--namespace [NAMESPACE])
  3. サービス インスタンスが正常に削除されたかどうかを確認します。

    svcat get instances [NAME] (--namespace [NAMESPACE])

    サービス インスタンスが存在しない場合、unable to get instance エラーが表示されます。

kubectl

  1. kubectl コマンドで service_binding_spec.yaml を使用してサービス バインディングを削除します。

    kubectl delete -f service_binding_spec.yaml
  2. service_instance_spec.yaml を使用してサービス インスタンスをプロビジョニング解除します。

    kubectl delete -f service_instance_spec.yaml
  3. サービス インスタンスが正常に削除されたことを確認します。

    kubectl get -f service_instance_spec.yaml

    サービス インスタンスが存在しない場合、NotFound エラーが表示されます。

コンソール UI

  1. [サービス インスタンス] ページに移動し、バインド解除するサービス インスタンスの名前をクリックします。サービス インスタンスの詳細を示すページが表示されます。ページの下部で、削除するバインディングの横にあるゴミ箱ボタンをクリックします。

  2. 確認ダイアログで [削除] ボタンをクリックします。サービス バインディングのステータスが Unbinding に変わります。

  3. サービス インスタンスの詳細ページの上部にある [削除] ボタンをクリックし、確認ダイアログで [削除] ボタンをクリックします。そうすると、サービス インスタンス リストのページに戻ります。

  4. サービス インスタンス リストのページを更新して、サービス インスタンスが正常に削除されたかどうかを確認します。

サービス インスタンスが存在しなくなったら、サービス インスタンスとバインディングのクリーンアップは完了です。

(オプション)Service Catalog と Service Broker をアンインストールする

Service Catalog の他のサンプルをこの先使用しない場合、Service Catalog と Service Broker をアンインストールすることをおすすめします。

  1. sc インストーラ ツールを使用して Service Broker の登録を解除します。

    sc remove-gcp-broker

    成功すると、次のメッセージが出力されます。

    The Service Broker removed successfully.
  2. Kubernetes クラスタから Service Catalog をアンインストールします。

    sc uninstall

    成功すると、次のメッセージが出力されます。

    deleting service catalog configs...
    uninstalled service catalog successfully
    

(オプション)Kubernetes クラスタを削除する

クラスタが不要になった場合、課金されないようにするために、Kubernetes のチュートリアルに従ってそのクラスタを削除してください。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Kubernetes Engine のドキュメント