Implementar imagens de contentores

Esta página descreve como implementar novos serviços e novas revisões no Knative Serving.

Antes de começar

Para usar a CLI gcloud, tem de configurar as ferramentas de linha de comandos.

Estabelecer ligação a clusters do GKE

Antes de poder implementar serviços no Knative Serving, tem de iniciar sessão para se ligar ao cluster do GKE.

Para mais informações sobre a ligação aos seus clusters do GKE, incluindo opções adicionais, consulte:

Autorizações necessárias para a implementação

Precisa de autorizações para criar, atualizar e eliminar no apiGroup serving.knative.dev e kind Service. Além disso, tem de ter UMA das seguintes funções de gestão de identidades e acessos:

Imagens que pode implementar

Não existe um limite de tamanho aplicável à imagem do contentor que pode implementar.

Pode usar contentores de qualquer registo de contentores, como o Docker Hub. Para obter informações sobre a implementação de imagens privadas a partir de registos diferentes do Container Registry ou do Artifact Registry, consulte o artigo Implementar imagens de contentores privados a partir de outros registos de contentores.

Implementar um novo serviço

Pode especificar uma imagem de contentor com uma etiqueta (por exemplo, gcr.io/my-project/my-image:latest) ou com um resumo exato (por exemplo, gcr.io/my-project/my-image@sha256:41f34ab970ee...).

A implementação num serviço pela primeira vez cria a respetiva primeira revisão. Tenha em atenção que as revisões são imutáveis. Se implementar a partir de uma etiqueta de imagem de contentor, esta é resolvida para um resumo e a revisão publica sempre este resumo específico.

Pode implementar um contentor através da Google Cloud consola, da CLI do Google Cloud ou de um ficheiro de configuração YAML.

Clique no separador para ver instruções sobre como usar a ferramenta da sua escolha.

Configuração da localização gcloud predefinida

Se configurou anteriormente uma localização na configuração default da CLI Google Cloud, os seus comandos gcloud usam esses valores por predefinição, incluindo:

  • compute/region
  • compute/zone
  • run/cluster
  • run/cluster_location
  • run/platform
  • run/region

Execute o seguinte comando gcloud config para ver as definições da configuração default:

gcloud config configurations describe default

Consola

Para implementar uma imagem de contentor:

  1. Aceda ao Knative serving na Google Cloud consola:

    Aceda ao Knative serving

  2. Clique em Criar serviço para apresentar a página Criar serviço.

    No formulário:

    1. No menu pendente, selecione um dos clusters do GKE disponíveis para o seu serviço.

    2. Introduza o nome do serviço pretendido. Os nomes dos serviços têm de ser exclusivos por região e projeto ou por cluster. Não é possível alterar o nome de um serviço posteriormente.

    3. Em Conetividade:

      • Selecione Interno se quiser restringir o acesso apenas a outros serviços de fornecimento do Knative ou serviços no seu cluster que usam o Istio.
      • Selecione Externo para permitir o acesso externo ao seu serviço

      Tenha em atenção que pode alterar a opção de conetividade em qualquer altura, conforme descrito no artigo Alterar as definições de conetividade do serviço.

    4. Clique em Seguinte para continuar para a segunda página do formulário de criação do serviço.

      No formulário:

      1. Na caixa de texto URL da imagem do contentor, indique o URL de uma imagem de um registo suportado, por exemplo: us-docker.pkg.dev/cloudrun/container/hello:latest

      2. Opcionalmente, clique em Mostrar definições avançadas e nos separadores subsequentes para definir:

      3. Clique em Criar para implementar a imagem no Knative Serving e aguarde que a implementação termine.

    Acabou de implementar um serviço num cluster com o Knative Serving ativado.

Linha de comandos

Para implementar uma imagem de contentor:

  1. Execute o comando gcloud run deploy:

    gcloud run deploy SERVICE --image IMAGE_URL

    • Substitua SERVICE pelo nome do serviço para o qual quer implementar. Se o serviço especificado não existir, é criado um novo serviço.

    • Substitua IMAGE_URL por uma referência à imagem do contentor, por exemplo, gcr.io/cloudrun/hello.

    • Opções de implementação adicionais:

      • Para implementar num espaço de nomes diferente do predefinido, tem de especificar esse espaço de nomes através do parâmetro --namespace.

      • Para implementar numa localização diferente da configuração predefinida, tem de especificar o name e o location do cluster com os parâmetros --cluster e --cluster-location:

        gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • Pode definir opções de conetividade com a flag --connectivity, conforme descrito em Alterar as definições de conetividade do serviço para especificar o acesso interno ou externo.

      • Para o Knative serving no VMware, tem de incluir o parâmetro --kubeconfig e especificar o ficheiro de configuração:

        gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. Aguarde até que a implementação esteja concluída. Após a conclusão com êxito, é apresentada uma mensagem de êxito juntamente com o URL do serviço implementado.

