Todos os produtos
Search
Central de documentação

Intelligent Computing LINGJUN:Guia de implantação e lançamento

Última atualização: Nov 04, 2026

O Lingjun Runtime Kit inclui o pacote de Runtime da camada de resource e o conjunto de componentes open-source da camada de container. Este tópico descreve os entregáveis, os pré-requisitos de implantação, como obter o Runtime Kit, as etapas de implantação, o esquema de numeração de versão, a política de compatibilidade e os métodos de upgrade.

Nota

Public preview: Este product está em public preview. Se você tiver dúvidas ou sugestões, entre em contato com o suporte técnico do Lingjun.

Nota

Atualmente, não existe um mecanismo sistemático para consultar, atualizar ou reverter versões do Runtime Kit. Caso precise realizar alguma dessas operações, entre em contato com a equipe de PDSA para discutir e confirmar um plano de upgrade.

1. Entregáveis e pré-requisitos

1.1 Entregáveis

O Runtime Kit é composto por duas camadas que se conectam por meio de uma interface gRPC unificada:

Camada

Entregável

Formato

Responsabilidade de manutenção

Camada de resource

Pacote de Runtime

Código fechado, pré-instalado na imagem do SO bare metal do Lingjun

Lançado e aprimorado continuamente pela equipe Alibaba Cloud Lingjun

Camada de container

Conjunto de componentes open-source (Device Plugin, Scheduler Framework, Exporter e Controller)

Implementações de referência open-source e imagens pré-compiladas

Implantado por você ou personalizado conforme necessário

Essa interface representa o único limite entre as duas camadas e constitui a base para a compatibilidade retroativa. O Alibaba Cloud Lingjun fornece as capacidades da camada de resource, enquanto você adapta a camada de container com base nos componentes open-source. Todas as conclusões de compatibilidade de versão apresentadas neste tópico fundamentam-se nessa interface.

Responsabilidade por problemas e canais de suporte: A interface gRPC define o limite de responsabilidade. Problemas no próprio Runtime da camada de resource são considerados problemas do product Alibaba Cloud Lingjun; nesse caso, abra um ticket para o suporte técnico do Alibaba Cloud Lingjun. Se utilizar diretamente as versões oficiais pré-compiladas dos componentes open-source, envie feedback por meio de canais como issues no repositório open-source. Implementações personalizadas ou adaptadas por você são de sua responsabilidade, e o Alibaba Cloud Lingjun oferece assistência na solução de problemas quando necessário.

1.2 Pré-requisitos

  1. Nó bare metal do Lingjun: O pacote de Runtime vem pré-instalado na imagem do SO bare metal do Lingjun e está disponível apenas nesse ambiente. Antes de implantar os componentes open-source, o service de Runtime no nó já deve estar em execução. Confirme isso verificando os arquivos de socket no diretório /run/amp/eKitC/xdm/sockets/.

  2. Cluster Kubernetes: É necessário ter o Kubernetes 1.18 ou superior para usar o Device Plugin e o Scheduler Framework.

  3. Porta somente leitura do kubelet: Os componentes open-source obtêm informações sobre os Pods no nó por meio da porta somente leitura do kubelet (10255). Para mais informações, consulte {{XREF_0}}.

  4. Configuração do runtime de container: A injeção de dispositivos GPU e PPU depende do handler de runtime lj-runtime e da RuntimeClass correspondente. Para mais informações, consulte {{XREF_1}}.

  5. Dependência opcional: Se você utilizar agendamento de topologia gang entre nós e seu cluster não oferecer capacidades de agendamento gang, instale o JobSet. Recomenda-se o JobSet v0.8.0 ou superior. Para mais informações, consulte {{XREF_2}}.

1.3 Limites

  1. Para utilizar as capacidades do Runtime Kit no Kubernetes, integre-as da maneira padrão fornecida pelo conjunto de componentes open-source, ou seja, chamando as capacidades subjacentes por meio da interface gRPC unificada.

  2. A multiplexação por divisão de tempo (TDM) e o particionamento espacial Multi-Instance GPU (MIG) não podem ser ativados simultaneamente na mesma GPU.

  3. O MIG é uma tecnologia NVIDIA de nível de hardware e tem suporte em todos os modelos de placa que oferecem essa capacidade.

2. Obtenção do Runtime Kit

2.1 Repositório open-source

O código dos componentes open-source está disponível no repositório GitHub aliyun/LJ-RuntimeKit. A branch main sempre contém o código utilizável mais recente. Versões estáveis são publicadas como tags. Para obter uma versão estável, utilize uma tag; para obter o código mais recente, use a branch main.

