Como implantar imagens de contêineres

Nesta página, descrevemos como implantar novos serviços e novas revisões na disponibilização do Knative.

Antes de começar

Para usar a Google Cloud CLI, primeiro é preciso configurar as ferramentas de linha de comando.

Como se conectar aos clusters do GKE

Antes de implantar serviços no serviço do Knative, você precisa fazer login para se conectar ao seu cluster do GKE.

Para mais informações sobre como se conectar aos clusters do GKE, incluindo outras opções, consulte:

Permissões necessárias para implantar

Você precisa de permissões para criar, atualizar e excluir no apiGroup serving.knative.dev e no tipo Service, além de ter um dos seguintes papéis de gerenciamento de identidade e acesso:

Imagens que podem ser implantadas

Não há limite de tamanho que se aplique à imagem de contêiner que é possível implantar.

É possível usar contêineres de qualquer registro de contêiner, como o Docker Hub. Para informações sobre como implantar imagens particulares de registros diferentes do Container Registry ou do Artifact Registry, consulte Como implantar imagens de contêiner particulares de outros registros de contêiner.

Como implantar um novo serviço

É possível especificar uma imagem de contêiner com uma tag (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 implantação de um serviço pela primeira vez cria a primeira revisão dele. Observe que as revisões são imutáveis. Se você implantar a partir de uma tag de imagem de contêiner, ela será resolvida para um resumo, e a revisão sempre exibirá esse resumo específico.

É possível implantar um contêiner usando o Console do Google Cloud, a Google Cloud CLI ou um arquivo de configuração YAML.

Clique na guia para ver instruções usando a ferramenta de sua preferência.

Configuração de local padrão do gcloud

Se você tiver configurado anteriormente um local na configuração default do Google Cloud CLI, os comandos gcloud usarão esses valores por padrão, incluindo:

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

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

gcloud config configurations describe default

Console

Para implantar uma imagem de contêiner, realize as etapas a seguir:

  1. Acesse a veiculação do Knative no console do Google Cloud:

    Acessar a veiculação do Knative

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

    No formulário, siga estas etapas:

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

    2. Digite o nome do serviço desejado. Os nomes de serviço precisam ser exclusivos por região e projeto ou por cluster. Não é possível alterar um nome de serviço posteriormente.

    3. Em Conectividade:

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

      Observe que é possível alterar a opção de conectividade a qualquer momento, conforme descrito em Como alterar configurações de conectividade de serviço.

    4. Clique em Próxima para acessar a segunda página do formulário de criação de serviço.

      No formulário, siga estas etapas:

      1. Na caixa de texto URL da imagem do contêiner, forneça o URL de uma imagem de um registro compatível, por exemplo: us-docker.pkg.dev/cloudrun/container/hello:latest

      2. Opcionalmente, clique em Mostrar configurações avançadas e nas guias subsequentes a serem definidas:

      3. Clique em Criar para implantar a imagem na exibição do Knative e aguarde a conclusão da implantação.

    Você acabou de implantar um serviço em um cluster com exibição do Knative.

Linha de comando

Para implantar uma imagem de contêiner, realize as etapas a seguir:

  1. Execute o comando gcloud run deploy:

    gcloud run deploy SERVICE --image IMAGE_URL

    • Substitua SERVICE pelo nome do serviço no qual você quer implantar. Se o serviço especificado não existir, um novo serviço será criado.

    • IMAGE_URL por uma referência à imagem de contêiner, por exemplo, gcr.io/cloudrun/hello;

    • Outras opções de implantação:

      • Para implantar em um namespace diferente do padrão, especifique o namespace usando o parâmetro --namespace.

      • Para implantar em um local diferente da configuração padrão, especifique o name e a location do cluster com os parâmetros --cluster e --cluster-location:

        gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • Defina opções de conectividade com a sinalização --connectivity, conforme descrito em Como alterar as configurações de conectividade do serviço para especificar o acesso interno ou externo.

      • Para a exibição do Knative no VMware, é preciso incluir o parâmetro --kubeconfig e especificar o arquivo de configuração:

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

  2. Aguarde a conclusão da implantação. Após a conclusão bem-sucedida, uma mensagem de sucesso é exibida com o URL do serviço implantado.

YAML

É possível armazenar a especificação do serviço em um arquivo YAML e implantá-la usando a Google Cloud CLI.

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

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

    Substituir

    • SERVICE pelo nome do serviço de veiculação do Knative
    • IMAGE pelo URL da imagem de contêiner.

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

  2. Implante o novo serviço usando o seguinte comando:

    gcloud run services replace service.yaml

Como implantar uma nova revisão de um serviço atual

É possível implantar uma nova revisão usando o Console do Google Cloud, a linha de comando gcloud ou um arquivo de configuração YAML.

A alteração de qualquer configuração resulta na criação de uma nova revisão, mesmo que não haja alterações na imagem do contêiner. Cada revisão criada é imutável.

Clique na guia para ver instruções usando a ferramenta de sua preferência.

Console

Para implantar uma nova revisão de um serviço atual, realize as etapas a seguir:

  1. Acesse a veiculação do Knative no console do Google Cloud:

    Acessar a veiculação do Knative

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

  3. Clique em EDITAR E IMPLANTAR NOVA REVISÃO. Isso exibe o formulário de implantação de revisão:

  4. Se necessário, forneça o URL para a nova imagem do contêiner que você quer implantar.

  5. Opcionalmente, defina:

  6. Para enviar todo o tráfego para a nova revisão, marque a caixa de seleção identificada como Veicular esta revisão imediatamente. Para lançar uma nova revisão gradualmente, desmarque essa caixa de seleção: isso resultará em uma implantação em que nenhum tráfego será enviado para a nova revisão. Siga as instruções de lançamentos graduais após a implantação.

  7. Clique em IMPLANTAR e aguarde a conclusão da implantação.

Linha de comando

Para implantar uma imagem de contêiner, realize as etapas a seguir:

  1. Execute o comando gcloud run services update:

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

    • Substitua SERVICE pelo nome do serviço no qual você quer implantar. Se o serviço especificado não existir, um novo serviço será criado.

    • IMAGE_URL por uma referência à imagem de contêiner, por exemplo, gcr.io/cloudrun/hello;

    • Outras opções de implantação:

      • Para implantar em um namespace diferente do padrão, especifique o namespace usando o parâmetro --namespace.

      • Para implantar em um local diferente da configuração padrão, especifique o name e a location do cluster com os parâmetros --cluster e --cluster-location:

        gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • Defina opções de conectividade com a sinalização --connectivity, conforme descrito em Como alterar as configurações de conectividade do serviço para especificar o acesso interno ou externo.

      • Para a exibição do Knative no VMware, é preciso incluir o parâmetro --kubeconfig e especificar o arquivo de configuração:

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

  2. Aguarde a conclusão da implantação. Após a conclusão bem-sucedida, uma mensagem de sucesso é exibida com o URL do serviço implantado.

YAML

Faça o download da configuração de um serviço existente para um arquivo YAML com o comando gcloud run services describe usando a sinalização --format=export. Em seguida, modifique o arquivo YAML e implante essas alterações com o comando gcloud run services replace. Modifique apenas os atributos especificados.

  1. Faça o download da configuração do serviço em um arquivo chamado service.yaml no espaço de trabalho local:

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

    Substitua SERVICE pelo nome do serviço de veiculação do Knative.

    1. No seu arquivo local, atualize as configurações de revisão em qualquer atributo filho de spec.template.

    2. Implante a nova revisão:

      gcloud run services replace service.yaml

Como implantar imagens de outros projetos do Google Cloud

É possível implantar imagens de contêiner de outros projetos do Google Cloud se você definir as permissões corretas do IAM:

  1. No console do console do Google Cloud, abra o projeto do serviço de exibição Knative.

  2. Acessar a página do IAM

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

  4. Abra o projeto proprietário do registro do contêiner que você quer usar.

  5. Acessar a página do IAM

  6. Clique em Adicionar para adicionar um novo principal.

  7. Na caixa de texto Novos principais, cole o e-mail da conta de serviço que você copiou anteriormente.

  8. Na lista suspensa Selecionar um papel, escolha o papel a ser lido no registro:

  9. Implante a imagem do contêiner no projeto que contém o serviço de exibição Knative.

Para reforçar a segurança, você pode limitar o acesso a permissões:

  • Artifact Registry: conceda o papel no repositório que armazena as imagens de contêiner.
  • Container Registry: conceda o papel no bucket do Cloud Storage que armazena suas imagens de contêiner.

Como implantar imagens de contêiner particulares de outros registros de contêiner

Nesta seção, descrevemos como configurar as permissões corretas para implantar imagens de contêiner de um registro particular arbitrário na exibição do Knative. Um registro de contêiner particular requer credenciais para acessar a imagem do contêiner. Não é necessário seguir estas etapas para implantar imagens de contêiner particulares do Container Registry (descontinuado) ou do Artifact Registry no mesmo projeto que o cluster.

Para implantar uma imagem de contêiner particular, você precisa criar um secret do Kubernetes do tipo imagePullSecret e associá-lo a uma conta de serviço:

  1. Crie um secret imagePullSecret chamado 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 de registro particular (por exemplo: https://gcr.io/ para o Container Registry ou https://hub.docker.com (em inglês) para o DockerHub).
    • Substitua REGISTRY_EMAIL pelo e-mail que você está usando.
    • Substitua REGISTRY_USER pelo nome de usuário do Container Registry que você está usando.

      Se você estiver usando o Container Registry ou o Artifact Registry e quiser armazenar e receber credenciais de longa duração em vez de transmitir tokens de acesso de curta duração, consulte Métodos de autenticação: arquivo de chave JSON.

    • Substitua REGISTRY_PASSWORD pela senha do Container Registry.

  2. Abra sua conta de serviço padrão:

    kubectl edit serviceaccount default --namespace default

    Cada namespace no cluster do Kubernetes tem uma conta de serviço padrão chamada default. Essa conta de serviço padrão é usada para extrair a imagem de contêiner, a menos que seja especificado de outra forma quando você deploy o serviço de exibição Knative.

  3. Adicione o secret imagePullSecret recém-criado à conta de serviço padrão:

    imagePullSecrets:
    - name: container-registry
    

    Sua conta de serviço agora terá esta aparência:

    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 namespace default atual terão o secret imagePullSecret definido.

Como implantar com a injeção automática de arquivo secundário ativada

Para implantar o serviço com a injeção de arquivo secundário do Istio ativada, consulte a injeção automática de arquivo secundário ativada na documentação do Mesh Service Mesh.

Como implantar serviços em uma rede interna

Para implantar serviços em uma rede interna, é necessário configurar uma rede privada e interna.

A seguir

Depois de implantar um novo serviço, é possível realizar estas ações:

Automatize as criações e implantações dos serviços de exibição do Knative usando os gatilhos do Cloud Build: