如何通过nodejs库重新启动kubernetes部署
我正在尝试使用 @kubernetes/客户端节点库。我没有使用部署规模,因为每个应用程序只需要一个部署(db和服务容器) 我还尝试通过exec(/sbin/reboot或kill)重新启动部署中的单个容器,但它似乎无法与nodejs库一起工作,因为它无法升级到websocket连接,而这正是kubernetes exec端点所需要的。另一个想法是通过将比例设置为0然后再次设置为1来重新启动整个部署。但是我不能通过nodejs库让它工作。我试图找到一个这样的例子,但没有成功 滚动重启对我不起作用,因为我的应用程序不支持多个实例 我试着这样来扩大规模如何通过nodejs库重新启动kubernetes部署,kubernetes,Kubernetes,我正在尝试使用 @kubernetes/客户端节点库。我没有使用部署规模,因为每个应用程序只需要一个部署(db和服务容器) 我还尝试通过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 }
尝试exec方法时,我得到以下响应:
kind: 'Status',
apiVersion: 'v1',
metadata: {},
status: 'Failure',
message: 'Upgrade request required',
reason: 'BadRequest',
code: 400
我已经查找了升级请求错误,库似乎没有意识到这一点,因为库是由函数封装或其他内容生成的,因此它没有意识到WebSocket。节点Kubernetes客户端库中似乎确实存在错误。 对于补丁请求,它应该将内容类型设置为“application/json PATCH+json”,但它将内容类型改为“application/json”。 这就是api返回不支持的媒体类型的原因 此外,您需要为发送的正文使用JSON修补程序格式: 要手动设置内容类型,可以将自定义标题传递给函数调用 这对我很有用:
const patch = [
{
op: 'replace',
path: '/spec/replicas',
value: 0,
},
];
await k8sApi.patchNamespacedDeployment(
`mydeployment-name`,
'default',
patch,
undefined,
undefined,
undefined,
undefined,
{ headers: { 'content-type': 'application/json-patch+json' } }
);
在谷歌搜索之后,我发现这个问题从2018年就已经存在了:“但我无法让它工作”:你能说得更具体一点吗?它是如何失败的?我将在5-10分钟内添加更多细节,以确保清晰性。我希望scale方法能够奏效。或者,如果更改pod规范的任何部分,部署将自动更新(
kubectl卷展栏重新启动
仅更改注释)。或者,如果你知道只有一个吊舱,你可以删除它。您不需要在上执行exec操作来考虑正常操作中的进程。这个想法对我来说很清楚@david maze,但使用库的解决方案不是:/-我在问题的底部为clarityPerhaps添加了一些额外的信息库本身有一个bug。你为什么不试着用a?这对我很有效,太好了!