我正在 Kubernetes 集群上运行 Apache Airflow,并且在从已删除的 Pod 中检索日志时遇到问题。我可以使用 kubectl 日志轻松地从当前正在运行或最近终止的 pod 获取日志,但我无法从旧的、已删除的 pod 获取日志。
awswrangler==2.19.0
apache-airflow-providers-cncf-kubernetes==4.3.0
apache-airflow-providers-amazon==5.0.0
boto3==1.24.56
gnupg==2.3.1
PyYAML==6.0
这是我尝试过的:
# This works fine and gives me the actual log
kubectl logs my-current-pod-239847283947
# This doesn't work for an old, deleted pod
kubectl logs my-old-pod-928374928374
The second command returns the following error:
Error from server (NotFound): pods "my-old-pod" not found
我知道 Pod 已被删除,但是有没有办法检索其日志或至少配置 Airflow 或 Kubernetes 来保存这些日志以供将来参考?
注意:我使用 AWS 进行存储
任何帮助将不胜感激!
如果 pod 被删除,您将无法访问其日志。
如果您需要日志进行调查,则需要保留 Pod。 Airflow 提供了任务完成后删除 Pod 的选项,您只需禁用删除即可。
对于
apache-airflow-providers-cncf-kubernetes>=7.2.0
:
KubernetesPodOperator(..., on_finish_action='keep_pod')
注意:这一点已更改,因为通常用户不介意成功任务的日志,因此您也可以设置为
on_finish_action='delete_succeeded_pod'
,这将仅删除成功的 pod,从而留下错误的 pod 以供进一步调查。这就是这一变化背后的动机(参见PR)。
对于
apache-airflow-providers-cncf-kubernetes<7.2.0
:
KubernetesPodOperator(..., is_delete_operator_pod=False)
如果您不再需要 Pod,可以使用 kubectl 删除它们。您还可以设置脚本(使用 Airflow 执行)来清理较旧的 pod(例如删除所有早于 X 天的 pod)。