Установка пакета Linux при запуске при развертывании Airflow с Helm в службе Azure Kubernets

#azure #kubernetes #airflow #kubernetes-helm

#azure #kubernetes #airflow #kubernetes-helm

Вопрос:

Я пытаюсь установить Airflow в службе Azure Kubernetes (AKS) с помощью Helm. Я нашел несколько руководств для этого, и с некоторым трудом мне удалось заставить его работать нормально. Сейчас я пытался запустить несколько созданных мною баз данных, и в одной из этих баз данных я использую оператор bash для запуска определенной команды, и для этой команды нужен пакет Linux, который не поставляется с изображением по умолчанию, которое Helm использует для Airflow … https://github.com/airflow-helm/charts/tree/main/charts/airflow

Есть ли способ включить дополнительные пакеты Linux для установки диаграммы потока Helm? Я искал его повсюду, но ничего не смог найти

Надеюсь, кто-нибудь сможет мне в этом помочь.

Ответ №1:

Helm сам по себе является языком шаблонов. Большинство диаграмм helm предоставляют вам гибкость при изменении базового образа приложений. Пока вы используете соответствующий образ, диаграмма helm создаст для вас правильное развертывание.

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

Например, вы можете установить свой пакет подобным образом с Dockerfile помощью defined locally.

 FROM apache/airflow:1.10.12-python3.6

RUN apt update amp;amp; 
    apt install vim -y amp;amp; 
    rm -rf /var/lib/apt/lists/*
 

Затем выполните следующую команду для создания и загрузки пользовательского образа.

 docker build -t my-account/my-airflow:latest .
docker push my-account/my-airflow:latest
 

Затем в файле значений вы можете указать имя своего изображения и тег.

 airflow:
  image:
    repository: my-account
    tag: my-airflow
 

Как только вы примените этот файл значений, helm поможет вам изменить изображение по умолчанию на настроенное вами.

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

Комментарии:

1. Спасибо за ваш ответ! Да, это звучит как разумное и аккуратное решение. Тогда мне придется разобраться с этим, я новичок в Kubernetes и Docker, я еще даже не взаимодействовал с Docker, только это развертывание с использованием Helm, и я искал простой способ сделать это, поскольку мои сроки довольно жесткие. Поиск того, как все это сделать, может занять некоторое время, но это то, что есть. Еще раз большое вам спасибо

2. Вы не можете отделить среду выполнения контейнера, которая в данном случае является docker, от Kubernetes и helm. Helm — это язык шаблонов для Kubernetes, а docker — среда выполнения для Kubernetes. Если вы хотите поиграть с Kubernetes, сначала вы узнаете, как работает контейнер и как создавать образы контейнеров. Я предлагаю понять основы Kubernetes и контейнера, прежде чем играть с helm.

3. Хм, я последовал тому, что вы предложили. Я создал учетную запись в hub.docker и создал пользовательский образ airflow, используя ваш точный код, я не менял его на фактический пакет, который мне нужен. Мне просто нужно было добавить ПОЛЬЗОВАТЕЛЯ root перед установкой apt. Он успешно собран, и я загрузил его в hub.docker. Затем я изменил значения. yaml, как вы сказали, достигает опубликованного мной изображения, и это круто. Но когда я устанавливаю его с помощью (helm install «airflow» airflow-stable / airflow —пространство имен «airflow» —values ./values.yaml), модули переходят в CrashLoopBackOff и ошибка, и это не работает. Я понятия не имею, почему

4. Я просмотрел журналы модулей, чтобы понять, почему они выходят из строя, и, похоже, при выполнении airflow произошел сбой с сообщением об ошибке: ModuleNotFoundError: нет модуля с именем ‘argcomplete’; который является зависимостью от python. Что очень странно, поскольку я предположительно использую тот же базовый образ, который использовал Helm, просто добавляя свой пакет Linux… Если я попытаюсь включить pip install argcomplete в Dockerfile, он скажет, что он уже есть, как и ожидалось. Может ли это быть связано с тем, какой пользователь будет установлен по умолчанию после расширения образа Airflow?