Como descobrir e usar os serviços do Google Cloud

Visão geral

Use o catálogo de serviços do Kubernetes para listar os Services disponíveis por meio do agente de serviços do Google Cloud, provisionar instâncias de serviço e vincular as instâncias de serviço provisionadas a um aplicativo em execução no cluster do Google Kubernetes Engine.

Para usar esse recurso, é preciso primeiro instalar o catálogo de serviços e registrar o agente.

Para mais informações, consulte a documentação do catálogo de serviços do Kubernetes (em inglês).

Como descobrir serviços e planos do Google Cloud

O agente de serviços oferece vários serviços do Google Cloud, incluindo Pub/Sub, Cloud SQL (MySQL), Cloud Storage, Cloud Spanner e outros. Cada um deles oferece um ou mais planos de serviço. Esses planos representam camadas ou configurações diferentes do serviço.

Listar serviços

svcat

Para listar os serviços do Google Cloud disponíveis atualmente, execute o seguinte comando:

svcat get classes --scope cluster

O resultado é uma lista semelhante à seguinte:

            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
                                  Cloud 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

Para listar os serviços do Google Cloud atualmente disponíveis, execute o comando kubectl get clusterserviceclasses:

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

O resultado é uma lista semelhante à seguinte:

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
    ...                                    ...
    

IU do console

Para visualizar a lista de serviços do Google Cloud atualmente disponíveis, você tem duas opções:

Listar planos de serviços

svcat

Você também pode listar os planos de serviços disponíveis:

svcat get plans --scope cluster

A saída é uma lista com o seguinte formato:

  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 Google Cloud Cloud 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

Você também pode listar os planos de serviços disponíveis:

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

Uma lista com o seguinte formato é exibida:

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
    ...                                    ...                  ...
    

IU do console

Para ver a lista de planos de serviços disponíveis para um determinado serviço, acesse a página de instâncias de serviço no Console do Google Cloud e clique no nome do serviço na lista. Uma página de visão geral do serviço é exibida com uma lista de planos disponíveis e as descrições deles.

Visualizar um plano de serviço

svcat

Para visualizar detalhes sobre o plano de um serviço específico, incluindo detalhes sobre provisionamento e parâmetros de vinculação, use o comando:

svcat describe plan [CLASS_NAME]/[PLAN_NAME] --scope cluster

Por exemplo, svcat describe plan cloud-pubsub/beta --scope cluster:

  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

Para visualizar um plano de um determinado serviço, incluindo detalhes sobre provisionamento e parâmetros de vinculação, use o comando a seguir com PLAN-NAME (GUID) na lista de planos de serviço disponíveis:

kubectl get clusterserviceplans [PLAN_NAME] -o yaml

Por exemplo, kubectl get clusterserviceplans 444fe472-aabc-4c8a-a707-1975e2e908c8 -o yaml gera os detalhes do plano em um formato 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:
      ...
    

IU do console

Para ver a lista de planos de serviços disponíveis para um determinado serviço, acesse a página de instâncias de serviço no Console do Google Cloud e clique no nome do serviço na lista. Uma página de visão geral do serviço é exibida com uma lista de planos disponíveis.

Visualizar o esquema JSON do plano de serviços

Visualize o esquema JSON do plano de serviços ao gravar configurações YAML de provisionamento e vinculação.

svcat

Para visualizar o esquema JSON do plano de serviços, use o comando:

svcat describe plan [CLASS_NAME]/[PLAN_NAME] --scope cluster

Por exemplo, svcat describe plan cloud-pubsub/beta --scope cluster:


      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 refere-se ao esquema JSON de provisionamento. Neste exemplo, especifique topicId, que é um campo obrigatório.

Da mesma forma, é possível ver o esquema JSON de vinculação em Binding Create Parameter Schema.

kubectl

Para visualizar o esquema JSON do plano de serviço, use o comando a seguir com um PLAN-NAME (GUID):

kubectl get clusterserviceplans [PLAN_NAME] -o yaml

Por exemplo, 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 refere-se ao esquema JSON de provisionamento. Neste exemplo, especifique topicId, que é um campo obrigatório.

Da mesma forma, é possível ver o esquema JSON de vinculação em serviceBindingCreateParameterSchema.

IU do console

Atualmente, não mostramos o esquema JSON no Console do Google Cloud. Use kubectl ou svcat.

Como usar um serviço do Google Cloud

Para usar um serviço do Google Cloud em um cluster do GKE, primeiro é preciso provisionar uma instância do serviço e vinculá-la à instância. A vinculação concederá à conta de serviço usada pelo aplicativo as permissões apropriadas para acessar a instância de serviço. Além disso, serão criadas as informações necessárias para acessar a instância disponível para o aplicativo na forma de um secret do Kubernetes.

Provisionar uma instância

O catálogo de serviços provisiona novos recursos de serviço do Google Cloud comunicando-se com o agente de serviços por meio da API Open Service Broker (em inglês).

svcat

Use o seguinte comando svcat para aprovisionar uma nova instância de um serviço:

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

Verifique o status da instância com o seguinte comando:

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

kubectl

Crie um arquivo YAML ServiceInstance chamado service_instance_spec.yaml, que é usado para provisionar uma nova instância de um serviço.

Veja a seguir um exemplo da especificação YAML ServiceInstance:

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]
        ...
    

Use o comando kubectl para criar a instância de serviço utilizando o arquivo YAML:

kubectl create -f service_instance_spec.yaml

