我们的场景下用 k8s 启动容器校验用户的 sql 是否正确,每个用户一个容器,可能同时有成百上千个用户在线,都通过 kubectl 在不同容器中执行脚本,偶发出现如下问题,困扰了许久没找到解决方案,请教 v 友们有没有熟悉这块的?不胜感激!
command:
kubectl exec mysql-8140296 bash run_sql.sh
output:
error: unable to upgrade connection: <head>
<title>Error response</title>
</head>
<body>
<h1>Error response</h1>
<p>Error code 501.
<p>Message: Unsupported method ('POST').
<p>Error code explanation: 501 = Server does not support this operation.
</body>
1
calmzhu 2022-02-26 22:18:54 +08:00
同时上千条 kubectl 跑?
建议先看下这个报错是哪一层返回的。 |
2
jingslunt 2022-02-26 22:38:42 +08:00 via iPhone
kubectl exe pod — bash test.sh
两个中横杠要加,中断后面的参数影响到前面的 kubectl 你这个 sql 是通过 api post 进去的,为什么不直接用数据库语句写入。 api 操作如果存在跨域的时候,需要允许 POST |
3
Pythondr 2022-02-26 22:39:07 +08:00 via iPhone 1
Kubectl 本质是调用 APISERVER 的接口,这一层本身就是有限频,而且这一层是用来控制集群的,不是让你用来跑业务的……
|
4
weishao666 OP @Pythondr 有试过改用 kubernetes-client 包,通过 apiserver 的 exec 端点,也会偶发的出现连接失败的情况
|
5
weishao666 OP @calmzhu 是的,业务场景需要。没太理解老哥的意思,对 k8s 还不是很熟悉,我理解这个『 Server does not support this operation 』应该也只能是 apiserver 了吧,我们的场景下没有其他 Server
|
6
weishao666 OP @jingslunt 中横杠是有加的,我任务对问题描述影响不大去掉了。SQL 不直接数据库导入是业务限制。『 api 操作如果存在跨域的时候,需要允许 POST 』这个不应该是 apiserver 层面的配置问题,因为问题只是偶发
|
7
calmzhu 2022-03-02 20:00:58 +08:00
@weishao666
kube-system 下的所有 pod.mysql-xxxx pod 的日志搜索一下 501 apiServer 前面会有代理。后面会有 controller 等。apiServer 只是一个组件。可能其他组件传过来的。 |
8
weishao666 OP @calmzhu 好的,我试试,谢谢建议~
|