2.2 Imagens pré-compiladas

Caso não precise personalizar os componentes, utilize diretamente as imagens pré-compiladas, sem necessidade de compilação própria. O Alibaba Cloud Lingjun lança e mantém esses componentes, oferecendo também suporte técnico. Se encontrar problemas, envie feedback por meio de canais como issues no repositório open-source.

O registro de imagens é lj-runtimekit-registry.cn-hangzhou.cr.aliyuncs.com/lj-runtimekit/. A tabela a seguir descreve o mapeamento de versões das imagens pré-compiladas para cada componente:

Nome do componente

Nome da imagem

Tag atual da imagem

Versões suportadas do Kubernetes

Device Plugin

lj-runtimekit-device-plugin

v1.13.0

v1.28 / v1.30 / v1.32 / v1.34 / v1.35

Nota

Como exemplo, para o Device Plugin com Kubernetes v1.35, a imagem é lj-runtimekit-registry.cn-hangzhou.cr.aliyuncs.com/lj-runtimekit/lj-runtimekit-device-plugin:1.13.0-k8s1.35

Scheduler Framework

lj-runtimekit-scheduler

Exporter

lj-runtimekit-exporter

Controller / Controller Job Agent

lj-runtimekit-controller
lj-runtimekit-controller-job-agent

Observação: Na tabela, o Controller Job Agent é uma imagem de execução no lado do nó, implantada juntamente com o Controller (consulte {{XREF_3}}). Não é necessário implantá-lo separadamente.

3. Implantação

3.1 Componentes

Componente

Responsabilidade

Forma de implantação

Controller

Monitora alterações em labels de nós e ativa ou desativa automaticamente recursos do Runtime Kit nos nós

Deployment

Device Plugin

Descoberta de dispositivos, relato de resources e encaminhamento de alocações

DaemonSet (nós rotulados)

Scheduler Framework

Agendamento consciente em dupla dimensão (poder computacional e memória da GPU) e agendamento ciente de topologia

Deployment

Exporter

Coleta de métricas de monitoramento de runtime da GPU e verificações de integridade

DaemonSet (nós rotulados)

O Controller Job Agent é a imagem de execução no lado do nó utilizada pelo Controller para ativar ou desativar recursos em um determinado nó. Ele é referenciado pelo parâmetro --job-image e implantado junto com o Controller. Não há necessidade de implantá-lo ou gerenciá-lo separadamente. Para mais detalhes sobre seu funcionamento, consulte {{XREF_4}}.

3.2 Tarefas pré-implantação

Execute as tarefas abaixo na ordem indicada.

Etapa 1: Verificar a disponibilidade do cluster Kubernetes (em qualquer máquina com permissões kubectl):

# 1. Change the image version in the YAML file of the component (Device Plugin is used as an example)
# Edit deploy/deviceplugin/03-daemonset.yaml and change the image field to the target version
# image: lj-runtimekit-registry.cn-hangzhou.cr.aliyuncs.com/lj-runtimekit/lj-runtimekit-device-plugin:<new-version>

# 2. Deploy a single component
./deploy/deploy-all.sh deploy --components=device-plugin

# Or deploy all components
./deploy/deploy-all.sh deploy

# 3. Verify the rolling update result
kubectl rollout status daemonset/lj-runtimekit-device-plugin -n kube-system
kubectl get pods -n kube-system -l app=lj-runtimekit-device-plugin -o wide

Resultado esperado: O cluster opera normalmente.

Etapa 2: Validar o ambiente do nó com GPU (em cada nó com GPU):

# 1. Change the image version in the YAML file of the component (Device Plugin is used as an example)
# Edit deploy/deviceplugin/03-daemonset.yaml and change the image field to the target version
# image: lj-runtimekit-registry.cn-hangzhou.cr.aliyuncs.com/lj-runtimekit/lj-runtimekit-device-plugin:<new-version>

# 2. Deploy a single component
./deploy/deploy-all.sh deploy --components=device-plugin

# Or deploy all components
./deploy/deploy-all.sh deploy

# 3. Verify the rolling update result
kubectl rollout status daemonset/lj-runtimekit-device-plugin -n kube-system
kubectl get pods -n kube-system -l app=lj-runtimekit-device-plugin -o wide

Resultado esperado: O driver está instalado corretamente e é possível consultar as informações do dispositivo.

O conjunto de containers do Lingjun inclui um runtime de container compatível com dispositivos heterogêneos GPU, PPU e AMD. Esse runtime é integrado nativamente e não exige instalação separada. Basta confirmar que o driver funciona e que o arquivo de socket existe. Para configurar o registro entre o runtime e o containerd, consulte a Etapa 5.

