python - 从 GKE 调用 tf.io.gfile 方法时经常出现 DNS 失败 : "Couldn' t resolve host 'www.googleapis.com' "

标签 python tensorflow kubernetes google-kubernetes-engine

我在 Google Kubernetes Engine (GKE) 中设置了一个集群,具有抢占式实例、TPU 支持以及每个节点 1 个容器。

每个容器每天大约两次,我会收到此错误,例如调用tf.io.gfile.glob(...):

tensorflow.python.framework.errors_impl.FailedPreconditionError: Error executing an HTTP request: libcurl code 6 meaning 'Couldn't resolve host name', error details: Couldn't resolve host 'www.googleapis.com' when reading gs://bucket/dir/dir

这只发生在 GKE 中,而不是直接在 Google Cloud 中的计算虚拟机上运行时发生。

这是我应该在 GKE 中期待并处理的事情(例如后退并重试),还是存在某种网络配置问题或其他我可以解决的潜在问题?

最佳答案

由于您的集群只有抢占式实例,系统 Pod 也会(至少)每 24 小时重新启动一次,包括 kube-dns .
您有几个选择:

  1. 在该 GKE 中创建另一个节点池(当然,该节点池不必包含 TPU 节点,您可以尝试使用 n1-standard-1,甚至更便宜的实例)集群来托管关键 Pod(例如 kube-dns),并添加 nodeSelector该节点池的字段到关键部署。例如:
nodeSelector:
        cloud.google.com/gke-nodepool: critical-node-pool
  • kube-dns 副本的数量由 kube-dns-autoscaler 部署决定。增加 kube-dns pod 的数量可以帮助您提高系统对节点抢占的弹性。您可以通过编辑 kube-system 命名空间中的 kube-dns-autoscaler ConfigMap 来增加。
    使用 kubectl edit configmap dns-autoscaler --namespace=kube-system 编辑 ConfigMap。查找这一行:linear: '{"coresPerReplica":256,"min":1,"nodesPerReplica":16}'
    正如所解释的here ,“min”字段表示 DNS 烘焙端的最小数量。您可以增加副本的最小数量,或调整其他参数以满足您的需求。
    如果您使用自动缩放,请勿将 kube-dns 副本的最小数量设置为高于该集群中的最小节点数,因为它会使节点保持在由于部署了 kube-dns,与您的应用程序工作负载无关。
  • 关于python - 从 GKE 调用 tf.io.gfile 方法时经常出现 DNS 失败 : "Couldn' t resolve host 'www.googleapis.com' ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65043696/

    相关文章:

    python - 我想根据其他 Dataframe 中的匹配值填充 Dataframe 中的值

    python - Pandas 在另一个表的范围内查找值

    dns - 无法让kube-dns在Kubernetes上启动

    amazon-web-services - AWS 上的 Kubernetes 和 Calico — 无法 ping 不同节点上的 pod

    python - 在 TensorFlow 中展平数据集

    python - 登录 Facebook 后如何重定向 url?

    tensorflow - 报告未初始化的变量 Tensorboard

    c++ - 在 C++ 中从 Tensorflow 的 .meta 文件加载图形以进行推理

    python-2.7 - 并行执行时,Tensorflow 的 tf.while_loop 是否自动捕获依赖项?

    kubernetes - Minikube 无法从本地注册表中提取图像