k8 1.12大特性最快最深度解析:Kubernetes CSI快照(下)

  

<强>目标
目前在Kuberentes中,卷插件仅支持配置空的存储卷。随着新的存储功能(包括卷快照和卷克隆)的提出,因此需要支持配置卷时数据填充以。例如,可以从快照源创建卷,也可以从其他卷源克隆卷。根据创建卷的来源,有两种情况:
1,卷配置程序可以识别数据源并能够直接从数据源创建卷(例如,将快照还原到卷或克隆卷)。

  

2卷配置程序无法识别数据源,并创建空存储卷。另一个外部组件(数据填充程序)可以监视卷创建并可以将数据填充/导入到已配置的卷。只有在将数据填充到卷后,PVC才可以被使用。

  

考虑到可以有许多不同类型的数据源用于将数据填充到卷中,因此我们建议在PersistentVolumeClaimSpec中添加一个通用的“数据源”字段来表示不同类型的数据源。

  

PVC API变化
我们将在PVC中添加数据源字段,以表示预先填充到预配置卷的数据源。对于数据源字段,我们定义一个新类型“TypedLocalObjectReference”。它类似于具有附加一字段的“LocalObjectReference”类型,以便支持多种数据源类型。在alpha版本中,此数据源应和PVC位于同一命名空间。此数据源受限于PVC的同一名称空间。
 k8 1.12大特性最快最深度解析:Kubernetes CSI快照(下)> <br/>设计细节<br/>在第一个alpha版本中,我们仅支持来自快照的数据源,因此,数据源中的一种必须是“VolumeSnapshot”。在这种情况下,粮食供应者应该在一个步骤中完成配置卷并填充数据。目前我们还不需要外部数据填充程序。<br/>对于需要外部数据填充程序的其他类型的数据源,卷创建和数据填充是两个单独的步骤。只有在数据准备就绪时,才能将PVC/PV标记为就绪(绑定),用户可以开始使用它们。我们正在制定一个单独的提案,使用“舱准备好+ +”(https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md)中的类似想法来解决这个问题。</p>
  <p>注意:为了使用此数据源功能,用户/管理员需要更新到可以识别快照数据源的新外部供应者。否,则将忽略数据源并创建空存储卷。</p>
  <p>示例<br/>本示例基于kubernetes 1.12版本启动的local-up环境,使用csi-hostpath作为测试插件,来演示快照的创建以及从快照还原数据卷。示例所使用的yaml可在https://github.com/wackxu/csi-snapshot-test找到。<br/>步骤一:下载kubernetes 1.12版本,修改黑客/local-up-cluster.sh脚本,如下:</p>
  <p>第26行修改如下,允许以特权形式启动容器。<br/> <img src=
查看csi-pod,容器全部处于运行状态。
K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(下)
步骤三:创建storageClass,以及pvc,查看pvc以及创建的pv状态,均已处于bound状态。
K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(下)
步骤四:创建pod,使用pv,同时往pv中写入数据。
K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(下)
步骤五:创建volumeSnapshotClass,然后对csi-pvc创建snapshot
K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(下)
查看创建的volumeSnapshotContent具体信息。
K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(下)
验证snapshot是否创建成功。
K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(下)

k8 1.12大特性最快最深度解析:Kubernetes CSI快照(下)