Как запустить команду в другом модуле в другом пространстве имен от сотрудника Airflow в кластере Kubernetes - PullRequest
0 голосов
/ 27 мая 2019

Я хочу запустить команду papermill в модуле и получить ошибки (если есть).Это должно быть сделано от работника Airflow, использующего bash operator i Airflow.

Я попытался выполнить команду по мере необходимости, я попытался запустить несколько команд bash от моего собственного работника, команды, которые должны были бытьвыполнено внутри рабочего.Но это только дает мне идею, что что-то подобное возможно.Хотя, если есть какой-то лучший подход, который бы разрешил это , я весь в ушах.

Запущенная команда bash:

papermill check1.ipynb check1_output.ipynb -p params '{"aviral":"srivastava", "apoorv":"srivastava"}'

Вручную, яexec в моем модуле, а затем выполните эту команду.Я хочу сделать это командой bash в dag воздушного потока.

1 Ответ

0 голосов
/ 27 мая 2019

Чтобы использовать kubectl из pod, вам необходимо иметь двоичные файлы в вашем pod.

. Вы можете Создать образ Docker с установкой kubectl.

Я думаю, что Dockerfile может выглядеть так:

FROM ubuntu:14.04

# Install.
RUN \
  sed -i 's/# \(.*multiverse$\)/\1/g' /etc/apt/sources.list && \
  apt-get update && \
  apt-get -y upgrade && \
  apt-get install -y build-essential && \
  apt-get install -y software-properties-common && \
  apt-get install -y byobu curl git htop man unzip vim wget && \
  rm -rf /var/lib/apt/lists/* && \
# Installing kubectl using native package management  
  apt-get install -y apt-transport-https && \
  curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - && \
  echo 'deb https://apt.kubernetes.io/ kubernetes-xenial main' | sudo tee -a /etc/apt/sources.list.d/kubernetes.list && \
  apt-get update && \
  apt-get install -y kubectl

# Add files.
ADD root/.bashrc /root/.bashrc
ADD root/.gitconfig /root/.gitconfig
ADD root/.scripts /root/.scripts

# Set environment variables.
ENV HOME /root

# Define working directory.
WORKDIR /root

# Define default command.
CMD ["bash"]

или Определить команду и аргументы для контейнера и использовать его для установки kubectl, когдаpod запускается.

Если вы хотите использовать его из Kubernetes Deployment, часть .yaml может выглядеть следующим образом:

...
spec:
  containers:
  - name: ubuntu-with-kubectl
    image: ubuntu
    command: ["/bin/sh","-c"]
    args:
      - apt-get update && apt-get install -y apt-transport-https;
        curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -;
        echo 'deb https://apt.kubernetes.io/ kubernetes-xenial main' | tee -a /etc/apt/sources.list.d/kubernetes.list;
        apt-get update;
        apt-get install -y kubectl;
...

Вы также можете kubectl exec -it <pod_name> bash вpod и установить вручную, используя это руководство Install and Set kubectl , , но при перезапуске контейнера он пропадет .

...