Стабильный Helm / airflow - пользовательские значения для развертывания Airflow с Shared Persistent Volume с ошибкой диаграммы Хелма - PullRequest
0 голосов
/ 09 октября 2019

Цель

Я хочу развернуть Airflow в Kubernetes, где модули имеют доступ к одним и тем же группам DAG в общем постоянном томе. Согласно документации (https://github.com/helm/charts/tree/master/stable/airflow#using-one-volume-for-both-logs-and-dags),, мне кажется, что я должен установить и передать эти значения Хелму: extraVolume, extraVolumeMount, persistence.enabled, logsPersistence.enabled, dags.path, logs.path.

Проблема

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

Error: YAML parse error on airflow/templates/deployments-web.yaml: error converting YAML to JSON: yaml: line 69: could not find expected ':'
  • Работает нормально: microk8s.helm install --namespace "airflow" --name "airflow" stable/airflow
  • Не работает :
microk8s.helm install --namespace "airflow" --name "airflow" stable/airflow \
--set airflow.extraVolumes=/home/*user*/github/airflowDAGs \
--set airflow.extraVolumeMounts=/home/*user*/github/airflowDAGs \
--set dags.path=/home/*user*/github/airflowDAGs/dags \
--set logs.path=/home/*user*/github/airflowDAGs/logs \
--set persistence.enabled=false \
--set logsPersistence.enabled=false
  • Также не работает : microk8s.helm install --namespace "airflow" --name "airflow" stable/airflow --values=values_pv.yaml, с values_pv.yaml: https://pastebin.com/PryCgKnC
    • Изменить: Пожалуйста, измените /home/*user*/github/airflowDAGs путь на вашем компьютере, чтобы повторить ошибку.

Проблемы

  1. Может быть, это не так из-за этих строк по умолчанию values.yaml:
## Configure DAGs deployment and update
dags:
  ##
  ## mount path for persistent volume.
  ## Note that this location is referred to in airflow.cfg, so if you change it, you must update airflow.cfg accordingly.
  path: /home/*user*/github/airflowDAGs/dags

Как настроить airflow.cfg в развертывании Kubernetes? В неконтейнерном развертывании Airflow этофайл можно найти в ~/airflow/airflow.cfg.

Строка 69 в airflow.cfg относится к: https://github.com/helm/charts/blob/master/stable/airflow/templates/deployments-web.yaml#L69

Который содержит git. Неправильно ли настроен .yaml, и он пытается использовать git pull, но так как путь к git не указан, это не удается?

Система

  • ОС: Ubuntu 18.04(одна машина)
  • MicroK8s: v1.15.4 Rev: 876
  • microk8s.kubectl version: v1.15.4
  • microk8s.helm version: v2.14.3

Вопрос

Как правильно передать правильные значения в диаграмму Airflow Helm, чтобы иметь возможность развертывать Airflow в Kubernetes с модулями, имеющими доступ к тем же группам DAG и журналам на общем постоянном томе?

1 Ответ

0 голосов
/ 11 октября 2019

Сделайте это с файлом yaml

Так что, если мы подумаем об использовании values.yaml, возникнет проблема, потому что вы отредактировали его неправильно.

extraVolumeMounts: home/*user*/github/airflowDAGs
  ## Additional volumeMounts to the main containers in the Scheduler, Worker and Web pods.
  # - name: synchronised-dags
  #   mountPath: /usr/local/airflow/dags
  extraVolumes: home/*user*/github/airflowDAGs
  ## Additional volumes for the Scheduler, Worker and Web pods.
  # - name: synchronised-dags
  #   emptyDir: {}

Вы не можете простоПередайте путь таким образом, если extraVolumeMounts для работы нужно name и mounthPath , поэтому у вас есть #, так что вы можете просто удалить их, добавить свои значения, и они должны работать.

Это должно выглядеть следующим образом

 extraVolumeMounts:
 - name: synchronised-dags
   mountPath: /usr/local/airflow/dags
 extraVolumes:
 - name: synchronised-dags
   emptyDir: {}

Вот как вы можете его установить:

1.Используйте рулевое управление для загрузки диаграммы воздушного потока на ваш компьютер

helm fetch stable/airflow --untar

2.Edit airflow / values.yaml extraVolumeMount и extraVolume , как в примере выше, просто добавьте свое имя и путь.

nano/vi/vim airflow/values.yaml

3.Вы можете изменить остальныевещи в airflow / values.yaml и используйте:

helm install ./airflow --namespace "airflow" --name "airflow" -f ./airflow/values.yaml

ИЛИ

используйте эту команду только с отредактированными extraVolumeMount и extraVolume

helm install --set dags.path=/home/user/github/airflowDAGs/dags --set logs.path=/home/user/github/airflowDAGs/logs --set persistence.enabled=false --set logsPersistence.enabled=false  ./airflow --namespace "airflow" --name "airflow" -f ./airflow/values.yaml

Результат:

NAME:   airflow
LAST DEPLOYED: Fri Oct 11 09:18:46 2019
NAMESPACE: airflow
STATUS: DEPLOYED

RESOURCES:
==> v1/ConfigMap
NAME                  DATA  AGE
airflow-env           20    2s
airflow-git-clone     1     2s
airflow-postgresql    0     2s
airflow-redis         3     2s
airflow-redis-health  3     2s
airflow-scripts       1     2s

==> v1/Deployment
NAME               READY  UP-TO-DATE  AVAILABLE  AGE
airflow-flower     0/1    1           0          1s
airflow-scheduler  0/1    1           0          1s
airflow-web        0/1    1           0          1s

==> v1/PersistentVolumeClaim
NAME                STATUS   VOLUME    CAPACITY  ACCESS MODES  STORAGECLASS  AGE
airflow-postgresql  Pending  standard  2s

==> v1/Pod(related)
NAME                                 READY  STATUS             RESTARTS  AGE
airflow-flower-5596b45d58-wrg74      0/1    ContainerCreating  0         1s
airflow-postgresql-75bf7d8774-dxxjn  0/1    Pending            0         1s
airflow-redis-master-0               0/1    ContainerCreating  0         1s
airflow-scheduler-8696d66bcf-bwm2s   0/1    ContainerCreating  0         1s
airflow-web-84797489f5-8wzsm         0/1    ContainerCreating  0         1s
airflow-worker-0                     0/1    Pending            0         0s

==> v1/Secret
NAME                TYPE    DATA  AGE
airflow-postgresql  Opaque  1     2s
airflow-redis       Opaque  1     2s

==> v1/Service
NAME                    TYPE       CLUSTER-IP   EXTERNAL-IP  PORT(S)   AGE
airflow-flower          ClusterIP  10.0.7.168   <none>       5555/TCP  1s
airflow-postgresql      ClusterIP  10.0.8.62    <none>       5432/TCP  2s
airflow-redis-headless  ClusterIP  None         <none>       6379/TCP  1s
airflow-redis-master    ClusterIP  10.0.8.5     <none>       6379/TCP  1s
airflow-web             ClusterIP  10.0.10.176  <none>       8080/TCP  1s
airflow-worker          ClusterIP  None         <none>       8793/TCP  1s

==> v1/ServiceAccount
NAME     SECRETS  AGE
airflow  1        2s

==> v1/StatefulSet
NAME            READY  AGE
airflow-worker  0/1    1s

==> v1beta1/Deployment
NAME                READY  UP-TO-DATE  AVAILABLE  AGE
airflow-postgresql  0/1    1           0          1s

==> v1beta1/PodDisruptionBudget
NAME         MIN AVAILABLE  MAX UNAVAILABLE  ALLOWED DISRUPTIONS  AGE
airflow-pdb  N/A            1                0                    2s

==> v1beta1/Role
NAME     AGE
airflow  2s

==> v1beta1/RoleBinding
NAME     AGE
airflow  2s

==> v1beta2/StatefulSet
NAME                  READY  AGE
airflow-redis-master  0/1    1s


NOTES:
Congratulations. You have just deployed Apache Airflow
   export POD_NAME=$(kubectl get pods --namespace airflow -l "component=web,app=airflow" -o jsonpath="{.items[0].metadata.name}")
   echo http://127.0.0.1:8080
   kubectl port-forward --namespace airflow $POD_NAME 8080:8080

2. Open Airflow in your web browser
...