在 Kubernetes 中运行以下命令来关闭集群时,出现以下错误:
KUBERNETES_PROVIDER=ubuntu./kube-down.sh
rm:无法删除'/var/lib/kubelet/pods/16981b98-a3bb-11e5-99fb-00505622b20d/volumes/kubernetes.io~secret/default-token-0i2n6':设备或资源繁忙
我尝试强行将其移除,但却无法将其移除。
答案1
我认为这是由https://github.com/kubernetes/kubernetes/pull/17315
您可能想检查是否拥有最新的cluster/ubuntu/*
文件。
答案2
如果你想知道这种错误的底层机制是什么,那么看到Device or resource busy
通常意味着在文件系统的某个点上有一个内核持有的“锁”,并且unlink
-ing(那就是系统调用命令rm
用来向内核请求此操作的命令)被阻止,并出现错误条件(EBUSY)。您可以通过运行命令来了解有关系统调用的更多信息strace
如果您想查看所有涉及的系统调用(包括系统调用调用的返回代码)。
在我看来,该路径是 kubelet 管理特定于 pod 的“文件系统式”参数的地方,在这种情况下,发生的事情是每个命名空间都有一个默认服务帐户,然后该帐户会获得一个默认令牌,并且该令牌透明地安装在 pod 容器的文件系统中。错误中提到的路径是 pod 的“内部”文件系统的主机级文件系统位置。因此,在这种情况下,有问题的“锁”是一个挂载点。
基本上,该脚本正在尝试删除该路径(可能是在其自身之后进行清理)并且它仍在使用中(可能 pod 仍在运行),并且它调用的脚本或某些命令没有进行正确的错误检查/处理,所以您最终会看到该错误。