# 编写易移植的 Pvc

原文：[Writing Portable Configuration](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#writing-portable-configuration)

如果你在编写配置模板或者是一个可能在很多不同集群下运行的配置，要在其中包含持久存储，我们提供一些建议：

- 在配置包含 PVC 对象（和 Deployments、COnfigMap 等并列）。
- 考虑到可能的权限限制，建议不要包含 PV 对象
- 编写模板的话，建议给用户指定 Storage Class 的选项：
  - 如果用户提供了一个 Storage Class，并且集群版本在 1.4 以上，把这个 Storage Class Name 放入 PVC 的 `volume.beta.kubernetes.io/storage-class` 标注之中，如果集群中启用了指定的 Storage Class，PVC 就会成功匹配到相应资源。
  - 如果用户没有提供 Storage Class，或者集群版本为 1.3，那么就在 PVC 中添加 `volume.alpha.kubernetes.io/storage-class: default` 标注。
    - PV 会自动在集群中为用户提供平台指定的缺省 PV。
    - 虽然字面上是 alpha，但实际上提供的是 beta 级别的支持。
    - 不要使用`volume.beta.kubernetes.io/storage-class`，任何值包括空字符串，都会阻止 DefaultStorageClass 控制的运行。
- 如果 PVC 创建一段时间之后，还没能绑定，需要把这一信息呈现给用户，因为这可能是因为这个集群没有动态存储供给的支持（这种情况下，需要创建符合 PVC 要求的 PV），或者个集群没有存储系统（这种情况下就无法运行指定的 PVC 了）。
- 未来我们希望让多数集群具备 DefaultStorageClass，并有提供某种可用的存储。然而，让一种 Storage Class 适应所有的集群是很难的，所以还是不建议直接在 PVC 中设置缺省的 Storage Class。Alpha 标注会在未来失效，但那时候未进行设置的 storageClass 字段就会实现期望的功能了（1.6）。
