适用于Kubernetes的Synology CSI驱动

1,180 阅读6分钟

适用于Kubernetes的Synology CSI驱动

Synology NAS 的官方容器存储接口驱动。

Container Images & Kubernetes 兼容性

驱动名称: csi.san.synology.com

驱动版本图片支持的K8s版本
v1.0.0Synology-csi:v1.0.01.19

Synology CSI 驱动支持。

  • 访问模式。读/写多个存储舱
  • 克隆
  • 扩展
  • 快照

安装

先决条件

  • Kubernetes 1.19版本
  • 运行 DSM 7.0 或以上版本的 Synology NAS
  • 建议使用1.16或以上版本的Go
  • (可选)如果你想使用快照功能,必须在你的Kubernetes集群中安装卷快照CRD公共快照控制器

通知

  1. 在安装CSI驱动之前,请确保您已经在DSM上创建并初始化了至少一个存储池和一个
  2. 确保你的Kubernetes集群中的所有工作节点都能连接到你的DSM。
  3. 在你完成下面的步骤后,包括快照器在内的CSI驱动的_完整_部署将被安装。如果您不需要快照功能,您可以安装CSI驱动程序的_基本_部署。

程序

  1. 克隆git资源库。git clone https://github.com/SynologyOpenSource/synology-csi.git

  2. 进入该目录。cd synology-csi

  3. 复制client-info-template.yml文件。cp config/client-info-template.yml config/client-info.yml

  4. 编辑config/client-info.yml ,配置DSM的连接信息。你可以指定一个或多个存储系统,在这些系统上将创建CSI卷。根据需要改变以下参数。

    • host:你的DSM的IPv4地址。
    • 端口。用于连接到DSM的端口。默认的HTTP端口为5000,HTTPS为5001。只有在你使用不同的端口时才会改变这个。
    • https: 设置为 "true "以使用HTTPS进行安全连接。确保端口也是正确配置的。
    • username,password: 连接到DSM的凭证。
  5. 运行./scripts/deploy.sh run 来安装驱动程序。这将是一个_完整的_部署,这意味着你将建立和运行所有CSI服务以及快照程序。如果你想要一个_基本的_部署,其中不包括安装快照程序,请按照下面的指示改变命令。

    • 完整的
      ./scripts/deploy.sh run
    • basic:
      ./scripts/deploy.sh build && ./scripts/deploy.sh install --basic

    如果你不需要在本地构建驱动,而是想从Docker中获取镜像,请按照下面的指示运行该命令。

    • full:
      ./scripts/deploy.sh install --all
    • _基本_的。
      ./scripts/deploy.sh install --basic

    运行bash脚本将。

    • 创建一个名为 "synology-csi"的命名空间。这将是安装驱动程序的地方。
    • 使用你在上一步配置的client-info.yml中的证书,创建一个名为"client-info-secret"的秘密。
    • 建立一个本地镜像并部署CSI驱动程序。
    • 创建一个名为 "synology-iscsi-storage"的默认存储类,使用 "Retain"策略。
    • 创建一个名为 "synology-snapshotclass"的卷快照类,使用 "Delete"策略。_(_仅_全面_部署)
  6. 检查CSI驱动程序的所有荚的状态是否为运行。kubectl get pods -n synology-csi

CSI驱动配置

