我的气流服务是以kubernetes部署方式运行的,它有两个容器,一个用于webserver,一个用于scheduler。我正在使用KubernetesPodOperator运行一个带有in_cluster=True参数的任务,它运行良好,甚至可以显示kubectl logs pod-name和所有日志。
但是,airflow-webserver无法获取日志:
*** Log file does not exist: /tmp/logs/dag_name/task_name/2020-05-19T23:17:33.455051+00:00/1.log
*** Fetching from: http://pod-name-7dffbdf877-6mhrn:8793/log/dag_name/task_name/2020-05-19T23:17:33.455051+00:00/1.log
*** Failed to fetch log file from worker. HTTPConnectionPool(host='pod-name-7dffbdf877-6mhrn', port=8793): Max retries exceeded with url: /log/dag_name/task_name/2020-05-19T23:17:33.455051+00:00/1.log (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fef6e00df10>: Failed to establish a new connection: [Errno 111] Connection refused'))似乎吊舱无法连接到8793端口上的气流测井服务。如果我将kubectl exec bash放入容器中,则可以在端口8080上卷曲本地主机,但不能在80和8793上。
Kubernetes的部署:
# Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: pod-name
namespace: airflow
spec:
replicas: 1
selector:
matchLabels:
app: pod-name
template:
metadata:
labels:
app: pod-name
spec:
restartPolicy: Always
volumes:
- name: airflow-cfg
configMap:
name: airflow.cfg
- name: dags
emptyDir: {}
containers:
- name: airflow-scheduler
args:
- airflow
- scheduler
image: registry.personal.io:5000/image/path
imagePullPolicy: Always
volumeMounts:
- name: dags
mountPath: /airflow_dags
- name: airflow-cfg
mountPath: /home/airflow/airflow.cfg
subPath: airflow.cfg
env:
- name: EXECUTOR
value: Local
- name: LOAD_EX
value: "n"
- name: FORWARDED_ALLOW_IPS
value: "*"
ports:
- containerPort: 8793
- containerPort: 8080
- name: airflow-webserver
args:
- airflow
- webserver
- --pid
- /tmp/airflow-webserver.pid
image: registry.personal.io:5000/image/path
imagePullPolicy: Always
volumeMounts:
- name: dags
mountPath: /airflow_dags
- name: airflow-cfg
mountPath: /home/airflow/airflow.cfg
subPath: airflow.cfg
ports:
- containerPort: 8793
- containerPort: 8080
env:
- name: EXECUTOR
value: Local
- name: LOAD_EX
value: "n"
- name: FORWARDED_ALLOW_IPS
value: "*"注意:如果气流是在dev环境中运行的(本地而不是kubernetes),那么所有的工作都是完美的。
发布于 2021-04-20 20:43:09
问题在于KubernetesPodExecutor是如何从1.10.10号气流中发射出吊舱的。升级到气流2.0解决了这个问题。
发布于 2021-10-08 05:18:02
创建持久卷并在其上存储日志可能会有所帮助。
--
kind: PersistentVolume
apiVersion: v1
metadata:
name: testlog-volume
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 2Gi
hostPath:
path: /opt/airflow/logs/
storageClassName: standard
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: testlog-volume
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
storageClassName: standard如果您使用舵机图表来部署气流,则可以使用
--set executor=KubernetesExecutor --set logs.persistence.enabled=true --set logs.persistence.existingClaim=testlog-volume发布于 2020-05-25 13:15:17
在任务完成后,气流会删除吊舱,会不会是因为吊舱不见了,所以无法访问它们的日志?
试着设置看看是否是这样的,AIRFLOW__KUBERNETES__DELETE_WORKER_PODS=False
当在Kubernetes上运行气流时,我建议使用远程日志(例如s3),这样在删除吊舱时保留日志。
https://stackoverflow.com/questions/61902573
复制相似问题