YAML

Pode armazenar a especificação do serviço num ficheiro YAML e, em seguida, implementá-lo através da CLI do Google Cloud.

  1. Crie um novo ficheiro service.yaml com este conteúdo:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - image: IMAGE

    Substituir

    • SERVICE com o nome do seu serviço Knative serving
    • IMAGE com o URL da imagem do contentor.

    Também pode especificar mais configurações, como variáveis de ambiente ou limites de memória.

  2. Implemente o novo serviço através do seguinte comando:

    gcloud run services replace service.yaml

Implementar uma nova revisão de um serviço existente

Pode implementar uma nova revisão através da Google Cloud consola, da gcloudlinha de comandos ou de um ficheiro de configuração YAML.

Tenha em atenção que a alteração de quaisquer definições de configuração resulta na criação de uma nova revisão, mesmo que não haja alterações à imagem do contentor. Cada revisão criada é imutável.

Clique no separador para ver instruções sobre como usar a ferramenta da sua escolha.

Consola

Para implementar uma nova revisão de um serviço existente:

  1. Aceda ao Knative serving na Google Cloud consola:

    Aceda ao Knative serving

  2. Localize o serviço que quer atualizar na lista de serviços e clique nele para abrir os detalhes desse serviço.

  3. Clique em EDITAR E IMPLEMENTAR NOVA REVISÃO. É apresentado o formulário de implementação de revisões:

  4. Se necessário, indique o URL da nova imagem do contentor que quer implementar.

  5. Opcionalmente, defina:

  6. Para enviar todo o tráfego para a nova revisão, selecione a caixa de verificação com a etiqueta Publicar esta revisão imediatamente. Para implementar gradualmente uma nova revisão, desmarque essa caixa de verificação. Isto resulta numa implementação em que não é enviado tráfego para a nova revisão. Siga as instruções para implementações graduais após a implementação.

  7. Clique em DEPLOY e aguarde pela conclusão da implementação.

Linha de comandos

Para implementar uma imagem de contentor:

  1. Execute o comando gcloud run services update:

    gcloud run services update SERVICE --image IMAGE_URL
    • É atribuído automaticamente um sufixo de revisão a cada revisão. Se quiser especificar o seu próprio sufixo de revisão, adicione o parâmetro --revision-suffix.

    • Substitua SERVICE pelo nome do serviço para o qual quer implementar. Se o serviço especificado não existir, é criado um novo serviço.

    • Substitua IMAGE_URL por uma referência à imagem do contentor, por exemplo, gcr.io/cloudrun/hello.

    • Opções de implementação adicionais:

      • Para implementar num espaço de nomes diferente do predefinido, tem de especificar esse espaço de nomes através do parâmetro --namespace.

      • Para implementar numa localização diferente da configuração predefinida, tem de especificar o name e o location do cluster com os parâmetros --cluster e --cluster-location:

        gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • Pode definir opções de conetividade com a flag --connectivity, conforme descrito em Alterar as definições de conetividade do serviço para especificar o acesso interno ou externo.

      • Para o Knative serving no VMware, tem de incluir o parâmetro --kubeconfig e especificar o ficheiro de configuração:

        gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. Aguarde até que a implementação esteja concluída. Após a conclusão com êxito, é apresentada uma mensagem de êxito juntamente com o URL do serviço implementado.

YAML

Pode transferir a configuração de um serviço existente para um ficheiro YAML com o comando gcloud run services describe usando a flag --format=export. Em seguida, pode modificar esse ficheiro YAML e implementar essas alterações com o comando gcloud run services replace. Tem de garantir que modifica apenas os atributos especificados.

  1. Transfira a configuração do seu serviço para um ficheiro denominado service.yaml no espaço de trabalho local:

    gcloud run services describe SERVICE --format export > service.yaml

    Substitua SERVICE pelo nome do seu serviço de fornecimento do Knative.

    1. No ficheiro local, atualize as definições de revisão em qualquer atributo filho do elemento spec.template.

    2. Implemente a nova revisão:

      gcloud run services replace service.yaml

