适用于Kubernetes的Synology CSI驱动
Synology NAS 的官方容器存储接口驱动。
Container Images & Kubernetes 兼容性
驱动名称: csi.san.synology.com
驱动版本 | 图片 | 支持的K8s版本 |
---|---|---|
v1.0.0 | Synology-csi:v1.0.0 | 1.19 |
Synology CSI 驱动支持。
- 访问模式。读/写多个存储舱
- 克隆
- 扩展
- 快照
安装
先决条件
- Kubernetes 1.19版本
- 运行 DSM 7.0 或以上版本的 Synology NAS
- 建议使用1.16或以上版本的Go
- (可选)如果你想使用快照功能,必须在你的Kubernetes集群中安装卷快照CRD和公共快照控制器。
通知
- 在安装CSI驱动之前,请确保您已经在DSM上创建并初始化了至少一个存储池和一个卷。
- 确保你的Kubernetes集群中的所有工作节点都能连接到你的DSM。
- 在你完成下面的步骤后,包括快照器在内的CSI驱动的_完整_部署将被安装。如果您不需要快照功能,您可以安装CSI驱动程序的_基本_部署。
程序
-
克隆git资源库。
git clone https://github.com/SynologyOpenSource/synology-csi.git
-
进入该目录。
cd synology-csi
-
复制client-info-template.yml文件。
cp config/client-info-template.yml config/client-info.yml
-
编辑
config/client-info.yml
,配置DSM的连接信息。你可以指定一个或多个存储系统,在这些系统上将创建CSI卷。根据需要改变以下参数。- host:你的DSM的IPv4地址。
- 端口。用于连接到DSM的端口。默认的HTTP端口为5000,HTTPS为5001。只有在你使用不同的端口时才会改变这个。
- https: 设置为 "true "以使用HTTPS进行安全连接。确保端口也是正确配置的。
- username,password: 连接到DSM的凭证。
-
运行
./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
"策略。_(_仅_全面_部署)
- 完整的。
-
检查CSI驱动程序的所有荚的状态是否为运行。
kubectl get pods -n synology-csi
CSI驱动配置
存储类和秘密是CSI驱动正常运行的必要条件。本节解释了如何进行以下工作。
- 创建存储系统秘密(这不是必须的,因为当你配置前面提到的配置文件时,deploy.sh将完成所有配置。
- 配置Storageclasses
- 配置卷的快照类(napshotclasses
创建一个秘密
创建一个秘密来指定存储系统地址和证书(用户名和密码)。通常,配置文件也会设置秘密,但如果你仍然想创建秘密或重新创建它,请遵循下面的说明。
-
编辑配置文件
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。用前缀-
将它们分开。 -
使用以下命令创建秘密(通常由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。
-
以
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
-
通过指定表格中的参数来配置StorageClass的属性。如果你没有偏好,你也可以留空。
名称 类型 描述 默认值 dsm 字符串 你的DSM的IPv4地址,必须包括在 client-info.yml
,以便CSI驱动能够登录到DSM。– 位置 字符串 将创建_PersistentVolume_的LUN的DSM上的位置(/volume1, /volume2, ...)。 – fsType 字符串 当你把_PersistentVolumes_挂载到pod上时,它的格式化文件系统 'ext4 注意
- 如果您将参数_位置_留空,CSI驱动程序将在DSM上选择一个具有可用存储空间的卷来创建这些卷。
- 由CSI驱动创建的所有卷都是DSM上的精简配置LUN。这将使您能够对它们进行快照。
-
将YAML文件应用于Kubernetes集群。
kubectl apply -f <storageclass_yaml>
创建卷快照类
创建并应用具有你想要的属性的 VolumeSnapshotClasses。
-
以
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'
-
通过指定以下参数配置卷快照类属性,所有参数都是可选的。
名称 类型 描述 默认值 描述 字符串 DSM上快照的描述 “” is_locked 字符串 您是否想在DSM上锁定快照 'false -
将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