我知道这个问题有点老了,但我想我会分享我在尝试使用 python/kubernetes attach/exec 进行几个调试案例时发现的内容(因为在我能找到的任何地方都没有记录)。
据我所知,关键在于使关键字参数与实际容器配置相匹配,而不是您希望容器执行的操作。
使用 kubectl run 创建 pod 时,如果您不使用 -i --tty 标志(指示交互式/TTY 分配),然后尝试将 tty 或 stdin 标志设置为函数,然后你会得到一个神秘的 500 错误,没有其他调试信息。如果您需要使用stdin 和tty 并且您正在使用配置文件(而不是运行),请确保您使用set the stdin and tty flags to true in spec.containers。
在运行resp.readline_stdout() 时,如果您得到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 的调用。你可以看到这个issue on GitHub 和this example code 来帮助你克服那部分。
这是我的例子: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 命令中是必不可少的,否则调用将无限期阻塞。
我知道这可能比您想要的更多信息,但希望至少其中一些信息会对您有所帮助。