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 将ROM、RWO持久卷声明从树内插件迁移到GKE中的csi_Kubernetes_Google Kubernetes Engine - Fatal编程技术网

Kubernetes 将ROM、RWO持久卷声明从树内插件迁移到GKE中的csi

Kubernetes 将ROM、RWO持久卷声明从树内插件迁移到GKE中的csi,kubernetes,google-kubernetes-engine,Kubernetes,Google Kubernetes Engine,我目前有一个ROM、RWO持久卷声明,我在部署中经常将其用作只读卷,在部署缩减为0时,某些作业偶尔会将其用作读写卷来重新填充。然而,由于树内插件将在kubernetes的未来版本中被弃用,我计划使用csi驱动程序将此过程迁移到卷中 为了澄清我目前对此类卷的使用情况,我将使用以下基本思想放置一个yaml配置文件示例: apiVersion:v1 种类:PersistentVolumeClaim 元数据: 名称:测试 规格: storageClassName:标准 访问模式: -现成的 -读写 资源

我目前有一个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: 索赔名称:测试 只读:正确 因此,作业将填充卷,随后部署将按比例增加。但是,将持久卷声明中的
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中的
      ReadWriteOnce
      卷。这样做会导致GKE自动格式化磁盘,并使Pod能够用数据预填充磁盘。Pod启动时,确保Pod将数据写入磁盘
    • 手动将磁盘装载到VM并格式化。将所需的任何数据写入磁盘。有关详细信息,请参阅
  • 卸载并分离磁盘:
    • 如果引用了Pod中的磁盘,请删除Pod,等待其终止,然后等待磁盘自动删除