Etapa 3: Ativar a porta somente leitura do kubelet (10255) (como root em cada nó com GPU):

# 1. Change the image version in the YAML file of the component (Device Plugin is used as an example)
# Edit deploy/deviceplugin/03-daemonset.yaml and change the image field to the target version
# image: lj-runtimekit-registry.cn-hangzhou.cr.aliyuncs.com/lj-runtimekit/lj-runtimekit-device-plugin:<new-version>

# 2. Deploy a single component
./deploy/deploy-all.sh deploy --components=device-plugin

# Or deploy all components
./deploy/deploy-all.sh deploy

# 3. Verify the rolling update result
kubectl rollout status daemonset/lj-runtimekit-device-plugin -n kube-system
kubectl get pods -n kube-system -l app=lj-runtimekit-device-plugin -o wide

Se a porta não estiver ativada, edite o arquivo de configuração do kubelet (por exemplo, /var/lib/kubelet/config.yaml. Em seguida, execute systemctl restart kubelet e verifique novamente a porta. A porta 10255 é somente leitura e aceita apenas consultas. Caso a política de segurança do seu cluster não permita essa porta, contate o administrador do cluster para avaliar a possibilidade de ativação.

Etapa 4: Rotular os nós que utilizarão as capacidades do Runtime Kit:

# 1. Change the image version in the YAML file of the component (Device Plugin is used as an example)
# Edit deploy/deviceplugin/03-daemonset.yaml and change the image field to the target version
# image: lj-runtimekit-registry.cn-hangzhou.cr.aliyuncs.com/lj-runtimekit/lj-runtimekit-device-plugin:<new-version>

# 2. Deploy a single component
./deploy/deploy-all.sh deploy --components=device-plugin

# Or deploy all components
./deploy/deploy-all.sh deploy

# 3. Verify the rolling update result
kubectl rollout status daemonset/lj-runtimekit-device-plugin -n kube-system
kubectl get pods -n kube-system -l app=lj-runtimekit-device-plugin -o wide

Somente os nós rotulados com lj_runtimekit_enable=true executam o Device Plugin e o Exporter. Os componentes do Runtime Kit não são implantados em nós sem esse rótulo, e as capacidades relacionadas permanecem desativadas. Essa label também funciona como chave de ativação do recurso. Para mais informações, consulte {{XREF_5}}.

Etapa 5: Configurar o runtime de container (obrigatório para injeção de dispositivos GPU e PPU):

O Runtime Kit configura automaticamente o handler de runtime lj-runtime no arquivo config.toml do containerd. Não é necessário modificar manualmente o config.toml. A configuração abaixo é adicionada após a seção existente runtimes.nvidia:

# 1. Change the image version in the YAML file of the component (Device Plugin is used as an example)
# Edit deploy/deviceplugin/03-daemonset.yaml and change the image field to the target version
# image: lj-runtimekit-registry.cn-hangzhou.cr.aliyuncs.com/lj-runtimekit/lj-runtimekit-device-plugin:<new-version>

# 2. Deploy a single component
./deploy/deploy-all.sh deploy --components=device-plugin

# Or deploy all components
./deploy/deploy-all.sh deploy

# 3. Verify the rolling update result
kubectl rollout status daemonset/lj-runtimekit-device-plugin -n kube-system
kubectl get pods -n kube-system -l app=lj-runtimekit-device-plugin -o wide

Crie o resource RuntimeClass correspondente no cluster:

# 1. Change the image version in the YAML file of the component (Device Plugin is used as an example)
# Edit deploy/deviceplugin/03-daemonset.yaml and change the image field to the target version
# image: lj-runtimekit-registry.cn-hangzhou.cr.aliyuncs.com/lj-runtimekit/lj-runtimekit-device-plugin:<new-version>

# 2. Deploy a single component
./deploy/deploy-all.sh deploy --components=device-plugin

# Or deploy all components
./deploy/deploy-all.sh deploy

# 3. Verify the rolling update result
kubectl rollout status daemonset/lj-runtimekit-device-plugin -n kube-system
kubectl get pods -n kube-system -l app=lj-runtimekit-device-plugin -o wide
# 1. Change the image version in the YAML file of the component (Device Plugin is used as an example)
# Edit deploy/deviceplugin/03-daemonset.yaml and change the image field to the target version
# image: lj-runtimekit-registry.cn-hangzhou.cr.aliyuncs.com/lj-runtimekit/lj-runtimekit-device-plugin:<new-version>

# 2. Deploy a single component
./deploy/deploy-all.sh deploy --components=device-plugin

# Or deploy all components
./deploy/deploy-all.sh deploy

# 3. Verify the rolling update result
kubectl rollout status daemonset/lj-runtimekit-device-plugin -n kube-system
kubectl get pods -n kube-system -l app=lj-runtimekit-device-plugin -o wide

Verificação:

# 1. Change the image version in the YAML file of the component (Device Plugin is used as an example)
# Edit deploy/deviceplugin/03-daemonset.yaml and change the image field to the target version
# image: lj-runtimekit-registry.cn-hangzhou.cr.aliyuncs.com/lj-runtimekit/lj-runtimekit-device-plugin:<new-version>

# 2. Deploy a single component
./deploy/deploy-all.sh deploy --components=device-plugin

# Or deploy all components
./deploy/deploy-all.sh deploy

# 3. Verify the rolling update result
kubectl rollout status daemonset/lj-runtimekit-device-plugin -n kube-system
kubectl get pods -n kube-system -l app=lj-runtimekit-device-plugin -o wide

Os Pods de carga de trabalho subsequentes devem especificar runtimeClassName: lj-runtime. Caso contrário, os dispositivos GPU e PPU não serão injetados corretamente no container.

Etapa 6 (opcional): Implantar o JobSet. Se o seu cluster não oferecer capacidades de agendamento gang e você precisar de agendamento ciente de topologia para muitos Pods que iniciam e param simultaneamente, implante o JobSet. Para mais informações, consulte Instalação do JobSet. Recomenda-se o JobSet v0.8.0 ou superior.

3.3 Implantação com um clique (recomendado)

Se não houver requisitos de personalização, recomendamos o uso direto das imagens pré-compiladas e a implantação com o script abaixo.

Substitua &lt;version&gt; pela tag de imagem desejada na tabela de mapeamento de versões:

# 1. Change the image version in the YAML file of the component (Device Plugin is used as an example)
# Edit deploy/deviceplugin/03-daemonset.yaml and change the image field to the target version
# image: lj-runtimekit-registry.cn-hangzhou.cr.aliyuncs.com/lj-runtimekit/lj-runtimekit-device-plugin:<new-version>

# 2. Deploy a single component
./deploy/deploy-all.sh deploy --components=device-plugin

# Or deploy all components
./deploy/deploy-all.sh deploy

# 3. Verify the rolling update result
kubectl rollout status daemonset/lj-runtimekit-device-plugin -n kube-system
kubectl get pods -n kube-system -l app=lj-runtimekit-device-plugin -o wide

Para personalizações simples, ajuste o script acima e os scripts chamados por ele, como o deploy-all.sh. Consulte os comentários nos próprios scripts para mais detalhes.

É possível executar o script de implantação repetidamente. Se uma implantação falhar, corrija o ambiente conforme as mensagens exibidas e execute o script novamente. Durante toda a execução, o script gera um log completo de operações para auxiliar na verificação da implantação e na solução de problemas.

Nota

Detalhes a confirmar: A invocação repetida do script e a capacidade de gerar logs completos estão em desenvolvimento. O comportamento real dependerá da versão lançada.

3.4 Verificar a implantação

Após concluir a implantação, siga as etapas abaixo para validar cada item.

Etapa 1: Checar o status de execução dos componentes

Execute o comando a seguir:

# 1. Change the image version in the YAML file of the component (Device Plugin is used as an example)
# Edit deploy/deviceplugin/03-daemonset.yaml and change the image field to the target version
# image: lj-runtimekit-registry.cn-hangzhou.cr.aliyuncs.com/lj-runtimekit/lj-runtimekit-device-plugin:<new-version>

# 2. Deploy a single component
./deploy/deploy-all.sh deploy --components=device-plugin

# Or deploy all components
./deploy/deploy-all.sh deploy

# 3. Verify the rolling update result
kubectl rollout status daemonset/lj-runtimekit-device-plugin -n kube-system
kubectl get pods -n kube-system -l app=lj-runtimekit-device-plugin -o wide

Resultado esperado:

Componente

Prefixo do nome do Pod

Forma de implantação

Quantidade esperada

Status normal

Device Plugin

lj-runtimekit-device-plugin-ds-

DaemonSet

Igual ao número de nós rotulados com lj_runtimekit_enable=true

Running, READY 1/1

Scheduler Framework

lj-runtimekit-scheduler-framework-

Deployment

1 (quantidade padrão de réplicas)

Running, READY 1/1

Exporter

lj-runtimekit-exporter-ds-

DaemonSet

Igual ao número de nós rotulados com lj_runtimekit_enable=true

Running, READY 1/1

Controller

lj-runtimekit-controller-manager-

Deployment

1 (quantidade padrão de réplicas)

Running, READY 1/1

Critérios de validação:

  • Todos os Pods apresentam estado Running e a coluna READY exibe 1/1, indicando sucesso na implantação.

  • Caso algum Pod esteja em CrashLoopBackOff, consulte os logs para identificar a causa: kubectl logs -n kube-system &lt;pod-name&gt;.

  • Se um Pod permanecer em Pending ou Init, verifique se as labels e os resources do nó atendem às condições de agendamento: kubectl describe pod -n kube-system &lt;pod-name&gt;.

Etapa 2: Conferir os resources relatados pelo nó

# 1. Change the image version in the YAML file of the component (Device Plugin is used as an example)
# Edit deploy/deviceplugin/03-daemonset.yaml and change the image field to the target version
# image: lj-runtimekit-registry.cn-hangzhou.cr.aliyuncs.com/lj-runtimekit/lj-runtimekit-device-plugin:<new-version>

# 2. Deploy a single component
./deploy/deploy-all.sh deploy --components=device-plugin

# Or deploy all components
./deploy/deploy-all.sh deploy

# 3. Verify the rolling update result
kubectl rollout status daemonset/lj-runtimekit-device-plugin -n kube-system
kubectl get pods -n kube-system -l app=lj-runtimekit-device-plugin -o wide

Resultado esperado (cenário de GPU inteira): Resources estendidos relacionados ao acelerador aparecem nas seções Capacity e Allocatable do nó. Exemplo:

# 1. Change the image version in the YAML file of the component (Device Plugin is used as an example)
# Edit deploy/deviceplugin/03-daemonset.yaml and change the image field to the target version
# image: lj-runtimekit-registry.cn-hangzhou.cr.aliyuncs.com/lj-runtimekit/lj-runtimekit-device-plugin:<new-version>

# 2. Deploy a single component
./deploy/deploy-all.sh deploy --components=device-plugin

# Or deploy all components
./deploy/deploy-all.sh deploy

# 3. Verify the rolling update result
kubectl rollout status daemonset/lj-runtimekit-device-plugin -n kube-system
kubectl get pods -n kube-system -l app=lj-runtimekit-device-plugin -o wide

Critérios de validação:

  • As quantidades de resources em Capacity devem corresponder ao número real de dispositivos no nó (por exemplo, um nó com 8 GPUs deve relatar 8).

  • Para os resources estendidos relatados pelo Device Plugin, Allocatable normalmente equivale a Capacity. Para verificar o uso de resources pelos Pods, execute kubectl describe node e examine a seção Allocated resources. Se Allocatable for 0, mas Capacity não for 0, geralmente trata-se de resíduo decorrente de alteração no nome do resource.

  • Se nenhum resource estendido aparecer, o Device Plugin falhou ao relatá-los. Verifique os logs do Pod do Device Plugin e o status do service de Runtime no nó, inclusive a existência do arquivo de socket.

Etapa 3: Confirmar que o Exporter expõe métricas (execute em um nó onde o Exporter esteja implantado)

# 1. Change the image version in the YAML file of the component (Device Plugin is used as an example)
# Edit deploy/deviceplugin/03-daemonset.yaml and change the image field to the target version
# image: lj-runtimekit-registry.cn-hangzhou.cr.aliyuncs.com/lj-runtimekit/lj-runtimekit-device-plugin:<new-version>

# 2. Deploy a single component
./deploy/deploy-all.sh deploy --components=device-plugin

# Or deploy all components
./deploy/deploy-all.sh deploy

# 3. Verify the rolling update result
kubectl rollout status daemonset/lj-runtimekit-device-plugin -n kube-system
kubectl get pods -n kube-system -l app=lj-runtimekit-device-plugin -o wide

Resultado esperado: Métricas no formato Prometheus são retornadas (linhas iniciadas com # HELP e # TYPE).

Critérios de validação:

  • Retorno do texto de métricas indica que o Exporter funciona adequadamente.

  • Falha na requisição com "Connection refused" exige verificar se o Pod do Exporter está operando corretamente e confirmar a correspondência das portas.

3.5 Ativar e desativar recursos

O Controller ativa ou desativa automaticamente os recursos do Runtime Kit em um nó com base na label desse nó. Ao adicionar a label lj_runtimekit_enable=true a um nó, o Controller habilita automaticamente os recursos nele. Ao remover a label, os recursos são desabilitados automaticamente. O mecanismo funciona da seguinte forma: o Controller cria automaticamente um Job do Kubernetes que executa a imagem do Controller Job Agent no nó alvo para concluir essas operações. Após a conclusão, o Job é limpo automaticamente. Rotule novos nós ao adicioná-los. A tabela a seguir descreve o impacto da ativação e desativação de recursos:

Item

Descrição

Tempo de transição

Cerca de 1 minuto

Agendamento de novos Pods

Novos Pods de GPU não podem ser agendados durante a transição

Pods em execução

Sem impacto. As GPUs já alocadas continuam funcionando normalmente.

Dados de monitoramento

O Exporter sofre breve interrupção, e os painéis de monitoramento podem apresentar lacunas de dados de 1 a 2 minutos.

Recomendamos realizar upgrades de componentes e operações de ativação/desativação de recursos fora dos horários de pico.

3.6 Implantação avançada e personalização

Utilize esta seção caso precise implantar componentes individualmente, compilar suas próprias imagens ou personalizar componentes com base no código open-source.

Antes de implantar os componentes, compile as imagens correspondentes e envie-as para um registro de imagens acessível ao cluster. Para compilar a imagem de cada componente, navegue até seu diretório-fonte e execute make docker. Após a compilação, envie as imagens para um registro acessível aos nós do cluster e garanta que os nomes e tags das imagens nos manifestos de implantação correspondam exatamente aos artefatos compilados. Os arquivos de implantação dos componentes são os seguintes:

Componente

Responsabilidade

Caminho do arquivo de implantação

Device Plugin

Descoberta de dispositivos, relato de resources e encaminhamento de alocações

deploy/deviceplugin/03-daemonset.yaml

Scheduler Framework

Agendamento consciente em dupla dimensão (poder computacional e memória da GPU) e agendamento ciente de topologia

deploy/scheduler/03-deployment.yaml

Exporter

Coleta de métricas de monitoramento de runtime da GPU e verificações de integridade

deploy/exporter/03-daemonset.yaml

Controller

Monitora alterações em labels de nós e ativa ou desativa automaticamente recursos do Runtime Kit nos nós

deploy/controller/02-deployment.yaml

Por exemplo, o arquivo de implantação do Device Plugin é deploy/deviceplugin/03-daemonset.yaml, e a configuração de imagem nele contida é a seguinte:

# 1. Change the image version in the YAML file of the component (Device Plugin is used as an example)
# Edit deploy/deviceplugin/03-daemonset.yaml and change the image field to the target version
# image: lj-runtimekit-registry.cn-hangzhou.cr.aliyuncs.com/lj-runtimekit/lj-runtimekit-device-plugin:<new-version>

# 2. Deploy a single component
./deploy/deploy-all.sh deploy --components=device-plugin

# Or deploy all components
./deploy/deploy-all.sh deploy

# 3. Verify the rolling update result
kubectl rollout status daemonset/lj-runtimekit-device-plugin -n kube-system
kubectl get pods -n kube-system -l app=lj-runtimekit-device-plugin -o wide

Se precisar alterar apenas itens de configuração — como nomes de resources estendidos, chaves de labels de nó ou chaves de anotações — sem modificar a lógica do código, edite a configuração (ConfigMap) no manifesto de implantação de cada componente e reimplante-o. Não será necessário recompilar a imagem. Para mais informações, consulte {{XREF_6}}.

4. Numeração e mapeamento de versões

4.1 Formato do número de versão

O Runtime Kit adota um esquema unificado de numeração de versões no formato v{major}.{feature}.{iteration} (por exemplo, v1.13.0).

Critério de upgrade: se o comportamento existente muda após o upgrade sem que você modifique nenhuma configuração ou arquivo YAML. Um upgrade de versão de iteração não altera o comportamento visível ao usuário. Já um upgrade de versão de feature pode introduzir novas funcionalidades ou mudanças de comportamento. Um upgrade de versão major pode conter alterações incompatíveis, exigindo avaliação prévia antes da atualização.

4.2 Versões do Runtime e dos componentes open-source

Versão do Runtime: A partir da versão 1.13.0, o Runtime suporta integração com os componentes open-source.

Versão dos componentes open-source: As versões dos componentes open-source acompanham as versões do Runtime.

5. Compatibilidade de versões

5.1 Política de compatibilidade

A interface gRPC entre o Runtime e os componentes open-source é apenas aditiva e retrocompatível: a interface evolui incrementalmente (novas interfaces e campos são adicionados), e a semântica das interfaces e campos existentes não se altera.

Se circunstâncias especiais exigirem futuramente uma alteração incompatível, ela será sempre lançada como upgrade de versão major e destacada nas notas de lançamento. Por outro lado, um upgrade de versão major não necessariamente contém alterações incompatíveis. Consulte as notas de lançamento da versão específica.

5.2 Conclusões sobre compatibilidade

Com base nessa política:

  1. Dentro da mesma versão major, a partir da versão 1.13.0, qualquer versão dos componentes open-source funciona com qualquer versão do Runtime.

  2. Um upgrade do Runtime não quebra os componentes já implantados. Não é necessária nenhuma atualização por motivos de compatibilidade.

  3. Implementações personalizadas com base no proto de uma versão anterior continuam funcionando após um upgrade do Runtime.

  4. Quando ocorrer um upgrade de versão major, revise as notas de lançamento para verificar possíveis alterações incompatíveis e avalie-as antes de prosseguir.

5.3 Dependências de versão entre componentes

Não há vinculação rígida de versão entre os componentes open-source. Eles se conectam ao Runtime por meio da interface gRPC unificada e ao cluster através dos mecanismos padrão de extensão do Kubernetes (framework de device plugin, Scheduler Framework e protocolo de métricas Prometheus). Em princípio, componentes de versões diferentes podem operar em conjunto.

Como um novo recurso geralmente requer a colaboração do Runtime e de múltiplos componentes, cada nova funcionalidade estabelece um requisito mínimo de versão unificado tanto para o Runtime quanto para todo o conjunto de componentes. Para mais informações, consulte a Seção 6.

6. Requisitos mínimos de versão para recursos

As capacidades básicas (alocação de GPU inteira, fatiamento de poder computacional e memória da GPU por divisão de tempo, e monitoramento básico) estão disponíveis a partir da versão 1.13.0, sem requisitos adicionais de versão. Recursos incrementais possuem requisitos mínimos específicos, conforme as regras a seguir:

Antes de utilizar um recurso, certifique-se de que a versão do Runtime e as versões de todos os componentes open-source associados sejam iguais ou superiores à versão mínima exigida para esse recurso. Como os componentes open-source são lançados com um número de versão unificado, isso significa que tanto a versão do Runtime quanto a dos componentes devem atender aos requisitos da tabela abaixo.

Recurso

Versão mínima do Runtime

Versão mínima do componente open-source

Multiplexação por divisão de tempo (TDM)

1.13.0

1.13.0

Particionamento espacial MIG (gerenciamento dinâmico de instâncias)

Agendamento ciente de topologia (PPU)

Monitoramento de integridade / verificações de baixo impacto

Observação: Se o requisito de versão não for atendido, apenas o recurso específico ficará indisponível. Os recursos existentes não serão afetados.

7. Upgrades

7.1 Cenários de upgrade

A compatibilidade de versões não obriga você a realizar upgrades. Eles ocorrem apenas nos dois cenários seguintes:

  1. Utilizar um novo recurso: Atualize o Runtime e os componentes open-source para as versões mínimas correspondentes ou superiores, conforme descrito na Seção 6.

  2. Corrigir um problema conhecido: Quando uma nova versão corrigir o problema, atualize para essa versão.

7.2 Upgrades do Runtime

Os upgrades do Runtime são transparentes para o usuário: não é necessário saber como o processo é executado. Se preciso, entre em contato com a equipe de PDSA ou SRE do Alibaba Cloud Lingjun para iniciar o upgrade, que segue um processo interno da plataforma.

Impacto durante a janela de upgrade: Durante a atualização do Runtime, o service gRPC no nó fica temporariamente indisponível. Operações dependentes dessa interface, como nova alocação de resources de GPU e coleta de dados de monitoramento, não podem ser realizadas nesse período. Jobs em execução com resources já alocados não são afetados. Recomendamos agendar upgrades fora dos horários de pico.

7.3 Upgrades de componentes open-source

Cada componente Kubernetes (Device Plugin, Scheduler Framework, Exporter e Controller) é implantado como DaemonSet ou Deployment e suporta rolling updates nativos do Kubernetes. A atualização nó a nó não afeta os Pods existentes.

Uso

Método de upgrade

Componentes pré-compilados

Atualize diretamente para a versão alvo. Os componentes suportam rolling updates nativos do Kubernetes. A atualização nó a nó do Device Plugin e do Exporter não afeta os Pods existentes.

Implementações personalizadas

Mantidas por você. Para usar um novo recurso, regenere o stub com base na nova versão do proto e adapte seu código.

Etapas de upgrade (componentes pré-compilados):

  • Confirme a tag da imagem correspondente à versão alvo.

  • No diretório de implantação com um clique, altere o campo de imagem no arquivo YAML do componente para a versão desejada (por exemplo, deploy/deviceplugin/02-daemonset.yaml ou deploy/scheduler/03-deployment.yaml).

  • Ao atualizar o Controller, atualize também a imagem do Controller Job Agent referenciada pelo parâmetro --job-image para a versão alvo.

  • Execute o script de implantação com um clique para implantar um único componente ou todos eles.

  • Verifique se os Pods da nova versão estão operando corretamente.

# 1. Change the image version in the YAML file of the component (Device Plugin is used as an example)
# Edit deploy/deviceplugin/03-daemonset.yaml and change the image field to the target version
# image: lj-runtimekit-registry.cn-hangzhou.cr.aliyuncs.com/lj-runtimekit/lj-runtimekit-device-plugin:<new-version>

# 2. Deploy a single component
./deploy/deploy-all.sh deploy --components=device-plugin

# Or deploy all components
./deploy/deploy-all.sh deploy

# 3. Verify the rolling update result
kubectl rollout status daemonset/lj-runtimekit-device-plugin -n kube-system
kubectl get pods -n kube-system -l app=lj-runtimekit-device-plugin -o wide

Rollback:

Se a nova versão não funcionar conforme o esperado, reverta a tag da imagem no arquivo YAML do componente para a versão original e execute novamente o script de implantação com um clique para efetuar o rollback.

7.4 Responsabilidades de upgrade

Item

Responsabilidade

Pacote de Runtime

Lançado e aprimorado continuamente pela equipe Alibaba Cloud Lingjun. Os upgrades seguem um processo interno do Alibaba Cloud Lingjun.

Componentes pré-compilados

Lançados pelo Alibaba Cloud Lingjun. Você pode atualizá-los diretamente.

Implementações personalizadas

Mantidas por você

O pacote subjacente de componentes do lado do nó (RPM) é distribuído centralmente pelo Alibaba Cloud Lingjun. Nenhuma operação manual é necessária.

Perguntas frequentes

P1: Falha na alocação de resources e Pod permanece em Pending com erro de Insufficient resource

Possíveis causas: Nenhum nó no cluster atende aos requisitos, a label do nó está ausente ou o Device Plugin não relatou os resources. Solução: Verifique se o nó alvo possui a label lj_runtimekit_enable=true. Consulte os logs do Device Plugin para confirmar o relato de resources.

P2: A label lj_runtimekit_enable=true está definida no nó, mas o recurso não foi ativado

Etapas de solução de problemas:

  1. Confirme se o Pod do Controller está operando normalmente.

  2. Verifique nos logs do Controller se a alteração da label foi detectada.

  3. Cheque se o Job correspondente foi criado.

  4. Consulte os logs do Job Agent (kubectl logs -n kube-system job/lj-agent-&lt;node-name&gt;-&lt;enable|disable&gt;. O namespace padrão é kube-system.)

  5. Valide a existência do socket config-daemon no nó: ls /run/amp/eKitC/xdm/sockets/config-daemon.sock.

Observação: Após a conclusão bem-sucedida de um Job, o Controller o exclui automaticamente. Se o Job correspondente não existir mais, a operação foi concluída com sucesso. Confirme o resultado por meio da anotação lj-runtimekit-controller/last-action-status no nó ou pelo evento ActionSucceeded nos logs do Controller. Jobs com falha são retidos. Utilize o comando da Etapa 4 para consultar os logs.

P3: Logs de componentes exibem repetidamente EOF ou connection reset

Possíveis causas: Reinício dos services principais no nó, exclusão acidental do arquivo de socket ou falta de implementação de reconexão no cliente. Solução: Verifique os processos dos services principais e o status do socket. O cliente deve implementar reconexão com backoff exponencial (recomendamos intervalo inicial de 1 segundo, multiplicador de 2 e máximo de 30 segundos).

Localização dos logs

Componente

Localização dos logs

Service principal do Runtime

Arquivos de log correspondentes no diretório /var/log/harp/

Device Plugin

kubectl logs -n kube-system &lt;dp-pod&gt;

Scheduler Framework

kubectl logs -n kube-system &lt;sched-pod&gt;

Exporter

kubectl logs -n kube-system &lt;exporter-pod&gt;

Controller

kubectl logs -n kube-system &lt;controller-pod&gt;

Controller Job Agent

kubectl logs -n kube-system job/lj-agent-&lt;node-name&gt;-&lt;enable|disable&gt; (Jobs com falha são retidos para inspeção de logs. Após conclusão bem-sucedida, o Controller exclui o Job automaticamente. Consulte a P2.)