gpt4 book ai didi

kubernetes - 容器化 kubelet 和本地磁盘卷生命周期

转载 作者:行者123 更新时间:2023-12-02 12:29:06 25 4
gpt4 key购买 nike

平台:OEL 7.7 + kube 1.15.5 + docker 19.03.1

我们正在使用容器化 kubelet 方法在 k8s 上构建一个纠删码对象存储。我们很难提出可行的磁盘生命周期方法。就像现在一样,我们必须为 kubelet 提供一个“extra_binds”参数,该参数指定我们的 block 设备安装的基本安装点。 (每个节点 80 个 SSD,格式化为 ext4)

这一切都很好。创建 PV 和部署应用程序工作正常。当 PVC 被删除并且我们想要清理已使用的磁盘并使磁盘再次可用时,我们的问题就出现了。

到目前为止,唯一可行的方法是封锁该节点,从 kubelet 中删除额外的绑定(bind),反弹节点,重新配置 block 设备,重新添加 kubelet 绑定(bind)。显然,这对于生产来说太笨重了。对于初学者来说,弹跳 kubelet 不是一种选择。

一旦使用了 PV,就会锁定这个 block 设备,即使在裸机系统上检查 lsof 会显示未打开的句柄。我无法在设备上卸载或创建新文件系统。仅仅弹跳 kubelet 并不能释放“锁”。

任何人都使用容器化的 Kubernetes 控制平面和以类似方式使用本地磁盘的应用程序?有人找到解决此问题的可行方法吗?

我们的长期计划是编写一个管理磁盘的运算符(operator),但即使有一个运算符(operator),我也看不出它如何缓解这个问题。

谢谢你的帮助,

最佳答案

先看看你的 Finalizers :

$ kubectl describe pvc <PVC_NAME> | grep Finalizers
$ kubectl describe pv <PV_NAME> | grep Finalizers

如果它们设置为 Finalizers: [kubernetes.io/pvc-protection] ( explained here ) 这意味着它们受到保护,您需要对其进行编辑,例如使用:
$ kubectl patch pvc <PVC_NAME> -p '{"metadata":{"finalizers":null}}'
至于强行删除 PersistentVolumes你可以试试
$ kubectl delete pv <PV_NAME> --force --grace-period=0
另请查看 VolumeAttachment还存在 $ kubectl get volumeattachment因为他们可能会被阻止。

我还记得堆栈上存在问题 Kubernetes PV refuses to bind after delete/re-create声明 pv持有 uidpvc这是声称的。
您可以通过显示整个 yaml 来检查。的 pv :
$ kubectl get pv <PV_NAME> -o yaml并寻找:
  claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: packages-pvc
namespace: default
resourceVersion: "10218121"
uid: 1aede3e6-eaa1-11e9-a594-42010a9c0005

您需要提供有关您的 k8s 集群和 pv 的更多信息。 , pvc配置,所以我可以更深入地研究甚至测试它。

关于kubernetes - 容器化 kubelet 和本地磁盘卷生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60248945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com