存储类和秘密是CSI驱动正常运行的必要条件。本节解释了如何进行以下工作。

  1. 创建存储系统秘密(这不是必须的,因为当你配置前面提到的配置文件时,deploy.sh将完成所有配置。
  2. 配置Storageclasses
  3. 配置卷的快照类(napshotclasses

创建一个秘密

创建一个秘密来指定存储系统地址和证书(用户名和密码)。通常,配置文件也会设置秘密,但如果你仍然想创建秘密或重新创建它,请遵循下面的说明。

  1. 编辑配置文件config/client-info.yml ,或者像这里显示的例子那样创建一个新的配置文件。

    clients:
    - host: 192.168.1.1
      port: 5000
      https: false
      username: <username>
      password: <password>
    - host: 192.168.1.2
      port: 5001
      https: true
      username: <username>
      password: <password>
    

    clients 字段可以包含一个以上的 Synology NAS。用前缀- 将它们分开。

  2. 使用以下命令创建秘密(通常由deploy.sh完成)。

kubectl create secret -n generic client-info-secret --from-file=config/client-info.yml ```

*   请确保将<namespace>替换为`synology-csi` 。这是默认的命名空间。如果需要的话,把它改成你的自定义命名空间。
*   如果你将秘密名称 "client-info-secret "改为不同的名称,确保`deploy/kubernetes/<k8s version>/` 的所有文件都使用你设置的秘密名称。

创建存储类

创建并应用具有你想要的属性的StorageClasses。

  1. deploy/kubernetes/<k8s version>/storage-class.yml 中的文件为例,创建YAML文件,其内容如下所示。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      annotations:
        storageclass.kubernetes.io/is-default-class: "false"
      name: synostorage
    provisioner: csi.san.synology.com
    parameters:
      fsType: 'ext4'
      dsm: '192.168.1.1'
      location: '/volume1'
    reclaimPolicy: Retain
    allowVolumeExpansion: true
    
  2. 通过指定表格中的参数来配置StorageClass的属性。如果你没有偏好,你也可以留空。

    名称类型描述默认值
    dsm字符串你的DSM的IPv4地址,必须包括在client-info.yml ,以便CSI驱动能够登录到DSM。
    位置字符串将创建_PersistentVolume_的LUN的DSM上的位置(/volume1, /volume2, ...)。
    fsType字符串当你把_PersistentVolumes_挂载到pod上时,它的格式化文件系统'ext4

    注意

    • 如果您将参数_位置_留空,CSI驱动程序将在DSM上选择一个具有可用存储空间的卷来创建这些卷。
    • 由CSI驱动创建的所有卷都是DSM上的精简配置LUN。这将使您能够对它们进行快照。
  3. 将YAML文件应用于Kubernetes集群。

    kubectl apply -f <storageclass_yaml>
    

创建卷快照类

创建并应用具有你想要的属性的 VolumeSnapshotClasses。

  1. deploy/kubernetes/<k8s version>/snapshotter/volume-snapshot-class.yml 为例,创建YAML文件,其内容如下。

    apiVersion: snapshot.storage.k8s.io/v1beta1    # v1 for kubernetes v1.20 and above
    kind: VolumeSnapshotClass
    metadata:
      name: synology-snapshotclass
      annotations:
        storageclass.kubernetes.io/is-default-class: "false"
    driver: csi.san.synology.com
    deletionPolicy: Delete
    # parameters:
    #   description: 'Kubernetes CSI'
    #   is_locked: 'false'
    
  2. 通过指定以下参数配置卷快照类属性,所有参数都是可选的。

    名称类型描述默认值
    描述字符串DSM上快照的描述“”
    is_locked字符串您是否想在DSM上锁定快照'false
  3. 将YAML文件应用到Kubernetes集群上。

    kubectl apply -f <volumesnapshotclass_yaml>
    

构建和手动安装

默认情况下,CSI驱动将从Docker Hub中提取最新的镜像

如果您想使用您在本地构建的镜像进行安装,请编辑deploy/kubernetes/<k8s version>/ 下的所有文件,并确保imagePullPolicy: IfNotPresent 包含在每个csi-plugin容器中。

构建

  • 要构建CSI驱动,执行make
  • 要构建_synocli_开发工具,请执行make synocli 。输出的二进制文件将在bin/synocli
  • 要运行单元测试,执行make test
  • 要建立一个docker镜像,运行./scripts/deploy.sh build
    之后,运行docker images ,检查新创建的镜像。

安装

  • 要安装CSI驱动的所有pod,请运行./scripts/deploy.sh install --all
  • 要安装不含snapshotter的CSI驱动的pod,请运行./scripts/deploy.sh install --basic
  • 运行./scripts/deploy.sh --help 来查看更多关于命令使用的信息。

解除安装

如果您不再使用CSI驱动,在卸载之前,请确保您的Kubernetes集群中没有其他资源在使用Synology CSI驱动管理的存储。

  • ./scripts/uninstall.sh

GitHub

github.com/SynologyOpe…