Esta página apresenta os principais requisitos e comportamentos dos contentores na publicação do Knative.
Idiomas e imagens compatíveis
A imagem do contentor pode executar código escrito na linguagem de programação da sua escolha e usar qualquer imagem base, desde que respeite as restrições indicadas nesta página.
Os ficheiros executáveis na imagem do contentor têm de ser compilados para Linux de 64 bits. O Knative Serving suporta especificamente o formato ABI Linux x86_64.
Ouvir pedidos na porta correta
O contentor tem de ouvir pedidos em 0.0.0.0
na porta para a qual os pedidos são enviados. Por predefinição, os pedidos são enviados para 8080
, mas pode
configurar o Knative Serving
para enviar pedidos para a porta da sua escolha.
Nas instâncias de contentores de publicação do Knative, o valor da variável de ambiente PORT
reflete sempre a porta para a qual os pedidos são enviados.
A predefinição é 8080
.
Encriptação da camada de transporte (TLS)
O contentor não deve implementar diretamente nenhuma segurança da camada de transporte. O TLS é terminado pelo Knative Serving para HTTPS e gRPC e, em seguida, os pedidos são enviados por proxy como HTTP ou gRPC para o contentor sem TLS.
Responses
A instância do contentor tem de enviar uma resposta no prazo especificado na definição de tempo limite do pedido após receber um pedido, incluindo o tempo de arranque da instância do contentor. Caso contrário, o pedido é terminado e é devolvido um erro 504.
Variáveis de ambiente
As seguintes variáveis de ambiente são adicionadas automaticamente aos contentores em execução:
Nome | Descrição | Exemplo |
---|---|---|
PORT |
A porta que o seu servidor HTTP deve escutar. | 8080 |
K_SERVICE |
O nome do serviço de publicação do Knative em execução. | hello-world |
K_REVISION |
O nome da revisão de publicação do Knative que está a ser executada. | hello-world.1 |
K_CONFIGURATION |
O nome da configuração do Knative serving que criou a revisão. | hello-world |
Acesso ao sistema de ficheiros
O sistema de ficheiros do seu contentor é gravável e está sujeito ao seguinte comportamento:
- Este é um sistema de ficheiros na memória, pelo que a escrita no mesmo usa a memória da instância do contentor.
- Os dados escritos no sistema de ficheiros não persistem quando a instância do contentor é parada.
Ciclo de vida da instância do contentor
Em resposta aos pedidos recebidos, um serviço é dimensionado automaticamente para um determinado número de instâncias de contentores, cada uma das quais executa a imagem de contentor implementada.
Quando uma revisão não recebe tráfego, é reduzida até ao número mínimo de instâncias de contentores configurado (zero por predefinição).
Arranque
As instâncias do contentor têm de ouvir pedidos no prazo de 4 minutos após o início. Durante este tempo de arranque, as instâncias de contentores recebem CPU.
A computação tem âmbito de um pedido
Após o arranque, só deve esperar poder fazer cálculos no âmbito de um pedido: uma instância de contentor não tem nenhuma CPU atribuída se não estiver a processar um pedido.
Encerrar
Uma instância de contentor pode ser encerrada em qualquer altura.
Quando uma instância de contentor tem de ser encerrada, os novos pedidos recebidos são
encaminhados para outras instâncias e os pedidos que estão a ser processados têm tempo
para serem concluídos.
A instância do contentor recebe então um sinal SIGTERM
a indicar o início de um período de 10 segundos antes de ser encerrada (com um sinal SIGKILL
).
Durante este período, a instância do contentor recebe CPU e é faturada.
Se a instância do contentor não receber o sinal SIGTERM
, é encerrada imediatamente.
A menos que uma instância de contentor tenha de ser mantida inativa devido à definição de configuração do número mínimo de instâncias de contentores, não é mantida inativa durante mais de 15 minutos.
Recursos de instâncias de contentores
Os pedidos de recursos para as suas instâncias de contentores são agendados nos nós do seu cluster do GKE. Cada nó partilha a quantidade total de recursos de computação que está disponível para o seu cluster do GKE.
Por conseguinte, a quantidade de recursos de computação disponíveis para um serviço de publicação do Knative é limitada apenas pela quantidade de recursos disponíveis nesse nó. Saiba mais acerca dos recursos de computação para pedidos.
Por exemplo, se atribuir 512 MiB de memória a um contentor e esse contentor estiver a ser executado no único pod num nó com 8 GiB de memória, esse contentor pode tentar usar mais RAM.
CPU
Por predefinição, o queue proxy sidecar reserva 25 milliCPU e não existe limite para a quantidade de vCPU que os seus serviços Knative serving podem usar. O consumo de recursos do proxy de fila depende do número de pedidos que estão a ser colocados em fila e do tamanho dos pedidos.
Uma vCPU é implementada como uma abstração do hardware subjacente para fornecer o tempo de CPU aproximadamente equivalente de um único hiperthread de hardware em plataformas de CPU variáveis. A instância do contentor pode ser executada em vários núcleos em simultâneo. A vCPU só é atribuída durante o arranque da instância do contentor e o processamento de pedidos. Caso contrário, é limitada.
Para atribuir um valor de vCPU diferente, consulte a documentação sobre a atribuição de CPU.
Memória
Por predefinição, o proxy auxiliar de filas não reserva memória e não existe um limite para a quantidade de memória que os seus serviços Knative serving podem usar. Se quiser, pode configurar limites de memória para os seus serviços de publicação do Knative. Para mais informações sobre como o GKE processa a memória, consulte o artigo Recursos de CPU e memória alocáveis.
As utilizações típicas da memória incluem:
- Código carregado na memória para executar o serviço
- Escrever no sistema de ficheiros
- Processos adicionais em execução no contentor, como um servidor nginx
- Sistemas de colocação em cache na memória, como o PHP OpCache
- Utilização de memória por pedido
Simultaneidade
Por predefinição, cada instância do contentor de publicação do Knative está definida para ter várias concorrências, em que cada instância do contentor pode receber mais do que um pedido em simultâneo. Pode alterar esta opção definindo a simultaneidade.
Sandbox da instância do contentor
O Knative serving não usa uma sandbox de contentor.
Servidor de metadados da instância do contentor
As instâncias de contentores de publicação do Knative expõem um servidor de metadados que pode usar para obter detalhes sobre a instância de contentor, como o ID do projeto, a região, o ID da instância ou as contas de serviço.
Pode aceder a estes dados a partir do servidor de metadados através de pedidos HTTP simples para o ponto final http://metadata.google.internal/
com o cabeçalho Metadata-Flavor: Google
. Não são necessárias bibliotecas cliente. Para mais informações, consulte o artigo
Obter metadados.
A tabela seguinte apresenta algumas das informações do servidor de metadados disponíveis:
Caminho | Descrição |
---|---|
/computeMetadata/v1/project/project-id |
ID do projeto deste serviço de publicação do Knative |
/computeMetadata/v1/instance/region |
Região deste serviço de publicação do Knative |
/computeMetadata/v1/instance/id |
Identificador exclusivo da instância do contentor (também disponível nos registos). |
/computeMetadata/v1/instance/service-accounts/default/token |
Gera uma chave de acesso para a conta de serviço de tempo de execução deste serviço de publicação do Knative |