Kubernetes 将ROM、RWO持久卷声明从树内插件迁移到GKE中的csi
我目前有一个ROM、RWO持久卷声明,我在部署中经常将其用作只读卷,在部署缩减为0时,某些作业偶尔会将其用作读写卷来重新填充。然而,由于树内插件将在kubernetes的未来版本中被弃用,我计划使用csi驱动程序将此过程迁移到卷中 为了澄清我目前对此类卷的使用情况,我将使用以下基本思想放置一个yaml配置文件示例: apiVersion:v1 种类:PersistentVolumeClaim 元数据: 名称:测试 规格: storageClassName:标准 访问模式: -现成的 -读写 资源: 请求: 存储:1Gi --- apiVersion:batch/v1 种类:工作 元数据: 名称:测试 规格: 模板: 规格: 容器: -名称:测试 图片:busybox #填充卷 命令: -触碰 -/foo/bar 体积数量: -名称:测试 挂载路径:/foo/ 子路径:foo 卷数: -名称:测试 persistentVolumeClaim: 索赔名称:测试 餐馆政策:永不 --- apiVersion:apps/v1 种类:部署 元数据: 标签: 应用程序:测试 名称:测试 规格: 副本:0 选择器: 火柴标签: 应用程序:测试 模板: 元数据: 标签: 应用程序:测试 规格: 容器: -名称:测试 图片:busybox 命令: -嘘 -“-c” - | #检查卷是否已填充 ls/foo/ #暂时阻止pod退出 睡眠3600 体积数量: -名称:测试 挂载路径:/foo/ 子路径:foo 卷数: -名称:测试 persistentVolumeClaim: 索赔名称:测试 只读:正确 因此,作业将填充卷,随后部署将按比例增加。但是,将持久卷声明中的Kubernetes 将ROM、RWO持久卷声明从树内插件迁移到GKE中的csi,kubernetes,google-kubernetes-engine,Kubernetes,Google Kubernetes Engine,我目前有一个ROM、RWO持久卷声明,我在部署中经常将其用作只读卷,在部署缩减为0时,某些作业偶尔会将其用作读写卷来重新填充。然而,由于树内插件将在kubernetes的未来版本中被弃用,我计划使用csi驱动程序将此过程迁移到卷中 为了澄清我目前对此类卷的使用情况,我将使用以下基本思想放置一个yaml配置文件示例: apiVersion:v1 种类:PersistentVolumeClaim 元数据: 名称:测试 规格: storageClassName:标准 访问模式: -现成的 -读写 资源
storageClassName
字段standard
替换为singlewriter standard
甚至不允许运行作业
这是某种臭虫吗?使用csi驱动程序的卷是否有一些解决方法
如果这是一个bug,我计划稍后迁移到使用sci驱动程序;然而,如果这不是一个bug,我应该如何迁移我当前的工作流,因为树内插件最终将被弃用
编辑:
kubernetes服务器的版本是1.17.9-gke.1504
。至于存储类,它们是标准
和singlewriter标准
默认存储类:
apiVersion:storage.k8s.io/v1
种类:StorageClass
元数据:
标签:
addonmanager.kubernetes.io/mode:EnsureExists
kubernetes.io/cluster-service:“true”
名称:标准
参数:
类型:pd标准
供应人:kubernetes.io/gce-pd
回收策略:删除
卷绑定模式:立即
---
apiVersion:storage.k8s.io/v1
种类:StorageClass
元数据:
注释:
components.gke.io/component-name:pdcsi插件
components.gke.io/component-version:0.5.1
storageclass.kubernetes.io/is-default-class:“true”
标签:
addonmanager.kubernetes.io/mode:EnsureExists
名称:singlewriter标准
参数:
类型:pd标准
供应人:pd.csi.storage.gke.io
回收策略:删除
volumeBindingMode:WaitForFirstConsumer
虽然错误不会显示在作业中,但会显示在pod本身中(这仅适用于singlewriter标准
storage类):
警告失败AttachVolume AttachDetail controller AttachVolume。卷“…”的连接失败:CSI不支持同一个PersistentVolume上的ReadOnlyMany和ReadWriteOnce
您遇到的消息:
警告失败AttachVolume AttachDetail controller AttachVolume。卷“…”的附加失败:CSI不支持同一个PersistentVolume上的ReadOnlyMany和ReadWriteOnce
这不是一个错误。AttachDetail控制器显示此错误,因为它不知道应该在哪个accessMode
中装入卷:
对于[ReadOnlyMany,ReadWriteOnce]PV,外部附加程序根本不知道附件是以只读方式(-many)还是以读写方式(-one)使用
--
我鼓励您查看上面的链接以获得完整的解释
我目前有一个ROM、RWO持久卷声明,我经常在部署中将其用作只读卷,偶尔会被某个作业重新填充,并将其用作读写卷
您可以结合以下指南中的步骤:
- 在GKE中打开
CSI
持久磁盘驱动程序
- 使用
pd.csi.storage.gke.io
provisioner创建一个PVC
(您需要使用storageClassName:singlewriter standard
修改YAML
定义):
引用有关步骤的文档(来自《ReadOnlyMany
指南》),这些步骤应满足您所展示的设置:
在以只读模式使用永久磁盘之前,必须对其进行格式化
要格式化永久磁盘,请执行以下操作:
- 创建永久磁盘或使用
- 格式化磁盘并用数据填充它。要格式化磁盘,您可以:
- 将磁盘引用为Pod中的
卷。这样做会导致GKE自动格式化磁盘,并使Pod能够用数据预填充磁盘。Pod启动时,确保Pod将数据写入磁盘ReadWriteOnce
- 手动将磁盘装载到VM并格式化。将所需的任何数据写入磁盘。有关详细信息,请参阅
- 将磁盘引用为Pod中的
- 卸载并分离磁盘:
- 如果引用了Pod中的磁盘,请删除Pod,等待其终止,然后等待磁盘自动删除