Pode migrar acionadores de eventos para que um serviço do Google Kubernetes Engine (GKE) (incluindo serviços de fornecimento do Knative) possa receber eventos do Pub/Sub através do Eventarc. Este guia pressupõe que está a migrar acionadores de eventos existentes e que o seu serviço GKE está a ser executado num cluster GKE. É necessário executar uma migração para cada cluster.
Este caminho de migração evita a perda de eventos e minimiza a respetiva duplicação.
A migração envolve o seguinte:
- Para permitir que o Eventarc faça a gestão de recursos no cluster do GKE, ative os destinos do GKE.
- Se necessário, ative o Workload Identity para o cluster do GKE que executa o serviço do GKE de destino.
- Identifique acionadores de eventos existentes.
- Crie um acionador do Eventarc que aponte para o mesmo serviço do GKE que o acionador existente.
- Confirme se o acionador do Eventarc está a enviar eventos conforme esperado.
- Eliminar o acionador de eventos original e fazer a limpeza após a migração.
Antes de começar
Este guia pressupõe que já tem:
Configure o ambiente de linha de comandos
Para configurar as ferramentas de linha de comandos gcloud
e kubectl
:
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Inicie sessão com a sua conta:
gcloud auth login
Defina as predefinições para a CLI gcloud:
gcloud config set project PROJECT_ID gcloud config set run/cluster CLUSTER_NAME gcloud config set run/cluster_location CLUSTER_LOCATION gcloud config set run/platform gke gcloud config set eventarc/location LOCATION
Substitua o seguinte:
PROJECT_ID
: o ID do seu projetoCLUSTER_NAME
: o nome do seu clusterCLUSTER_LOCATION
: qualquer zona onde o GKE é suportado; por exemplo:us-central1-a
.LOCATION
: uma localização para o acionador do Eventarc; por exemplo:us-central1
.
Ative as seguintes APIs para o projeto:
gcloud services enable cloudapis.googleapis.com gcloud services enable cloudbuild.googleapis.com gcloud services enable cloudresourcemanager.googleapis.com gcloud services enable container.googleapis.com gcloud services enable containerregistry.googleapis.com gcloud services enable eventarc.googleapis.com
Instale a ferramenta de linha de comandos
kubectl
:gcloud components install kubectl
Atualize os componentes da CLI gcloud instalados:
gcloud components update
Ative os destinos do GKE para o Eventarc:
gcloud eventarc gke-destinations init
No comando para associar as funções necessárias, introduza
y
.As seguintes funções estão associadas:
roles/compute.viewer
roles/container.developer
roles/iam.serviceAccountAdmin
Liste os acionadores de eventos existentes para o cluster do GKE:
gcloud beta events triggers list --namespace EVENTS_NAMESPACE
Substitua
EVENTS_NAMESPACE
pelo espaço de nomes do seu agente de eventos.O resultado é semelhante ao seguinte:
TRIGGER EVENT TYPE TARGET ✔ trigger-id google.cloud.pubsub.topic.v1.messagePublished cloud-run-service-name
Precisa do ID do tópico para criar o acionador do Eventarc. Recupere o ID do tópico para o acionador de eventos existente:
gcloud beta events triggers describe TRIGGER_ID \ --platform gke --namespace EVENTS_NAMESPACE \ --format="flattened(serialized_source.spec.topic,serialized_trigger.spec.filter.attributes.type,serialized_trigger.spec.subscriber.ref.name,serialized_trigger.spec.subscriber.ref.namespace)"
Substitua
TRIGGER_ID
pelo ID do acionador de evento existente ou por um identificador totalmente qualificado.O resultado é semelhante ao seguinte:
topic: topic-id type: google.cloud.pubsub.topic.v1.messagePublished name: cloud-run-service-name namespace: events
Crie uma Google Cloud conta de serviço (GSA):
TRIGGER_GSA=SERVICE_ACCOUNT_NAME gcloud iam service-accounts create $TRIGGER_GSA
Substitua
SERVICE_ACCOUNT_NAME
por um nome com entre 6 e 30 carateres. Pode conter carateres alfanuméricos minúsculos e travessões.Conceda as funções
pubsub.subscriber
emonitoring.metricWriter
à conta de serviço:PROJECT_ID=$(gcloud config get-value project) gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/pubsub.subscriber" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/monitoring.metricWriter"
Crie um novo acionador do Eventarc com base na configuração do acionador de eventos existente. Todos os argumentos, incluindo o serviço de destino, o cluster e o ID do tópico, devem corresponder aos do acionador de eventos existente.
gcloud eventarc triggers create EVENTARC_TRIGGER_NAME \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location LOCATION \ --destination-gke-service=DESTINATION_SERVICE \ --destination-gke-cluster=CLUSTER_NAME \ --destination-gke-location=CLUSTER_LOCATION \ --destination-gke-namespace=EVENTS_NAMESPACE \ --destination-gke-path=/ \ --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
Substitua
EVENTARC_TRIGGER_NAME
por um nome para o novo acionador do Eventarc e TOPIC_ID pelo ID do tópico do Pub/Sub que obteve anteriormente.Esta ação cria um acionador do Eventarc para o ID do tópico do Pub/Sub.
Confirme que o acionador foi criado com êxito:
gcloud eventarc triggers list
O resultado é semelhante ao seguinte:
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE eventarc-trigger-name google.cloud.pubsub.topic.v1.messagePublished Yes
Publicar uma mensagem no tópico Pub/Sub:
gcloud pubsub topics publish TOPIC_ID \ --message "Hello, World!"
Valide o evento e o respetivo envio bem-sucedido. Por exemplo, consulte os registos do serviço GKE de receção:
kubectl logs \ --selector serving.knative.dev/service=DESTINATION_SERVICE \ -c user-container \ -n EVENTS_NAMESPACE \ --tail=100
A saída dos dois acionadores é semelhante à seguinte, com diferenças apenas em
Context Attributes
eExtensions
. Os dados de mensagens reais, com exceção dos dadossubscription
, devem ser idênticos para que não sejam necessárias alterações ao recetor de eventos após a migração para o Eventarc.Evento do Eventarc:
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: google.cloud.pubsub.topic.v1.messagePublished source: //pubsub.googleapis.com/projects/project-id/topics/topic-name id: 2759155988927083 time: 2021-07-22T17:47:19.964Z datacontenttype: application/json Data, { "subscription": "projects/project-id/subscriptions/eventarc-us-central1-eventarc-trigger-name-sub-567", "message": { "data": "V29ybGQ=", "messageId": "2759155988927083", "publishTime": "2021-07-22T17:47:19.964Z" } }
Evento de publicação do Knative:
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: google.cloud.pubsub.topic.v1.messagePublished source: //pubsub.googleapis.com/projects/project-id/topics/topic-name id: 2759155988927083 time: 2021-07-22T17:47:19.964Z dataschema: https://raw.githubusercontent.com/googleapis/google-cloudevents/master/proto/google/events/cloud/pubsub/v1/data.proto datacontenttype: application/json Extensions, knativearrivaltime: 2021-07-22T17:47:20.723302362Z knsourcetrigger: link0.09767362059083662 traceparent: 00-f3cc6d754d361a0e49e83e5973fa3565-b4a20ef4ecffe96b-00 Data, { "subscription": "cre-src_events_source-for-trigger-name_5ffa9638-8cab-4010-900a-2edb275d9eaf", "message": { "messageId": "2759155988927083", "data": "V29ybGQ=", "publishTime": "2021-07-22T17:47:19.964Z" } }
Elimine o acionador de evento original:
gcloud beta events triggers delete TRIGGER_NAME \ --platform gke \ --namespace EVENTS_NAMESPACE \ --quiet
Ative os destinos do GKE
Para permitir que o Eventarc faça a gestão de recursos no cluster do GKE, ative os destinos do GKE e associe a conta de serviço do Eventarc às funções necessárias.
Ative a federação de identidades de cargas de trabalho para o GKE num cluster
Se a Workload Identity Federation para o GKE já estiver ativada no seu cluster, pode ignorar este passo.
A Workload Identity Federation para o GKE é a forma recomendada de aceder aos Google Cloud serviços a partir de aplicações em execução no GKE devido às suas propriedades de segurança e capacidade de gestão melhoradas. Também é necessário para encaminhar eventos do GKE através do Eventarc.
Para ativar a federação de identidade da força de trabalho para o GKE num cluster existente, consulte o artigo Usar o Workload Identity.
Identifique acionadores de eventos existentes
Antes de migrar quaisquer acionadores de eventos existentes, tem de obter os detalhes do acionador.
Crie um acionador do Eventarc para substituir o acionador existente
Antes de criar o acionador do Eventarc, configure uma conta de serviço gerida pelo utilizador e conceda-lhe funções específicas para que o Eventarc possa gerir eventos para destinos do GKE.
Teste a migração e valide o resultado
Para testar a migração, acione um evento de teste publicando num tópico do Pub/Sub e, em seguida, verifique se existe, pelo menos, um evento entregue para cada um dos acionadores de eventos existentes e acionadores do Eventarc, respetivamente.
Por exemplo, o resultado após acionar um evento de teste seria duplicado e seria semelhante ao seguinte:
Hello, World! ID: 2896291125947199 Hello, World! ID: 2896291125947199
Também pode usar o seguinte cenário para receber orientações em que o recetor de eventos pode apresentar os dados de eventos:
Limpe o conteúdo após a migração
Depois de testar e validar a migração do acionador para o Eventarc, pode eliminar o acionador de eventos original.
Migrou um acionador do Knative Serving existente para o Eventarc.