官方Airflow Helm Chart+KubernetesExecutor环境下日志发送至S3的配置问题
Airflow Helm Chart(KubernetesExecutor)配置S3远程日志完整步骤
前置操作
在Airflow部署的命名空间下创建存储S3凭证的Secret:
kubectl create secret generic airflow-s3-log-secret \ --from-literal=AWS_ACCESS_KEY_ID=你的S3访问密钥ID \ --from-literal=AWS_SECRET_ACCESS_KEY=你的S3访问密钥 \ -n airflow
调整values.yaml配置
1. 注入全局环境变量
所有Airflow组件(WebServer、Scheduler、Worker)都需要读取S3相关配置,在values.yaml中新增env段:
env: - name: AWS_ACCESS_KEY_ID valueFrom: secretKeyRef: name: airflow-s3-log-secret key: AWS_ACCESS_KEY_ID - name: AWS_SECRET_ACCESS_KEY valueFrom: secretKeyRef: name: airflow-s3-log-secret key: AWS_SECRET_ACCESS_KEY - name: S3_LOG_BASE_PATH value: s3://<你的S3存储桶名称>/airflow/logs/ - name: AWS_DEFAULT_REGION value: <你的S3存储桶所在区域,比如cn-north-1>
2. 覆盖Airflow核心日志配置
在values.yaml的config段修改日志相关参数,开启远程日志:
config: logging: # 开启远程日志写入 remote_logging: 'True' # 远程日志存储根路径 remote_base_log_folder: '{{ .Values.env.S3_LOG_BASE_PATH }}' # 关联的AWS连接ID remote_log_conn_id: 'aws_default' # 可选:日志上传到S3后删除本地副本,节省节点存储 delete_local_logs: 'True' # 若使用S3兼容存储(如本地MinIO),新增以下s3段配置 # s3: # endpoint_url: http://<你的MinIO服务地址>:9000 # use_ssl: 'False' # verify: 'False'
3. 预配置AWS连接(可选)
如果不想后续在Airflow WebUI手动创建aws_default连接,可以直接在values.yaml中预注入连接配置:
airflow: connections: - conn_id: aws_default conn_type: aws extra: | { "aws_access_key_id": "{{ .Values.env.AWS_ACCESS_KEY_ID }}", "aws_secret_access_key": "{{ .Values.env.AWS_SECRET_ACCESS_KEY }}", "region_name": "{{ .Values.env.AWS_DEFAULT_REGION }}" }
生效配置
执行Helm升级命令使配置生效:
helm upgrade --install airflow apache-airflow/airflow -f values.yaml -n airflow
验证
任意触发一次测试DAG运行,执行完成后即可在S3存储桶的对应路径下看到按DAG ID、任务ID、执行时间分层存储的日志文件,Airflow WebUI可直接读取S3中的日志内容展示,无需额外适配。
注意事项
- 本地KinD集群测试若使用MinIO替代公有云S3,需确保Airflow所有Pod可访问到MinIO服务地址,根据实际情况调整s3配置段的endpoint、SSL校验参数即可。
- 所用S3凭证需要至少拥有对应存储桶的
s3:PutObject、s3:GetObject、s3:ListBucket权限,否则会出现日志写入/读取失败的问题。
内容的提问来源于stack exchange,提问作者Jorge Nachtigall
相关产品推荐
相关产品推荐

