python - kubectl exec 返回 `Handshake status 500`

标签 python kubernetes

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

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

集群配置以及kube config都会发生这种情况。

当 pod/container 不存在时,我收到 404 错误,这是合理的,但 500内部服务器错误。我在 kube-apiserver.log 中没有收到任何 500 错误,但我确实找到了 404 错误。

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

最佳答案

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

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

使用 kubectl run 创建 Pod 时,如果您不使用-i --tty标志(指示交互式/TTY 分配),然后尝试设置 ttystdin标记为 True在你的函数中,然后你会得到一个神秘的 500 错误,没有其他调试信息。如果您需要使用stdintty并且您正在使用配置文件(而不是运行),然后确保 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 不存在时,404 代码是通过 ApiException 抛出的。

如果您遇到神秘错误 upgrade request required ,请注意,您需要使用 kubernetes.stream.stream函数来包装对 Attach/exec 的调用。你可以看到这个issue on GitHubthis 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=Falseattach 中至关重要命令,否则调用将无限期地阻塞。

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

关于python - kubectl exec 返回 `Handshake status 500`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46789946/

相关文章:

python - python 打印非字母 ASCII 字符的奇怪行为

kubernetes - 在 GKE 节点上禁用外部 IP

ssl - Kubernetes (kubeadm) 容器中缺少用于传出连接的公共(public)证书

azure - 如何访问安装在 Azure 中运行的托管 k8s 的 ingress-nginx 命名空间中的 Prometheus 和 Grafana?

docker - 如何在 k8s 集群中设置 docker registry?

python - 如何将 python 中的 .place() 方法转换为 java?

python - 如何在数据库关系中直接引用表列?

python - 将独立的 sklearn GaussianMixture 对数概率分数转换为总和为 1 的概率

kubernetes - Helm 安装、Kubernetes - 如何等待 Pod 准备就绪?

python - 操作系统: Maya Python Qt conflict with system libraries