Execute o seguinte comando para verificar se o provisionamento foi bem-sucedido:

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'

IU do console

  • Na lista de serviços disponíveis na página de classes de serviço, clique no botão Configurar instância ao lado do serviço para criar uma instância dele.
  • Preencha o formulário Criar instância de serviço. É necessário especificar:

    • o nome da instância de serviço;
    • o cluster em que você quer usar o serviço;
    • o plano de serviços, que é o nível da oferta pelo serviço;
    • o namespace em que a instância de serviço precisa estar disponível para vinculação;
    • outros parâmetros específicos do serviço (opcional).
  • Clique no botão Salvar na parte inferior do formulário para concluir a criação da instância de serviço. Em seguida, você retornará à página de instâncias de serviço, em que a nova instância será exibida em uma lista com outras instâncias de serviço ativas.

Quando a instância de serviço estiver pronta, você poderá fazer a vinculação.

Vincular uma instância

Assim, você tem as seguintes opções:

Quando uma vinculação é criada, o agente de serviços concede permissões/papéis para a conta de serviço especificada e retorna as informações necessárias para você se conectar e acessar a instância. Assim, o aplicativo que atua como conta de serviço terá acesso à instância de serviço.

svcat

Use o seguinte comando svcat para vincular a uma instância de serviço atual:

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

Ele criará uma vinculação com o mesmo nome da instância de serviço. Para verificar o status da vinculação, use o comando a seguir:

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

kubectl

Crie um arquivo de recurso YAML ServiceBinding chamado service_binding_spec.yaml com a especificação a seguir:

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]
        ...
    

Use o comando kubectl para criar a vinculação de serviço usando o arquivo YAML:

kubectl create -f service_binding_spec.yaml

Execute o comando a seguir para verificar se a vinculação foi bem-sucedida:

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'

IU do console

  • Acesse a página de instâncias de serviço e clique no nome da instância que você quer vincular. Uma página com os detalhes dela será exibida. Clique no botão Criar vinculação na parte inferior da página.

  • Preencha o formulário Criar vinculação de serviço com.... É necessário especificar:

    • o nome da vinculação de serviço;
    • o nome da chave secreta do Kubernetes para armazenar as informações da vinculação. Use o mesmo nome da vinculação;
    • outros parâmetros específicos do serviço (opcional).
  • Clique no botão Salvar na parte inferior do formulário para concluir a criação da vinculação de serviço. Em seguida, você retornará à página de detalhes da instância de serviço, em que a vinculação será exibida em uma lista com todas as outras ligações de serviço ativas.

Como resultado da vinculação, um secret com o mesmo nome será criado no namespace da instância de serviço. O secret contém as informações de conexão retornadas do agente e pode ser usado pelo aplicativo para se conectar à instância de serviço.

Limpar

Exclua a instância e a vinculação de serviço

Para evitar que a conta do Google Cloud seja cobrada pelos recursos usados nas etapas acima, exclua a vinculação e a instância de serviço.

svcat

  1. Use o comando svcat a seguir para desvincular a instância do serviço:

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

    Ele excluirá todas as vinculações da instância de serviço.

  2. Desprovisione a instância de serviço:

    svcat deprovision [NAME] (--namespace [NAMESPACE])
  3. Verifique se a instância de serviço foi excluída com sucesso:

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

    Você verá um erro unable to get instance se a instância do serviço não existir mais.

kubectl

  1. Use o comando kubectl para excluir a vinculação de serviço utilizando service_binding_spec.yaml:

    kubectl delete -f service_binding_spec.yaml
  2. Desprovisione a instância de serviço usando service_instance_spec.yaml:

    kubectl delete -f service_instance_spec.yaml
  3. Verifique se a instância de serviço foi excluída com sucesso:

    kubectl get -f service_instance_spec.yaml

    Você verá um erro NotFound se a instância do serviço não existir mais.

IU do console

  1. Acesse a página de instâncias de serviço e clique no nome da instância que você quer desvincular. Uma página com os detalhes dela será exibida. Clique no botão de lixeira ao lado da vinculação que você quer excluir na parte inferior da página.

  2. Clique no botão EXCLUIR na caixa de diálogo de confirmação. O status da vinculação de serviço será alterado para Unbinding.

  3. Clique no botão EXCLUIR na parte superior da página de detalhes da instância de serviço e no botão EXCLUIR na caixa de diálogo de confirmação. Você retornará à página da lista de instâncias de serviço.

  4. Atualize a página da lista de instâncias de serviço e verifique se a instância de serviço foi excluída com êxito.

Depois que a instância de serviço deixar de existir, a limpeza da instância e da vinculação estará concluída.

Desinstalar o catálogo de serviços e o agente de serviços (opcional)

Se você decidir não continuar testando outras amostras do catálogo de serviços, desinstale o catálogo e o agente de serviços.

  1. Cancele o registro do agente de serviços usando a ferramenta de instalação sc:

    sc remove-gcp-broker

    Se o resultado for bem-sucedido, a seguinte mensagem será exibida:

    The Service Broker removed successfully.
  2. Desinstale o catálogo de serviços do cluster do Kubernetes:

    sc uninstall

    Se o resultado for bem sucedido, a seguinte mensagem será exibida:

    deleting service catalog configs...
        uninstalled service catalog successfully
        

Excluir o cluster do Kubernetes (opcional)

Para evitar cobranças, siga o tutorial do Kubernetes para excluir o cluster quando você não precisar mais dele.

A seguir