Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes Kubectl排水节点失败:";禁止:节点更新只能更改标签、污染或容量“;_Kubernetes_Kubectl_Azure Aks - Fatal编程技术网

Kubernetes Kubectl排水节点失败:";禁止:节点更新只能更改标签、污染或容量“;

Kubernetes Kubectl排水节点失败:";禁止:节点更新只能更改标签、污染或容量“;,kubernetes,kubectl,azure-aks,Kubernetes,Kubectl,Azure Aks,尝试使用以下方法排空AKS K8s群集上的节点时: kubectl drain ${node_name} --ignore-daemonsets 我得到以下错误: "The Node \"aks-agentpool-xxxxx-0\" is invalid: []: Forbidden: node updates may only change labels, taints, or capacity (or configSource, if the DynamicKubeletConf

尝试使用以下方法排空AKS K8s群集上的节点时:

kubectl drain ${node_name} --ignore-daemonsets

我得到以下错误:

   "The Node \"aks-agentpool-xxxxx-0\" is invalid: []: Forbidden: node updates may only change labels, taints, or capacity (or configSource, if the DynamicKubeletConfig feature gate is enabled)"
是否需要在AKS节点上执行一些额外的操作以允许排水

(上下文:这是我正在编写的自动化脚本的一部分,用于在不停机的情况下排空kubernetes节点以进行维护操作,因此排空显然是一个先决条件)

另一个疑难解答说明:

这个命令是通过Ansible的“shell”模块运行的,但是当该命令直接在BASH中运行时,它可以正常工作

此外,ansible正在通过Jenkins管道运行。调试语句似乎显示:

  • 正确形成和执行的命令
  • 上下文似乎正确(因此可以访问kubeconfig)
  • 可以列出POD(因此kubeconfig处于活动状态且正确)
此命令通过Ansible的“shell”模块运行,但 命令直接在BASH中运行,运行良好

此外,ansible正在通过Jenkins管道运行

很好,你添加了这些信息,因为它完全改变了我们应该从哪个角度来看待你遇到的问题

为了调试而不是运行命令,请尝试运行:

kubectl auth can-i drain node --all-namespaces
直接在
bashshell中
以及通过Ansible的
shell模块

如果这不是权限问题,它至少应该给你一个答案

在这种情况下,可用于调试的其他命令包括:

ls -l .kube/config

cat .kube/config

whoami
最后一个确保Ansible使用相同的
用户
。如果您已经知道它使用不同的
用户
,请尝试以在bash shell中运行脚本时使用的
用户
运行脚本


检查此项后,我们可以继续调试过程。

根据
kubectl node drain
:“``如果有任何POD既不是镜像POD,也不是由ReplicationController、ReplicatSet、DaemonSet、StatefulSet或Job管理,则drain将不会删除任何POD,除非使用--force--如果一个或多个POD的管理资源丢失,force还将允许继续删除因此,
kubectl节点drain#{node_name}--force
应该可以工作。否则,您可能没有权限执行此操作。这次我尝试使用--force标志,但仍然存在相同的错误:``“stderr”:“节点\”aks-agentpool-0010101-0 \“无效:[]:禁止:节点更新只能更改标签、污染或容量(或配置源,如果启用了DynamicCubeletConfig功能门)”`。。。如果是权限,我该如何检查?嗨,马里奥,谢谢你提供的有用信息。因此,通过管道+ansible检查,我得到一个“是”````标准输出“:“检查我可以排水吗?是”,“标准输出线”:[“检查我可以排水吗?是”]````通过bash,我也得到一个“是”。我还在Ansible的shell模块中通过args指定bash的直接路径,以确保它不是特定于shell的行为。您的
Jenkins
设置在集群外部还是集群的一部分?还有ansible?AKS群集使用的身份验证方法是什么?它是纯RBAC还是Azure广告集成版?