Implementar imagens de outros Google Cloud projetos

Pode implementar imagens de contentores de outros Google Cloud projetos se definir as autorizações do IAM corretas:

  1. Na Google Cloud consola, abra o projeto para o seu serviço de publicação do Knative.

  2. Aceda à página IAM

  3. Obtenha as informações da sua conta de serviço:

  4. Abra o projeto proprietário do registo de contentores que quer usar.

  5. Aceda à página IAM

  6. Clique em Adicionar para adicionar um novo principal.

  7. Na caixa de texto Novos membros, cole o email da conta de serviço que copiou anteriormente.

  8. Na lista pendente Selecionar uma função, selecione a função a ler no registo:

  9. Implemente a imagem de contentor no projeto que contém o seu serviço Knative serving.

Para uma maior segurança, pode limitar a concessão de acesso:

  • Artifact Registry: conceda a função no repositório que armazena as imagens de contentores.
  • Container Registry: conceda a função no contentor do Cloud Storage que armazena as suas imagens de contentor.

Implementar imagens de contentores privados a partir de outros registos de contentores

Esta secção descreve a configuração das autorizações corretas para implementar imagens de contentores de um registo privado arbitrário para o Knative Serving. Um registo de contentores privado requer credenciais para aceder à imagem do contentor. Tenha em atenção que não precisa de seguir estes passos para implementar imagens de contentores privados do Container Registry (descontinuado) ou do Artifact Registry no mesmo projeto que o seu cluster.

Para poder implementar uma imagem de contentor privada, tem de criar um segredo do Kubernetes do tipo imagePullSecret e associá-lo a uma conta de serviço:

  1. Crie um Secret imagePullSecret denominado container-registry:

    kubectl create secret docker-registry container-registry \
      --docker-server=DOCKER_REGISTRY_SERVER \
      --docker-email=REGISTRY_EMAIL \
      --docker-username=REGISTRY_USER \
      --docker-password=REGISTRY_PASSWORD
    • Substitua DOCKER_REGISTRY_SERVER pelo FQDN do registo privado (por exemplo, https://gcr.io/ para o Container Registry ou https://hub.docker.com para o DockerHub).
    • Substitua REGISTRY_EMAIL pelo seu email.
    • Substitua REGISTRY_USER pelo nome de utilizador do registo de contentores.

      Se estiver a usar o Container Registry ou o Artifact Registry e quiser armazenar e obter credenciais de longa duração em vez de transmitir tokens de acesso de curta duração, consulte Métodos de autenticação: ficheiro de chave JSON.

    • Substitua REGISTRY_PASSWORD pela palavra-passe do registo de contentores.

  2. Abra a sua conta de serviço predefinida:

    kubectl edit serviceaccount default --namespace default

    Todos os espaços de nomes no seu cluster do Kubernetes têm uma conta de serviço predefinida denominada default. Esta conta de serviço predefinida é usada para extrair a imagem do contentor, a menos que seja especificado o contrário quando implementa o seu serviço Knative Serving.

  3. Adicione o segredo imagePullSecret recém-criado à sua conta de serviço predefinida:

    imagePullSecrets:
    - name: container-registry
    

    A sua conta de serviço deve ter agora o seguinte aspeto:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: default
      namespace: default
      ...
    secrets:
    - name: default-token-zd84v
    # The secret we just created:
    imagePullSecrets:
    - name: container-registry
    

Agora, todos os novos pods criados no espaço de nomes default atual têm o segredo imagePullSecret definido.

Implementação com a injeção automática de sidecar ativada

Para implementar o seu serviço com a injeção de sidecar do Istio ativada, consulte o artigo injeção de sidecar automática ativada na documentação do Cloud Service Mesh.

Implementar serviços numa rede interna

Para implementar serviços numa rede interna, tem de configurar uma rede interna privada.

O que se segue?

Depois de implementar um novo serviço, pode fazer o seguinte:

Pode automatizar as compilações e as implementações dos seus serviços Knative serving usando os acionadores do Cloud Build: