我想在共享持久卷中的Pod可以访问相同DAG的Kubernetes上部署Airflow。
根据文档(https://github.com/helm/charts/tree/master/stable/airflow#using-one-volume-for-both-logs-and-dags),看来我必须设置并将以下值传递给Helm:extraVolume
,extraVolumeMount
,persistence.enabled
,logsPersistence.enabled
,{ {1}},dags.path
。
我在安装官方Helm图表时传递的任何自定义值都会导致类似以下错误:
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
:https://pastebin.com/PryCgKnC
values_pv.yaml
更改为计算机上的路径以复制错误。/home/*user*/github/airflowDAGs
中的以下几行,可能会出错:values.yaml
如何在Kubernetes部署中配置## 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部署中,可以在airflow.cfg
中找到此文件。
~/airflow/airflow.cfg
中的第69行是指:https://github.com/helm/charts/blob/master/stable/airflow/templates/deployments-web.yaml#L69 其中包含airflow.cfg
。 git
是否配置错误,并且错误地尝试使用.yaml
,但是由于未指定git路径,因此失败了?
git pull
:v1.15.4 microk8s.kubectl version
:v2.14.3 我该如何正确地将正确的值传递给Airflow Helm图表,以便能够在Kubernetes上部署Airflow,并且Pod可以访问相同的DAG并在共享的持久卷上登录?
答案 0 :(得分:0)
因此,如果我们考虑使用values.yaml,则会出现问题,因为您编辑的方式错误。
public static void createPdf_PageType(String baseUri, String[] src, String dest, PageSize pageSize, boolean rotate) throws IOException {
ConverterProperties properties = new ConverterProperties();
properties.setBaseUri(baseUri);
PdfWriter writer = new PdfWriter(dest);
PdfDocument pdf = new PdfDocument(writer);
PdfViewerPreferences preferences = new PdfViewerPreferences();
preferences.setPrintScaling(PdfViewerPreferencesConstants.NONE);
pdf.getCatalog().setViewerPreferences(preferences);
PdfMerger merger = new PdfMerger(pdf);
log.info("Generating PDF");
for (String html : src) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfDocument temp = new PdfDocument(new PdfWriter(baos));
if(rotate) {
temp.setDefaultPageSize(pageSize.rotate()); /** Page Size and Orientation */
} else {
temp.setDefaultPageSize(pageSize); /** Page Size and Orientation */
}
HtmlConverter.convertToPdf(html, temp, properties);
temp = new PdfDocument(new PdfReader(new ByteArrayInputStream(baos.toByteArray())));
merger.merge(temp, 1, temp.getNumberOfPages());
temp.close();
}
// pdf.getCatalog().setViewerPreferences(new PdfViewerPreferences().setPrintScaling(PdfViewerPreferences.PdfViewerPreferencesConstants.NONE));
pdf.close();
log.info("PDF Generated");
}
如果extraVolumeMounts需要 name 和 mounthPath 起作用,您不能仅仅传递这样的路径,这就是在那里拥有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: {}
的原因,因此您可以只需删除它们,添加您的值即可使用。
应该看起来像这样
#
这就是您安装它的方式:
1。使用头盔抓取功能将气流图下载到您的电脑上
extraVolumeMounts:
- name: synchronised-dags
mountPath: /usr/local/airflow/dags
extraVolumes:
- name: synchronised-dags
emptyDir: {}
2。像上面的示例一样编辑airflow / values.yaml extraVolumeMount and extraVolume,只需添加名称和路径即可。
helm fetch stable/airflow --untar
3。您可以在airflow / values.yaml中更改其余内容并使用:
nano/vi/vim airflow/values.yaml
OR
仅在extraVolumeMount和extraVolume修改后使用此命令
helm install ./airflow --namespace "airflow" --name "airflow" -f ./airflow/values.yaml
结果:
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
答案 1 :(得分:0)
不确定是否已解决此问题,但是如果您还没有解决,我认为有一种非常简单的方法可以解决您的工作。
所有部署,服务和Pod都需要持久的卷信息-它在本地驻留以及在每种kube类型中应该存在的位置。看起来图表的values.yaml提供了一种方法。我只会在下面用dags显示它,但我认为它也应该与日志大致相同。
因此,基本步骤是:1)告诉kube“ volume”(目录)在您的计算机上的位置,2)告诉kube将其放在容器中的位置,以及3)告诉airflow在哪里寻找损坏的位置。因此,您可以从头盔存储库中复制values.yaml文件,并使用以下内容进行更改。
airflow
部分首先,您需要创建一个包含本地目录中项目的卷(这是下面的extraVolumes
)。然后,需要将其挂载-幸运的是,将其放在此处会将其模板化到所有kube文件中。创建该卷后,您应该告诉它安装dags
。因此,基本上,extraVolumes
创建了卷,而extraVolumeMounts
安装了卷。
airflow:
extraVolumeMounts: # this will get the volume and mount it to that path in the container
- name: dags
mountPath: /usr/local/airflow/dags # location in the container it will put the directory mentioned below.
extraVolumes: # this will create the volume from the directory
- name: dags
hostPath:
path: "path/to/local/directory" # For you this is something like /home/*user*/github/airflowDAGs/dags
airflow:
config:
AIRFLOW__CORE__DAGS_FOLDER: "/usr/local/airflow/dags" # this needs to match the mountPath in the extraVolumeMounts section
values.yaml
文件。helm install --namespace "airflow" --name "airflow" -f local/path/to/values.yaml stable/airflow
最后,这应该允许气流在dags文件夹中查看您的本地目录。如果添加一个新文件,它应该显示在容器中-尽管可能需要一分钟才能显示在UI中-我不认为dagbag进程会一直运行吗?无论如何,希望这会有所帮助!