Os sub-contêineres do DSW são baseados na tecnologia Docker-in-Docker (DinD). Em uma única instância do DSW, você pode crie e gerencie múltiplos contêineres secundários para isolar ambientes e recursos. O PAI console oferece uma interface visual para criar, iniciar, parar e excluir sub-contêineres, além de acessá-los via SSH.
Casos de uso
Isole diferentes ambientes de desenvolvimento dentro da mesma instância do DSW e compare resultados de treinamento entre imagens.
Quando os recursos de GPU são escassos, crie sub-contêineres a partir de imagens diferentes para alternar runtimes sem reconstruir a instância e aguardar novamente na fila.
Quando vários desenvolvedores compartilham uma instância do DSW, utilize sub-contêineres para isolar o ambiente e os recursos de cada desenvolvedor.
Pré-requisitos
Os sub-contêineres são compatíveis apenas com instâncias do DSW criadas em um grupo de recursos Lingjun ou em um grupo de recursos público.
O administrador da instância (o usuário que a criou ou o proprietário) deve ter permissões para crie e gerencie instâncias do DSW.
O recurso Enable Multi-Container Isolation (DinD) deve ser ativado no momento da criação da instância do DSW.
Para acessar sub-contêineres via SSH, ative também o recurso SSH na instância do DSW.
Funções e permissões
O gerenciamento de sub-contêineres envolve duas funções:
Administrador da instância (proprietário): O usuário que criou a instância do DSW. Essa função gerencie a configuração em nível de instância, incluindo a ativação do DinD, a configuração de restrições de acesso, a definição do número máximo de sub-contêineres e a configuração de regras de isolamento de diretórios de dados.
Desenvolvedor de sub-contêiner: Um usuário com uma função de workspace correspondente (como desenvolvimento de algoritmos) ou permissões RAM. Desenvolvedores de sub-contêineres podem visualize a lista de sub-contêineres, crie seus próprios sub-contêineres e utilizá-los via SSH. Cada desenvolvedor pode iniciar, parar e exclua apenas os sub-contêineres que criou, mas pode visualize as informações de todos os sub-contêineres.
As permissões podem ser controladas de duas formas:
Baseada em função de workspace: O administrador da instância pode restringir funções específicas (como desenvolvimento de algoritmos) de acessar o contêiner principal na configuração da instância. As funções restritas só podem desenvolver em sub-contêineres acessados via SSH. Esse método é simples de entender e se aplica à maioria dos cenários.
Baseada em política RAM: Configure políticas RAM para um controle de permissões mais granular, chegando a sub-contêineres específicos em instâncias específicas. Esse método é adequado para clientes empresariais que exigem controle de permissões mais rigoroso.
Operações do administrador da instância
Ative o isolamento de múltiplos contêineres ao criar uma instância
Acesse o PAI console, vá para a página do DSW e clique em Create Instance.
Na configuração da instância, localize o switch Enable Multi-Container Isolation (DinD) e ative-o.
-
Após ativar o recurso, os seguintes parâmetros serão exibidos:
-
Restrict roles that can access the main container: Selecione as funções de workspace a serem restringidas na lista suspensa. As funções restritas não podem abrir nem operar o contêiner principal do DSW diretamente — elas desenvolvem em sub-contêineres acessados via SSH.
Por exemplo, ao selecione Algorithm Development, usuários com a função de desenvolvimento de algoritmos não conseguem entrar no contêiner principal, mas ainda podem crie e usar seus próprios sub-contêineres na aba Sub-container Management da página de detalhes da instância.
Se nenhuma função for selecionada, todos os usuários autorizados poderão acessar o contêiner principal, e o comportamento permanece igual ao anterior.
Maximum Number of Sub-containers: Defina o número máximo de sub-contêineres que podem ser criados na instância. Os valores válidos são inteiros de 1 a 16; o valor padrão é 10.
Data Catalog Fencing Configuration: Especifique o caminho do arquivo de configuração de isolamento de diretórios de dados no contêiner principal. O caminho padrão é
/etc/docker/dockerboard/mount_access.json. Esse arquivo controla os diretórios de dados que cada usuário pode montar ao crie sub-contêineres. Clique em Configuration Template Download para baixe o modelo do arquivo de configuração. Para as etapas de configuração, consulte Configure data directory isolation.
-
Conclua as demais configurações da instância e envie-as para crie a instância.
Configure o isolamento de diretórios de dados
O isolamento de diretórios de dados controla quais diretórios do contêiner principal cada desenvolvedor pode montar ao crie um sub-contêiner. Isso impede que desenvolvedores acessem dados de armazenamento de outros usuários sem autorização.
Etapas de configuração:
Na página de criação ou edite da instância, clique em Configuration Template Download em Data Catalog Fencing Configuration para baixe o arquivo de modelo JSON.
Siga o formato do modelo e preencha o mapeamento entre o UID de cada usuário RAM da Alibaba Cloud e os diretórios do contêiner principal do DSW que o usuário pode acessar.
Coloque o arquivo
mount_access.jsoneditado no contêiner principal do DSW, no caminho especificado pela configuração (por padrão,/etc/docker/dockerboard/mount_access.json).
Formato do arquivo de configuração:
O arquivo de configuração está no formato JSON. Cada chave é o UID de um usuário RAM da Alibaba Cloud, e cada entrada de usuário suporta dois campos: Allow (os diretórios que o usuário tem permissão para montar) e Deny (os diretórios que o usuário não tem permissão para montar). O exemplo a seguir ilustra o formato:
{
"123124432xxx": {
"Allow": [
"/mnt/workspace",
"/mnt/data1"
],
"Deny": [
"/mnt/data2"
]
},
"224321234xxx": {
"Allow": [
"*"
]
}
}
A tabela a seguir descreve os campos:
|
Campo |
Descrição |
|
chave (por exemplo, |
O UID de um usuário RAM da Alibaba Cloud |
|
Allow |
A lista de diretórios do contêiner principal que o usuário tem permissão para montar. Defina este campo como |
|
Deny |
A lista de diretórios do contêiner principal que o usuário não tem permissão para montar. Deny tem precedência sobre Allow. Se um diretório aparecer nas duas listas, ele não poderá ser montado. Este campo é opcional |
Regras de configuração:
Se o arquivo de configuração existir e estiver em formato válido, o sistema verificará se o usuário atual tem permissão para montar os diretórios selecionados ao crie um sub-contêiner.
Se o arquivo de configuração não contiver uma entrada para o usuário atual, ele não poderá montar diretórios de dados ao crie um sub-contêiner, e a seguinte mensagem será exibida: "Your account has no available DSW paths. If you need to mount directories, contact the instance administrator to add the configuration for you."
Se o caminho do arquivo configurado estiver vazio ou o arquivo não existir, o sistema ignorará as verificações de isolamento de diretórios, e todos os usuários poderão montar qualquer diretório do contêiner principal.
Operações do desenvolvedor de sub-contêineres
Abrir a página de gerenciamento de sub-contêineres
Acesse o PAI console e vá para a página do DSW.
Na lista de instâncias, clique em no nome da instância de destino com DinD ativado para acesse a página de detalhes da instância.
Na página de detalhes da instância, clique em na aba Sub-container Management para abrir a página de gerenciamento.
A aba de gerenciamento de sub-contêineres só é exibida quando o contêiner principal do DSW está no estado Running. Se o contêiner principal não estiver em execução, a aba não será exibida.
Crie um sub-contêiner
Na página de gerenciamento de sub-contêineres, clique em Create Sub-container e preencha as configurações a seguir no formulário de criação.
Informações básicas
|
Parâmetro |
Obrigatório |
Descrição |
Exemplo |
|
Nome do contêiner |
Sim |
Especifique um nome que facilite a identificação do sub-contêiner. |
Por exemplo: |
|
Hostname |
Não |
Especifique um hostname personalizado para o sub-contêiner. |
Por exemplo: |
|
Política de reinicialização |
Não |
Defina a política de reinicialização automática do contêiner após ele ser encerrado. |
Por exemplo: sem reinicialização automática |
Informações de ambiente
|
Parâmetro |
Obrigatório |
Descrição |
Exemplo |
|
Configuração de imagem |
Sim |
Selecione a imagem usada pelo sub-contêiner. Dois métodos são suportados:
|
Por exemplo: |
|
Chave pública SSH |
Sim |
Insira a chave pública SSH do seu cliente local, que será usada para acessar o sub-contêiner via SSH posteriormente. |
Se você ainda não gerou um par de chaves SSH, execute |
|
Montagem do contêiner principal |
Não |
Em instâncias com disco de sistema persistente ativado, os sub-contêineres podem montar qualquer caminho do contêiner principal. Nas instâncias sem disco de sistema persistente, os sub-contêineres só podem montar os caminhos de armazenamento e os datasets montados no contêiner principal. |
|
|
Montagem de dataset |
Não |
Somente datasets já montados no contêiner principal, ou datasets em seus subdiretórios, podem ser montados. |
|
|
Variáveis de ambiente |
Não |
Defina variáveis de ambiente personalizadas para o sub-contêiner em pares chave-valor. |
Por exemplo: |
|
Comando de inicialização |
Não |
Especifique o comando a ser executado na inicialização do contêiner. |
Por exemplo: |
|
Entrypoint |
Não |
Especifique o entrypoint do contêiner. |
Por exemplo: |
Informações de recursos
|
Parâmetro |
Obrigatório |
Descrição |
Exemplo |
|
Montagem de dispositivo GPU |
Não |
Se a instância do DSW tiver recursos de GPU, selecione os dispositivos GPU a serem montados ao crie o sub-contêiner. Todas as placas GPU da instância (incluindo os números de dispositivo) são listadas, e você pode selecione múltiplas placas. Após selecione os dispositivos GPU, eles serão montados no sub-contêiner para uso. |
|
|
Limite de CPU |
Não |
Defina o uso máximo de CPU do sub-contêiner. Se o campo for deixado em branco, nenhum limite será aplicado, e o sub-contêiner poderá consumir outros recursos ociosos da instância. |
Por exemplo: 8 cores |
|
Limite de memória |
Não |
Defina o uso máximo de memória do sub-contêiner. Se o campo for deixado em branco, nenhum limite será aplicado, e o sub-contêiner poderá consumir outros recursos ociosos da instância. |
Por exemplo: 48 GiB |
Após concluir a configuração, clique em Confirm para crie o sub-contêiner. Na página de gerenciamento de sub-contêineres, clique em Child Container Creation Progress para acompanhar o processo de criação.
Gerencie sub-contêineres
Na lista de sub-contêineres, a coluna de ações de cada sub-contêiner oferece as seguintes operações:
Você só pode gerencie os sub-contêineres que criou.
Start: Inicia um sub-contêiner no estado Stopped.
Stop: Interrompe um sub-contêiner em execução. Após a parada, os processos são encerrados, mas a configuração do contêiner e os dados de armazenamento montados são preservados.
Restart: Reinicia um sub-contêiner em execução. Essa operação equivale a parar o sub-contêiner e iniciá-lo novamente.
Logs: Visualize os logs de runtime do sub-contêiner, úteis para a resolução de problemas.
SSH connection information: Visualize as informações de conexão SSH do sub-contêiner, incluindo o nome de usuário e o comando de conexão.
Delete: Exclua o sub-contêiner. Os dados não persistidos por meio de armazenamento montado não poderão ser recuperados após a exclusão. Proceda com cautela.
Visualize a lista de sub-contêineres
A página de gerenciamento de sub-contêineres exibe uma lista com todos os sub-contêineres da instância atual. A lista apresenta as seguintes informações:
A lista contém apenas os sub-contêineres criados na página de gerenciamento de sub-contêineres. Sub-contêineres criados manualmente pelos usuários por meio de comandos docker não são incluídos.
|
Campo |
Descrição |
|
Nome do contêiner |
O nome do sub-contêiner |
|
Nome de usuário |
O nome do usuário que criou o sub-contêiner |
|
Status |
O status atual do sub-contêiner, incluindo: Creating (imagem sendo baixada), Created, Running, Paused, Restarting, Stopped, Starting, Stopping e Updating |
|
Memória GPU (GiB) |
O número do dispositivo GPU e o uso de memória GPU |
|
Recursos de CPU |
O uso de CPU e o número de cores |
|
Memória (GiB) |
O uso de memória |
|
Imagem do contêiner |
A imagem usada pelo sub-contêiner |
|
Horário de criação |
O horário em que o sub-contêiner foi criado |
Todos os usuários com permissões de leitura no DSW podem visualize a lista completa de sub-contêineres, mas só podem iniciar, parar e exclua os sub-contêineres que criaram.
Visualize a lista de tarefas de criação de contêineres
A criação de um sub-contêiner pode demorar bastante (por exemplo, quando uma imagem grande precisa ser baixada). O sistema acompanha as tarefas de criação de contêineres.
No canto superior direito da página de gerenciamento de sub-contêineres, clique em Child Container Creation Progress para visualize o status e os logs de todas as tarefas de criação de contêineres. Tarefas no estado Creating podem ser canceladas manualmente. Por padrão, os registros de tarefas são retidos por 3 dias e removidos automaticamente após esse período.
Acesse um sub-contêiner via SSH
Após um sub-contêiner ser criado e estar no estado Running, você pode acessá-lo remotamente via SSH.
Procedimento:
Na lista de sub-contêineres, localize o sub-contêiner de destino e clique em SSH connection information na coluna de ações. As informações incluem o nome de usuário de conexão e o comando de conexão completo.
Copie o comando de conexão gerado pelo console e execute-o em um terminal local para acessar o sub-contêiner. O comando tem o seguinte formato:
ssh <username>@<public-ip-address> -p <public-port> -i <local-private-key-path>
A tabela a seguir descreve os parâmetros:
|
Parâmetro |
Descrição |
|
username |
Vinculado exclusivamente a um sub-contêiner e exibido na caixa de diálogo "Access Method" |
|
public-ip-address |
O endereço de acesso público do contêiner principal do DSW |
|
public-port |
A porta pública mapeada para o service SSH do sub-contêiner |
|
local-private-key-path |
O caminho do arquivo de chave privada correspondente à chave pública SSH inserida ao crie o sub-contêiner (por exemplo, ~/.ssh/id_rsa) |
Após o acesso via SSH, você entra no ambiente de linha de comando do sub-contêiner correspondente. Todos os sub-contêineres compartilham a porta pública do contêiner principal do DSW. O isolamento de acesso é garantido pela chave SSH exclusiva e pelo nome de usuário de conexão dedicado de cada sub-contêiner.
Observações de uso e limitações
Dependência do estado do contêiner principal: Todas as funcionalidades de gerenciamento de sub-contêineres dependem do estado de execução do contêiner principal do DSW. Se o contêiner principal estiver parado ou em estado anormal, a página de gerenciamento de sub-contêineres ficará indisponível e os sub-contêineres não poderão ser acessados.
Escopo de montagem de armazenamento: Os sub-contêineres só podem montar caminhos de diretório do contêiner principal. Armazenamento externo não pode ser montado diretamente.
Limite de quantidade de sub-contêineres: O número de sub-contêineres em cada instância está sujeito ao limite configurado pelo administrador. O limite máximo configurável é 16.
Escopo de recursos: Os sub-contêineres não oferecem o ambiente de desenvolvimento completo do contêiner principal do DSW (como os aplicativos integrados JupyterLab, Terminal e WebIDE). O acesso aos sub-contêineres é feito exclusivamente via SSH.
Persistência de dados: Dados em um sub-contêiner não persistidos por meio de armazenamento montado não poderão ser recuperados após a exclusão do sub-contêiner. Armazene dados importantes em diretórios montados.
Impacto da exclusão da instância: Quando uma instância do DSW é excluída, todos os sub-contêineres nela contidos também são excluídos. Faça backup dos seus dados com antecedência.
Perguntas frequentes
P: Por que não consigo ver a aba de gerenciamento de sub-contêineres na página de detalhes da instância?
Verifique os seguintes pontos:
O recurso Enable Multi-Container Isolation (DinD) foi ativado no momento da criação da instância do DSW.
O contêiner principal do DSW está no estado Running. Quando o contêiner principal não está em execução, a aba de gerenciamento de sub-contêineres não é exibida.
P: Por que não consigo montar diretórios de dados ao crie um sub-contêiner?
O administrador da instância pode ter configurado uma política de isolamento de diretórios de dados, e nenhum diretório disponível foi atribuído ao seu usuário RAM no arquivo de configuração. Entre em contato com o administrador da instância para que ele adicione uma entrada para você no arquivo mount_access.json.
P: Por que a conexão SSH com um sub-contêiner falha?
Verifique os seguintes pontos na ordem indicada:
Se o sub-contêiner está no estado Running
Se a chave privada local utilizada corresponde à chave pública inserida ao crie o sub-contêiner
Se o SSH está ativado na instância do DSW
Se a sua rede consegue acessar o endereço público e a porta SSH pública da instância
P: Por que a criação de um sub-contêiner demora muito?
O tempo de criação do sub-contêiner depende principalmente da velocidade de download da imagem. O download de uma imagem grande pela primeira vez pode levar bastante tempo. Acompanhe o progresso e os logs na lista de tarefas de criação de contêineres. Ao crie um novo contêiner a partir da mesma imagem posteriormente, o processo será muito mais rápido porque a imagem já estará armazenada em cache localmente.
P: Posso gerencie sub-contêineres criados por outros usuários?
Depende da sua função e das configurações de permissão de operação da instância.
Proprietários de workspace, administradores de workspace e proprietários de instância têm permissões de operação completas na instância. Eles podem gerencie sub-contêineres criados por qualquer usuário e não são afetados pela restrição que proíbe operar ou alterar a instância.
Usuários com a função de desenvolvimento de algoritmos ou de O&M de algoritmos, e funções personalizadas com permissão de leitura no DSW, também podem gerencie sub-contêineres criados por outros usuários por padrão. Após essas funções serem restritas de operar ou alterar a instância, elas só poderão gerencie os sub-contêineres que criaram.
Todos os usuários com permissões de leitura no DSW podem visualize as informações básicas de todos os sub-contêineres.