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:
Aceda ao Knative serving na Google Cloud consola:
Clique em Criar serviço para apresentar a página Criar serviço.
No formulário:
No menu pendente, selecione um dos clusters do GKE disponíveis para o seu serviço.
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.
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.
Clique em Seguinte para continuar para a segunda página do formulário de criação do serviço.
No formulário:
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
Opcionalmente, clique em Mostrar definições avançadas e nos separadores subsequentes para definir:
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:
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 olocation
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
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.
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.
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 gcloud
linha 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:
Aceda ao Knative serving na Google Cloud consola:
Localize o serviço que quer atualizar na lista de serviços e clique nele para abrir os detalhes desse serviço.
Clique em EDITAR E IMPLEMENTAR NOVA REVISÃO. É apresentado o formulário de implementação de revisões:
Se necessário, indique o URL da nova imagem do contentor que quer implementar.
Opcionalmente, defina:
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.
Clique em DEPLOY e aguarde pela conclusão da implementação.
Linha de comandos
Para implementar uma imagem de contentor:
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 olocation
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
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.
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.
No ficheiro local, atualize as definições de revisão em qualquer atributo filho do elemento
spec.template
.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:
Na Google Cloud consola, abra o projeto para o seu serviço de publicação do Knative.
Obtenha as informações da sua conta de serviço:
Para clusters no Google Cloud, copie o email da conta de serviço predefinida do Compute Engine. Tem o sufixo @developer.gserviceaccount.com
Para outros clusters, crie uma Google Cloud conta de serviço e transfira as credenciais. Adicione estas credenciais como o
imagePullSecrets
predefinido da conta de serviço do Kubernetes.
Abra o projeto proprietário do registo de contentores que quer usar.
Clique em Adicionar para adicionar um novo principal.
Na caixa de texto Novos membros, cole o email da conta de serviço que copiou anteriormente.
Na lista pendente Selecionar uma função, selecione a função a ler no registo:
- Artifact Registry, incluindo repositórios gcr.io no Artifact Registry: Artifact Registry -> Leitor do Artifact Registry
- Container Registry: Armazenamento -> Storage Object Viewer
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:
Crie um Secret
imagePullSecret
denominadocontainer-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.
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.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:
- Implementações graduais, reversão de revisões e migração de tráfego
- Veja registos de serviço
- Monitorize os desempenhos dos serviços
- Configure os seus serviços. Por exemplo, pode definir limites de memória, definir variáveis de ambiente ou alterar a simultaneidade.
- Gerir:
Pode automatizar as compilações e as implementações dos seus serviços Knative serving usando os acionadores do Cloud Build: