Como descobrir e usar os serviços do GCP

Visão geral

Use o catálogo de serviços do Kubernetes para listar os serviços disponíveis por meio do agente de serviços do Google Cloud Platform (GCP), 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 fazer registro do agente de serviços.

Para mais informações, consulte a documentação do catálogo de serviços do Kubernetes.

Como descobrir os serviços e planos do Google Cloud Platform

O agente de serviços oferece vários serviços do GCP, incluindo Pub/Sub, Cloud SQL (MySQL), Cloud Storage, Cloud Spanner e outros. Cada um deles pode oferecer um ou mais planos de serviços. Cada plano de serviços representa uma configuração ou nível de serviço diferente.

Listar serviços

svcat

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

svcat get classes

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

Para listar os serviços do GCP 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

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

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]

Por exemplo, 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

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

kubectl get clusterserviceplans [PLAN_NAME] -o yaml

Por exemplo, kubectl get clusterserviceplans 444fe472-aabc-4c8a-a707-1975e2e908c8 -o yaml exibe 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

Você pode visualizar 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]

Por exemplo, 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 refere-se ao esquema JSON de provisionamento. Nesse exemplo, é preciso especificar o campo obrigatório topicId.

Da mesma forma, é possível visualizar o esquema JSON para vinculação no Binding Create Parameter Schema.

kubectl

Para visualizar o esquema JSON do plano de serviços, 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. Nesse exemplo, é preciso especificar o campo obrigatório topicId.

Da mesma forma, é possível ver o esquema JSON para vinculação no 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 Platform

Para usar um serviço do GCP em um cluster do GKE, primeiro é preciso provisionar uma instância de serviço e vinculá-lo à 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 uma chave secreta 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.

svcat

Use o comando svcat a seguir para provisionar 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 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 usando 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, será possível 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 comando svcat a seguir para vincular uma instância de serviço existente:

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 seguinte comando:

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

kubectl

Crie um arquivo de recurso YAML ServiceBinding chamado service_binding_spec.yaml com as seguintes especificações:

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 com 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, uma chave secreta com o mesmo nome será criada no namespace da instância de serviço. A chave secreta contém as informações de conexão retornadas do agente e pode ser usada pelo aplicativo para se conectar à instância de serviço.

Como fazer a limpeza

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

Para evitar cobranças na conta do GCP pelos recursos usados ​​nas etapas acima, exclua a instância e a vinculação de serviço.

svcat

  1. Use o comando svcat a seguir para desvincular a instância de 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 de serviço não existir mais.

kubectl

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

    kubectl delete -f service_binding_spec.yaml
  2. Desprovisione a instância de serviço com 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 de 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 de serviç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, poderá desinstalar o catálogo de serviços e o agente de serviços.

  1. Use a ferramenta de instalação sc para cancelar o registro do agente de serviços:

    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

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Kubernetes Engine