如何以对GKE Kubernetes Master中断具有弹性的方式使用Python Kubernetes客户端?

时间:2018-05-23 05:11:17

标签: kubernetes google-kubernetes-engine

我们有时会使用Python脚本来启动和监控使用Official Python client library for kubernetes在Google Kubernetes Engine上运行的Kubernetes Pod。我们还在几个节点池上启用自动扩展。

根据this,“主VM会自动扩展,升级,备份和保护”。该帖子似乎还表明,当节点数从0-5增加到6+时,控制平面/主VM的某些自动缩放会发生,并且可能在其他时间添加更多节点时发生。

当有很多节点出现时,似乎控制平面有时会像这样下降。当发生这种情况时,我们通过控制平面监视pod的Python脚本经常崩溃,似乎无法找到KubeApi / Control Plane端点,从而触发以下一些异常:

  

ApiException,urllib3.exceptions.NewConnectionError,urllib3.exceptions.MaxRetryError。

处理这种情况的最佳方法是什么?是否存在可能有用的自动缩放事件的任何属性?

澄清我们在Python客户端上做的事情是我们每隔几分钟就通过read_namespaced_pod读取感兴趣的pod的状态,并捕获类似于provided example的异常(此外,我们还尝试捕获底层 urllib 调用的异常)。我们还添加了指数后退的重试,但是在指定的最大重试次数后,即使该数量很高(例如,保持重试> 5分钟),事情也无法恢复和失败。

我们还没有尝试的一件事是在每次重试时重新创建kubernetes.client.CoreV1Api对象。那会有很大的不同吗?

1 个答案:

答案 0 :(得分:0)

当节点池大小发生变化时,根据大小,这可以启动主服务器大小的更改。这是nodepool sizes mapped with the master sizes。在节点池大小需要更大的主节点的情况下,在GCP上启动主节点的自动缩放。在此过程中,主人将无法使用约1-5分钟。请注意,Stackdriver Logging中未提供这些活动。

此时,对主服务器的所有API调用都将失败,包括来自Python API客户端和kubectl的调用。然而,在1-5分钟后,主人应该可用,并且来自客户端和kubectl的呼叫应该可以工作。我能够通过将我的集群从3个节点扩展到20个节点来测试这一点,并且1-5分钟后,主节点不可用。 我从Python API客户端获得了以下错误:

Max retries exceeded with url: /api/v1/pods?watch=False (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at>: Failed to establish a new connection: [Errno 111] Connection refused',)) 

我用kubectl:

“Unable to connect to the server: dial tcp” 

1-5分钟后,主人可用,呼叫成功。无需重新创建 kubernetes.client.CoreV1Api 对象,因为这只是一个API端点。

根据您的描述,您的主人在5分钟后无法访问,这表明您的主人或Python脚本的设置存在潜在问题。要在Python脚本运行时对此进行进一步的故障排除,可以通过运行任何kubectl命令来检查master的可用性。