我在AWS上使用的是pythonkubernetes3.0.0库和kubernetes1.6.6。在
我的豆荚可以很快消失。有时当我试图执行它们时,我会得到ApiExceptionHandshake status 500
错误状态。在
这发生在in cluster configuration
以及kube config
上。在
当pod/container不存在时,我得到404
错误,这是合理的,但是500
是{kube-apiserver.log
中找到404
个错误。在
这意味着什么?有人能给我指出正确的方向吗。在
我知道这个问题有点老了,但是我想分享一下我在尝试将python/kubernetes attach/exec用于几个调试案例时发现的问题(因为我在任何地方都找不到这方面的文档)。在
据我所知,这一切都是为了让关键字参数与实际的容器配置相匹配,而不是让容器做什么。在
使用}标志设置为} and ^{} flags to ^{} in ^{} 。在
kubectl run
创建pod时,如果不使用-i tty
标志(表示交互式/TTY分配),然后尝试在函数中将tty
或{True
,那么您将得到一个神秘的500错误,没有其他调试信息。如果您需要使用stdin
和tty
,并且您正在使用一个配置文件(与run相反),那么请确保set the ^{运行
resp.readline_stdout()
时,如果得到OverflowError: timestamp too large to convert to C _PyTime_t
,请设置关键字参数timeout=<any integer>
。默认情况下,timeout变量默认为None,这是该函数中的无效值。在如果您运行attach/exec命令并得到一个APIException和一个状态代码0,错误
Reason: hostname 'X.X.X.X' doesn't match either of...
,请注意,似乎与python2不兼容。在Python3中工作。最终会被修补的。在当pod不存在时,我可以确认404代码是通过ApiException抛出的。在
如果您遇到一个神秘的错误,说
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
命令中是必不可少的,否则调用将无限期阻塞。在我知道这些信息可能比你想要的要多,但希望至少其中一些能对你有所帮助。在
相关问题 更多 >
编程相关推荐