As verificações de integridade do EAS usam os mecanismos de probe do Kubernetes para detectar e recuperar automaticamente contêineres não íntegros, garantindo que apenas instâncias íntegras recebam tráfego.
Limitações
As verificações de integridade estão disponíveis apenas quando você implanta um service usando uma imagem personalizada que inclui a lógica de verificação de integridade.
Como funciona
As verificações de integridade do EAS usam os mecanismos de probe do Kubernetes para detectar e gerencie a integridade do service. O EAS oferece suporte aos seguintes tipos de probe e métodos de verificação de integridade.
-
Tipos de probe compatíveis:
Tipo de probe
Descrição
Liveness probe
Determina se um contêiner está em execução. Se o probe detectar um contêiner não íntegro, o kubelet encerra o contêiner e aplica a política de reinicialização. Caso um contêiner não tenha uma liveness probe configurada, o kubelet considera o resultado do probe como sempre bem-sucedido.
Readiness probe
Determina se um contêiner está pronto para atender requisições. Apenas pods no estado Ready recebem tráfego. A associação entre um Service e seus Endpoints é gerenciada com base na prontidão do pod:
Quando o estado Ready de um pod é False, o Kubernetes remove o IP do pod da lista de Endpoints associada ao Service.
Quando o estado Ready do pod muda para True, o Kubernetes adiciona o IP do pod de volta à lista de Endpoints.
Startup probe
Determina quando um contêiner terminou a inicialização. Use este probe para contêineres de inicialização lenta, para evitar que as verificações de liveness e readiness sejam executadas antes que a inicialização seja concluída, o que resultaria no encerramento prematuro do contêiner.
-
Métodos de verificação de integridade compatíveis:
Método de verificação de integridade
Descrição
http_getEnvia uma requisição HTTP GET para verificar a integridade e a disponibilidade do service. A verificação é bem-sucedida quando o código de status da resposta está na faixa 2xx ou 3xx.
tcp_socketTenta abrir uma conexão TCP para verificar a integridade e a disponibilidade do service.
execExecuta um comando especificado dentro do contêiner. O resultado da verificação é determinado pelo código de saída do comando.
Preparar uma imagem personalizada
Encapsule sua lógica de inferência com um framework web. Este exemplo usa o Flask:
import json
from flask import Flask, request, make_response
app = Flask(__name__)
@app.route('/', methods = ['GET','POST'])
def process_handle_func():
"""
Parse the request body based on actual requirements
"""
data = request.get_data().decode('utf-8')
body = json.loads(data)
res = process(body)
"""
Set the response based on actual requirements
"""
response = make_response(res)
response.status_code = 200
return response
def process(data):
"""
Your prediction logic
"""
return 'result'
if __name__ == '__main__':
"""
Note: host must be set to 0.0.0.0, otherwise the health check will fail during service deployment.
port must match the port specified in the JSON configuration file for the deployed service.
"""
app.run(host='0.0.0.0', port=8000)
Crie um Dockerfile para copiar seu código de inferência e instale os pacotes necessários:
# Python example
FROM registry.cn-shanghai.aliyuncs.com/eas/bashbase-amd64:0.0.1
COPY ./process_code /eas
RUN /xxx/pip install <packages>
CMD ["/xxx/python", "/eas/xxx/app.py"]
Para ver as etapas de criação de uma imagem personalizada, consulte Build images on a Container Registry Enterprise Edition instance. Consulte Deploy a custom image para obter as diretrizes de criação de imagens. Como alternativa, salve seu código em um sistema de arquivos NAS ou repositório Git e monte o armazenamento durante a implantação (consulte Storage mounts). Este tópico usa a primeira abordagem para demonstrar a configuração da verificação de integridade em Configure health checks when deploying a service.
Configure verificações de integridade ao implantar um service
Configure verificações de integridade na implantação personalizada
acesse o PAI console, selecione a região de destino na parte superior da página, o workspace de destino à direita e clique em Go to EAS.
Na guia Inference Service, clique em Deploy Service. Na seção Custom Model Deployment, clique em Custom Deployment.
-
Na seção Environment Information, configure os parâmetros principais a seguir. Para outros parâmetros, consulte Custom deployment.
Parâmetro
Descrição
Image Configuration
Selecione Image Address e insira o endereço da sua imagem personalizada no campo de texto, por exemplo,
registry-vpc.cn-shanghai.aliyuncs.com/xxx/yyy:zzz.Command
O comando de entrypoint do contêiner. Apenas um único comando é compatível — scripts complexos não são permitidos. O comando deve corresponder ao que está definido no seu Dockerfile. Por exemplo:
/data/eas/ENV/bin/python /data/eas/app.py.Insira o número da porta na qual o contêiner escuta após a inicialização, por exemplo, 8000.
ImportanteO mecanismo do EAS escuta nas portas fixas 8080 e 9090. Evite usar essas portas para o seu contêiner.
A porta deve corresponder àquela configurada no arquivo xxx.py referenciado no comando de execução.
-
Na seção Features, expanda o painel Stability guarantee, ative a opção Health Check, configure os parâmetros descritos a seguir e clique em OK.
Clique em Deploy.
Configure verificações de integridade na implantação JSON
Crie um arquivo JSON chamado service.json. Confira um exemplo de arquivo abaixo.
{
"metadata": {
"name": "test",
"instance": 1,
"enable_webservice": true
},
"cloud": {
"computing": {
"instance_type": "ml.gu7i.c16m60.1-gu30"
}
},
"containers": [
{
"image":"registry-vpc.cn-shanghai.aliyuncs.com/xxx/yyy:zzz",
"env":[
{
"name":"VAR_NAME",
"value":"var_value"
}
],
"liveness_check":{
"http_get":{
"path":"/",
"port":8000
},
"initial_delay_seconds":3,
"period_seconds":3,
"timeout_seconds":1,
"success_threshold":1,
"failure_threshold":4
},
"command":"/data/eas/ENV/bin/python /data/eas/app1.py",
"port":8000
}
]
}
Os parâmetros chave estão descritos na tabela a seguir. Para outros parâmetros, consulte JSON deployment.
Parâmetro | Descrição | |
image | O endereço da imagem personalizada usada para implantar o service de modelo. O EAS não permite acesso à rede pública. Use um endereço de registro interno da VPC, por exemplo: | |
env | name | O nome de uma variável de ambiente passada para o contêiner em tempo de execução. |
value | O valor da variável de ambiente. | |
command | O comando de entrypoint do contêiner. Apenas um único comando é compatível — scripts complexos não são permitidos. Por exemplo: | |
port | A porta de rede na qual o processo dentro do contêiner escuta, por exemplo, 8000. Importante A porta deve corresponder à porta configurada no arquivo xxx.py referenciado no campo command. | |
liveness_check Nota Especifica a liveness probe como o tipo de probe de verificação de integridade. Você também pode configurá-la como health_check (readiness probe) ou startup_check (startup probe). | http_get | Envia uma requisição HTTP GET para a porta 8000. Subparâmetros:
Dois métodos adicionais de verificação de integridade são compatíveis:
|
initial_delay_seconds | O atraso antes da execução da primeira verificação de integridade após a inicialização do contêiner. O padrão é 0 segundos. | |
period_seconds | A frequência de execução das verificações de integridade. O padrão é 10 segundos. Uma frequência alta aumenta a sobrecarga do pod; uma frequência baixa atrasa a detecção de erros no contêiner. | |
timeout_seconds | O tempo limite para cada verificação de integridade. O padrão é 1 segundo. Uma verificação que excede essa duração é considerada uma falha. | |
success_threshold | O número de verificações bem-sucedidas consecutivas necessárias para marcar um contêiner anteriormente não íntegro como íntegro. O padrão é 3 para readiness probes e 1 para liveness e startup probes. | |
failure_threshold | O número de falhas consecutivas necessárias para marcar um contêiner anteriormente íntegro como não íntegro. O padrão é 1. | |