Como configurar opções de criação de contentores para módulos do IoT Edge
Aplica-se a: IoT Edge 1.5 IoT Edge 1.4
Importante
O IoT Edge 1.5 LTS é a versão suportada. O IoT Edge 1.4 LTS está em fim de vida útil a partir de 12 de novembro de 2024. Se tiver uma versão anterior, consulte Atualizar IoT Edge.
O parâmetro createOptions no manifesto de implantação permite configurar os contêineres de módulo em tempo de execução. Esse parâmetro expande seu controle sobre os módulos e permite tarefas como permitir ou restringir o acesso do módulo aos recursos do dispositivo host ou configurar a rede.
Os módulos do IoT Edge são implementados como contêineres compatíveis com o Docker em seu dispositivo IoT Edge. O Docker oferece muitas opções para criar contêineres, e essas opções também se aplicam aos módulos do IoT Edge. Para obter mais informações, consulte Opções de criação de contêiner do Docker.
Opções de criação de formato
O manifesto de implantação do IoT Edge aceita opções de criação formatadas como JSON. Por exemplo, considere as opções de criação que são incluídas automaticamente para cada módulo edgeHub:
"createOptions": {
"HostConfig": {
"PortBindings": {
"5671/tcp": [
{
"HostPort": "5671"
}
],
"8883/tcp": [
{
"HostPort": "8883"
}
],
"443/tcp": [
{
"HostPort": "443"
}
]
}
}
}
Este exemplo de edgeHub usa o parâmetro HostConfig.PortBindings para mapear portas expostas no contêiner para uma porta no dispositivo host.
Se você usar a extensão do Azure IoT Edge para Visual Studio ou Visual Studio Code, poderá escrever as opções de criação no formato JSON no arquivo deployment.template.json . Em seguida, quando você usa a extensão para criar a solução IoT Edge ou gerar o manifesto de implantação, ela stringifica o JSON para você no formato esperado pelo tempo de execução do IoT Edge. Por exemplo:
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
Importante
A extensão Azure IoT Edge Visual Studio Code está no modo de manutenção. A ferramenta iotedgedev é a ferramenta recomendada para o desenvolvimento de módulos IoT Edge.
Uma dica para escrever opções de criação é usar o docker inspect
comando. Como parte do seu processo de desenvolvimento, execute o módulo localmente usando docker run <container name>
o . Depois de ter o módulo funcionando da maneira que você quer, execute docker inspect <container name>
. Este comando produz os detalhes do módulo no formato JSON. Localize os parâmetros que você configurou e copie o JSON. Por exemplo:
Cenários comuns
As opções de criação de contêiner permitem muitos cenários, mas aqui estão alguns que aparecem com mais frequência ao criar soluções do IoT Edge:
- Dê aos módulos acesso ao armazenamento do host
- Mapeie a porta do host para a porta do módulo
- Restringir a memória do módulo e o uso da CPU
- GPU-otimize um módulo IoT Edge
Mapeie a porta do host para a porta do módulo
Se o módulo precisar se comunicar com um serviço fora da solução IoT Edge e não estiver usando o roteamento de mensagens para fazer isso, você precisará mapear uma porta de host para uma porta de módulo.
Gorjeta
Esse mapeamento de porta não é necessário para comunicação módulo-a-módulo no mesmo dispositivo. Se o módulo A precisar consultar uma API hospedada no módulo B, ele poderá fazê-lo sem qualquer mapeamento de porta. O módulo B precisa expor uma porta em seu dockerfile, por exemplo: EXPOSE 8080
. Em seguida, o módulo A pode consultar a API usando o nome do módulo B, por exemplo: http://ModuleB:8080/api
.
Primeiro, certifique-se de que uma porta dentro do módulo está exposta para ouvir as conexões. Você pode fazer isso usando uma instrução EXPOSE no dockerfile. Por exemplo, EXPOSE 8080
. A instrução de exposição assume como padrão o protocolo TCP se não for especificada ou você pode especificar UDP.
Em seguida, use a configuração PortBindings no grupo HostConfig do contêiner do Docker criar opções para mapear a porta exposta no módulo para uma porta no dispositivo host. Por exemplo, se você expôs a porta 8080 dentro do módulo e deseja mapeá-la para a porta 80 do dispositivo host, as opções de criação no arquivo template.json serão parecidas com o exemplo a seguir:
"createOptions": {
"HostConfig": {
"PortBindings": {
"8080/tcp": [
{
"HostPort": "80"
}
]
}
}
}
Uma vez stringified para o manifesto de implantação, a mesma configuração seria semelhante ao exemplo a seguir:
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"8080/tcp\":[{\"HostPort\":\"80\"}]}}}"
Restringir a memória do módulo e o uso da CPU
Pode declarar a quantidade de recursos de anfitrião que um módulo pode utilizar. Este controlo é útil para garantir que um módulo não pode consumir demasiada memória ou utilização da CPU e impedir a execução de outros processos no dispositivo. Você pode gerenciar essas configurações com as opções de criação de contêiner do Docker no grupo HostConfig , incluindo:
- Memória: Limite de memória em bytes. Por exemplo, 268435456 bytes = 256 MB.
- MemorySwap: Limite total de memória (memória + swap). Por exemplo, 536870912 bytes = 512 MB.
- NanoCpus: cota de CPU em unidades de 10-9 (1 bilionésimo) CPUs. Por exemplo, 250000000 nanocpus = 0,25 CPU.
No formato template.json, esses valores seriam parecidos com o exemplo a seguir:
"createOptions": {
"HostConfig": {
"Memory": 268435456,
"MemorySwap": 536870912,
"NanoCpus": 250000000
}
}
Depois de stringizados para o manifesto de implantação final, esses valores seriam parecidos com o exemplo a seguir:
"createOptions":"{\"HostConfig\":{\"Memory\":268435456,\"MemorySwap\":536870912,\"CpuPeriod\":25000}}"
GPU-otimize um módulo IoT Edge
Se você estiver executando seu módulo IoT Edge em uma máquina virtual otimizada para GPU, poderá habilitar um módulo IoT Edge para se conectar à sua GPU também. Para fazer isso com um módulo existente, adicione algumas especificações ao seu createOptions
:
{"HostConfig": {"DeviceRequests": [{"Count": -1,"Capabilities": [["gpu"]]}]}}
Para confirmar se essas configurações foram adicionadas com êxito, use o comando Docker inspect para ver a nova configuração em uma impressão JSON.
sudo docker inspect <YOUR-MODULE-NAME>
Para saber mais sobre como seu dispositivo e máquina virtual se conectam a uma GPU, consulte Configurar, conectar e verificar um módulo IoT Edge para uma GPU.
Próximos passos
Para obter mais exemplos de opções de criação em ação, consulte os seguintes exemplos do IoT Edge: