Экземпляры контейнеров Azure — .net sdk — изменение переменной среды и перезапуск контейнера задач

Я развернул группу контейнеров, в которой был только один контейнер, с политикой перезапуска «Никогда». Я хочу снова запустить этот контейнер, но с другими переменными среды. Я вижу способы сделать это в командлетах powershell и azure, но в Azure .net SDK не очень ясно, как этого можно добиться.

Есть ли у кого-нибудь указания о том, как этого можно добиться с помощью Fluent API? Это будет полезно для меня, так как образ не нужно снова тянуть, просто перезапустить экземпляр контейнера.

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
0
305
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы хотите снова запустить этот контейнер, это означает, что вам нужно обновить конфигурацию этой группы контейнеров, даже если вы хотите изменить только переменные среды. Узнайте больше о Контейнерах обновлений . Для экземпляра контейнера Azure обновление означает повторное создание. Для .NET вы можете использовать IWithEnvironmentVariables в Microsoft.Azure.Management.ContainerInstance.Fluent.ContainerGroup.Definition, чтобы установить переменные среды, а затем снова создать группу контейнеров.

Ответ принят как подходящий

Я не уверен, что вы сможете предотвратить повторное извлечение изображения при запуске контейнера. Я часто вижу, как ACI снова загружают образ при перезапуске, независимо от того, был ли тот же самый образ загружен ранее. Я думаю, это то, что на самом деле означает бессерверность;)

Из вашего вопроса не совсем понятно, чего вы пытаетесь достичь, и является ли перезапуск контейнера с переменными окружения лучшим способом сделать это.

Итак, не зная специфики, вот пара идей:

Если вы время от времени запускаете контейнер и просто хотите дать ему некоторые инструкции, вы можете рассмотреть возможность повторного развертывания контейнера из параметризованного шаблона ARM. Вы определенно можете передавать переменные среды через шаблон ARM.

Вы можете подключить общий файловый ресурс из учетной записи хранения Azure в контейнер и запустить скрипт, загружающий оттуда переменные. Вы загружаете данные для обработки в общую папку и запускаете контейнер.

Я использовал это для запуска произвольных (.NET) исполняемых файлов в универсальном контейнере, например, в целях тестирования.

Для более частых запусков вы можете поместить данные конфигурации в базу данных, очередь или большой двоичный объект и обработать их из контейнера. Большие двоичные объекты и очереди можно легко привязать к функциям Azure, чтобы вы могли иметь функцию, которая автоматически запускает ваш контейнер, когда есть работа, которую нужно обработать.

Судя по вашему вопросу, я предполагаю, что вы ищете какой-то код .NET, чтобы это осуществить. Кажется, в SDK управления есть некоторая поддержка, но мне пока не удалось заставить это работать:

using System.Threading.Tasks;
using Microsoft.Azure.Management.ContainerInstance.Fluent;
using Microsoft.Azure.Management.ContainerInstance.Fluent.Models;
using Microsoft.Azure.Management.Fluent;
using Microsoft.Azure.Management.ResourceManager.Fluent;

// ...

public static async Task SetEnvAndStart(string varName, string customValue)
{
    // connect to Azure
    var credentials = SdkContext.AzureCredentialsFactory.FromServicePrincipal(
        Configuration.ClientId(), 
        Configuration.ClientSecret(), 
        Configuration.TenantId(), 
        AzureEnvironment.AzureGlobalCloud);            

    var azure = await Azure.Authenticate(credentials).WithDefaultSubscriptionAsync();
    // Find your container group
    var containerGroup = await azure.ContainerGroups.GetByIdAsync("<resource id>");
    // Add the environment variable
    containerGroup.Containers["mycontainer"].EnvironmentVariables.Add(new EnvironmentVariable(varName, customValue));
    // Apply the changes
    await containerGroup.Update().ApplyAsync();
    // Restart the container
    await ContainerGroupsOperationsExtensions.StartAsync(containerGroup.Manager.Inner.ContainerGroups, containerGroup.ResourceGroupName, containerGroup.Name);
}

Если вы действительно хотите использовать переменные среды, я думаю, вам лучше всего воссоздать контейнер. Вы можете найти некоторый пример кода пакета SDK управления Azure полезным.

спасибо ... это то, что я тоже пробовал, но пока не смог заставить его работать, а документации мало. Я хотел повторно запустить контейнер в группе контейнеров без повторного извлечения контейнера, и, похоже, в настоящее время нет способа сделать это (функция в процессе), поэтому, даже если это работает, ACI не кэширует контейнер , и, следовательно, мой сценарий не работает...

sargeMonkey 26.12.2020 21:52

Другие вопросы по теме