kubectl exec 返回“握手状态 500”

3h4*_*h4x 2 python kubernetes

我在 AWS 上使用 python kubernetes 3.0.0 库和 kubernetes 1.6.6。

我的豆荚可以很快消失。有时,当我尝试执行它们时,我会收到 ApiExceptionHandshake status 500错误状态。

这种情况正在发生in cluster configuration以及kube config

当 pod/container 不存在时,我会收到404错误,这是合理的,但却500Internal Server Error。我在找到错误的地方没有发现任何500错误。kube-apiserver.log404

这是什么意思,有人可以指出我正确的方向吗?

Top*_*her 6

我知道这个问题有点老了,但我想我会分享我在尝试使用 python/kubernetes Attach/exec 进行几个调试案例时发现的内容(因为这在我能找到的任何地方都没有记录)。

据我所知,这都是为了使关键字参数与实际的容器配置相匹配,而不是您希望容器执行的操作。

使用 创建 pod 时kubectl run,如果您不使用-i --tty标志(指示交互式/TTY 分配),然后尝试在函数中设置ttystdin标志,那么您将收到一个神秘的 500 错误,并且没有其他调试信息。True如果您需要使用stdinandtty并且您正在使用配置文件(而不是运行),那么请确保将and标志设置为instdinttytruespec.containers

运行时resp.readline_stdout(),如果得到 a OverflowError: timestamp too large to convert to C _PyTime_t,请设置关键字参数timeout=<any integer>。默认情况下,超时变量默认为 None,这在该函数中是无效值。

如果运行 Attach/exec 命令并收到 APIException 和状态代码 0(错误),请Reason: hostname 'X.X.X.X' doesn't match either of...注意,似乎与 Python 2 不兼容。适用于 Python 3。最终应该修补。

我可以确认当 pod 不存在时,会通过 ApiException 抛出 404 代码。

如果您收到一个神秘的错误upgrade request required,指出 ,请注意您需要使用该kubernetes.stream.stream函数来包装对 Attach/exec 的调用。您可以在 GitHub 上查看此问题以及此示例代码,以帮助您克服该部分。

这是我的例子:resp = kubernetes.stream.stream(k8s.connect_get_namespaced_pod_attach, name='alpine-python-2', namespace="default", stderr=True, stdin=True, stdout=True, tty=True, _preload_content=False)

请注意,命令_preload_content=False中的 是必需的attach,否则调用将无限期地阻塞。

我知道这可能比您想要的信息更多,但希望至少其中一些能对您有所帮助。