首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >kubernetes上的气流无法取回原木

kubernetes上的气流无法取回原木
EN

Stack Overflow用户
提问于 2020-05-19 23:36:46
回答 4查看 8.8K关注 0票数 4

我的气流服务是以kubernetes部署方式运行的,它有两个容器,一个用于webserver,一个用于scheduler。我正在使用KubernetesPodOperator运行一个带有in_cluster=True参数的任务,它运行良好,甚至可以显示kubectl logs pod-name和所有日志。

但是,airflow-webserver无法获取日志:

代码语言:javascript
复制
*** 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的部署:

代码语言:javascript
复制
# 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),那么所有的工作都是完美的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-04-20 20:43:09

问题在于KubernetesPodExecutor是如何从1.10.10号气流中发射出吊舱的。升级到气流2.0解决了这个问题。

票数 2
EN

Stack Overflow用户

发布于 2021-10-08 05:18:02

创建持久卷并在其上存储日志可能会有所帮助。

代码语言:javascript
复制
--
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

如果您使用舵机图表来部署气流,则可以使用

代码语言:javascript
复制
 --set executor=KubernetesExecutor --set logs.persistence.enabled=true --set logs.persistence.existingClaim=testlog-volume
票数 2
EN

Stack Overflow用户

发布于 2020-05-25 13:15:17

在任务完成后,气流会删除吊舱,会不会是因为吊舱不见了,所以无法访问它们的日志?

试着设置看看是否是这样的,AIRFLOW__KUBERNETES__DELETE_WORKER_PODS=False

当在Kubernetes上运行气流时,我建议使用远程日志(例如s3),这样在删除吊舱时保留日志。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61902573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档