查看原文
其他

K8S 1.26 跨命名空间存储数据源实践详解

Hitachi Vantara 进击云原生 2024-02-25

关注公众号并添加到“星标⭐”,防止错过消息

后台回复【资料包】获取学习资料

手把手教你搭建监控告警系统

上个月发布的 Kubernetes v1.26 引入了一项 alpha 功能,允许您为 PersistentVolumeClaim 指定数据源,即使源数据属于不同的命名空间。启用新功能后,您可以在新 PersistentVolumeClaim 的 dataSourceRef字段中指定 namespace。一旦 Kubernetes 检查访问是正常的,新的 PersistentVolume 就可以从其他命名空间中指定的存储源填充其数据。

在 Kubernetes v1.26 之前,如果您的集群启用了该AnyVolumeDataSource功能,您已经可以从同一集群中的相同命名空间数据源配置新卷。但是,这仅适用于同一命名空间中的数据源,因此用户无法使用其他命名空间中的数据源声明来供给 PersistentVolume。为了解决这个问题,Kubernetes v1.26 在 PersistentVolumeClaim API 的dataSourceRef字段中添加了一个新的 alpha namespace字段。

怎么运行?

一旦 csi-provisioner 发现指定的数据源dataSourceRef具有非空 namespace 名称,它会检查 PersistentVolumeClaim 字段.spec.dataSourceRef.namespace 指定的命名空间内的所有引用授权,以查看访问数据源是否被允许。如果有任何 ReferenceGrant 允许访问,则 csi-provisioner 会从数据源中提供一个卷。

实践一下

使用跨命名空间卷配置需要以下内容:

  • 为 kube-apiserver 和 kube-controller-manager 启用AnyVolumeDataSourceCrossNamespaceVolumeDataSource 功能门[1]
  • 为特定VolumeSnapShot控制器安装 CRD
  • 安装 CSI Provisioner 控制器并启用CrossNamespaceVolumeDataSourcefeature gate
  • 安装 CSI 驱动程序
  • 为 ReferenceGrants 安装 CRD

结合起来

要查看其工作原理,您可以安装示例并进行试用。此示例通过 prod 命名空间中的 VolumeSnapshot 在 dev 命名空间中创建 PVC。这是一个简单的例子。对于实际使用过程中,您可能想要使用更复杂的方法。

这个例子假设

  • 您的 Kubernetes 集群已部署,且AnyVolumeDataSourceCrossNamespaceVolumeDataSource功能门控已启用
  • 有两个命名空间,dev 和 prod
  • CSI 驱动程序已部署
  • prod命名空间中存在一个名为new-snapshot-demo的现有 VolumeSnapshot
  • ReferenceGrant CRD(来自 Gateway API 项目)已经部署

Grant ReferenceGrants 对 CSI Provisioner 的读取权限

仅当 CSI 驱动程序具有CrossNamespaceVolumeDataSource控制器功能时才需要访问 ReferenceGrants 。对于此示例,外部供应商需要 referencegrants (gateway.networking.k8s.ioAPI 组)的getlistwatch 权限。

  - apiGroups: ["gateway.networking.k8s.io"]
    resources: ["referencegrants"]
    verbs: ["get", "list", "watch"]

为 CSI Provisioner 启用 CrossNamespaceVolumeDataSource feature gate

添加--feature-gates=CrossNamespaceVolumeDataSource=true到 csi-provisioner 命令行。例如,使用此清单片段重新定义容器:

      - args:
        - -v=5
        - --csi-address=/csi/csi.sock
        - --feature-gates=Topology=true
        - --feature-gates=CrossNamespaceVolumeDataSource=true
        image: csi-provisioner:latest
        imagePullPolicy: IfNotPresent
        name: csi-provisioner

创建一个 ReferenceGrant

这是 ReferenceGrant 示例的清单。

apiVersion: gateway.networking.k8s.io/v1beta1
kind: ReferenceGrant
metadata:
  name: allow-prod-pvc
  namespace: prod
spec:
  from:
  - group: ""
    kind: PersistentVolumeClaim
    namespace: dev
  to:
  - group: snapshot.storage.k8s.io
    kind: VolumeSnapshot
    name: new-snapshot-demo

使用跨命名空间数据源创建 PersistentVolumeClaim

Kubernetes 在 dev 上创建一个 PersisentVolumeClaim,而 CSI 驱动程序从 prod 上的快照填充在 dev 上使用的 PersisentVolume

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: example-pvc
  namespace: dev
spec:
  storageClassName: example
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  dataSourceRef:
    apiGroup: snapshot.storage.k8s.io
    kind: VolumeSnapshot
    name: new-snapshot-demo
    namespace: prod
  volumeMode: Filesystem

总结

该增强功能,建议阅读 Provision volumes from cross-namespace snapshots[2]包括有关此功能的历史和技术实现的大量详细信息。

参考资料

[1]

功能门: https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/

[2]

Provision volumes from cross-namespace snapshots: https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/3294-provision-volumes-from-cross-namespace-snapshots

作者:Hitachi Vantara

出处:https://goo.gs/a2qjj
译者:#公众号:进击云原生

- END -




后台回复“
加群”,带你进入高手交流群
推荐阅读
Kubernetes 1.26 正式发布,所有变化都在这儿了!
10 张图详解 K8S 中部署 Ceph 与功能测试实战
使用 Vagrant + Kubespray 快速初始化 K8S 集群
万字长文细讲分布式存储系统 Ceph 实战操作
19 张图详细介绍分布式存储系统 Ceph 环境部署
K8S 1.26 这个新特性,支持大规模并行批处理工作负载
Docker Desktop 4.15 正式发布,这些新功能值得看
图解 K8S 1.26 新功能 Pod 调度就绪特性解析保姆级 Prometheus PromQL 讲解与实战操作
38 张图硬核高性能服务器架构设计与调优6 张配图通俗易懂说透 K8S 请求和限制18 张图 Java 容器化最佳实践总结17 张图实战 + 理清 K8S 网络排错思路,硬核!16 张图硬核讲解 Kubernetes 网络模型
全网粉丝20W的头部大号,专注云原生、Golang、Linux实用脚本,效率工具,免费CSDN下载,回复【go】获取近 6 万 Star 的资源回复【1024】获取全种类IT资料,回复【加群】进入高手如云技术交流群
继续滑动看下一个

K8S 1.26 跨命名空间存储数据源实践详解

Hitachi Vantara 进击云原生
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存