【发布时间】:2021-07-04 03:18:02
【问题描述】:
我正在尝试使用 kubernetes api 重新启动我的 kubernetes 部署 @kubernetes/client-node 库。我没有使用部署规模,因为每个应用程序只需要一个部署(数据库和服务容器)。
我还尝试通过 exec(/sbin/reboot 或 kill)重新启动部署中的单个容器,但它似乎不适用于 nodejs 库,因为它无法升级到 websocket 连接,这是 kubernetes 所需要的exec 端点似乎。另一个想法是通过将比例设置为 0 然后再次设置为 1 来重新启动整个部署。但我没有通过 nodejs 库让它工作。我试图找到一个例子,但没有成功。
滚动重启对我不起作用,因为我的应用程序不支持多个实例。
我试过这样缩放
await k8sApi.patchNamespacedDeploymentScale(`mydeployment-name`, 'default', {
spec: { replicas: 0 },
});
await k8sApi.patchNamespacedDeploymentScale(`mydeployment-name`, 'default', {
spec: { replicas: 1 },
});
并重新启动我尝试过的容器
await coreV1Api.connectPostNamespacedPodExec(
podName,
'default',
'/sbin/reboot',
'web',
false,
false,
false,
false
);
额外输入:
当尝试使用 patchNamespacedDeployment 时,kubernetes api 返回以下错误:
statusCode: 415,
statusMessage: 'Unsupported Media Type',
以及响应正文:
V1Scale {
apiVersion: 'v1',
kind: 'Status',
metadata: V1ObjectMeta {
annotations: undefined,
clusterName: undefined,
creationTimestamp: undefined,
deletionGracePeriodSeconds: undefined,
deletionTimestamp: undefined,
finalizers: undefined,
generateName: undefined,
generation: undefined,
labels: undefined,
managedFields: undefined,
name: undefined,
namespace: undefined,
ownerReferences: undefined,
resourceVersion: undefined,
selfLink: undefined,
uid: undefined
},
spec: undefined,
status: V1ScaleStatus { replicas: undefined, selector: undefined }
尝试执行方法时,我得到以下响应:
kind: 'Status',
apiVersion: 'v1',
metadata: {},
status: 'Failure',
message: 'Upgrade request required',
reason: 'BadRequest',
code: 400
我已经查看了升级请求错误,似乎库不知道这一点,因为库是从函数足迹或其他东西生成的,所以它不知道 websockets。
【问题讨论】:
-
“但我不明白”:你能说得更具体一点吗?它是如何失败的?
-
我将在 5 - 10 分钟内添加更多细节以确保清晰
-
我希望规模化方法能够奏效。或者,如果您更改 pod 规范的任何部分,部署将自行更新(
kubectl rollout restart只是更改注释)。或者,如果您知道只有一个 pod,您可以将其删除。您不应该需要 exec 操作来考虑正常操作中的进程。 -
这个想法对我来说很清楚@david maze,但图书馆的解决方案不是:/ - 为了清楚起见,我在问题的底部添加了一些额外的信息
-
库本身可能存在错误。你为什么不通过plain HTTP Request 试试呢?
标签: kubernetes