
synology/synology-csiSynology NAS的官方容器存储接口驱动。
驱动名称: csi.san.synology.com
| 驱动版本 | 镜像 | 支持的K8s版本 |
|---|---|---|
| v1.2.1 | synology-csi:v1.2.1 | 1.20+ |
Synology CSI驱动支持:
克隆git仓库: git clone [***]
进入目录: cd synology-csi
复制客户端信息模板文件: cp config/client-info-template.yml config/client-info.yml
编辑config/client-info.yml配置DSM连接信息。可以指定CSI卷将在其上创建的一个或多个存储系统。根据需要修改以下参数:
安装
YAML方式
运行./scripts/deploy.sh run安装驱动。这将是完整部署,意味着将构建和运行所有CSI服务以及快照器。如果需要不包含快照器的基本部署,请按以下说明更改命令。
./scripts/deploy.sh run./scripts/deploy.sh build && ./scripts/deploy.sh install --basic如果不需要本地构建驱动,而是想从Docker拉取镜像,请按以下说明运行命令。
./scripts/deploy.sh install --all./scripts/deploy.sh install --basic运行bash脚本将:
synology-csi"的命名空间,驱动将安装在此命名空间中client-info-secret"的密钥synology-iscsi-storage"的默认存储类synology-snapshotclass"的卷快照类(仅完整部署)HELM (本地开发)
kubectl create ns synology-csi; kubectl label ns synology-csi pod-security.kubernetes.io/enforce=privileged --overwritekubectl create secret -n synology-csi generic client-info-secret --from-file=./config/client-info.ymlcd deploy/helm; make up检查CSI驱动的所有pod状态是否为Running: kubectl get pods -n synology-csi
存储类和密钥是CSI驱动正常运行所必需的。本节说明如何执行以下操作:
创建用于指定存储系统地址和凭据(用户名和密码)的密钥。通常配置文件也会设置密钥,但如果仍要创建或重新创建密钥,请按照以下说明操作:
编辑配置文件config/client-info.yml或创建新文件,如下例所示:
clients: - host: 192.168.1.1 port: 5000 https: false username: <用户名> password: <密码> - host: 192.168.1.2 port: 5001 https: true username: <用户名> password: <密码>
clients字段可以包含多个Synology NAS,使用前缀"-"分隔。
使用以下命令创建密钥(通常由deploy.sh完成):
kubectl create secret -n <命名空间> generic client-info-secret --from-file=config/client-info.yml
synology-csi,这是默认命名空间。如有需要,更改为自定义命名空间。deploy/kubernetes/<k8s版本>/下的所有文件都使用您设置的密钥名称。创建并应用具有所需属性的存储类。
使用deploy/kubernetes/<k8s版本>/storage-class.yml作为示例创建YAML文件,其内容如下:
iSCSI协议
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: 'btrfs' dsm: '192.168.1.1' location: '/volume1' formatOptions: '--nodiscard' reclaimPolicy: Retain allowVolumeExpansion: true
SMB/CIFS协议
创建SMB/CIFS存储类之前,必须创建密钥并指定要授予权限的DSM用户。
apiVersion: v1 kind: Secret metadata: name: cifs-csi-credentials namespace: default type: Opaque stringData: username: <用户名> # 访问共享文件夹的DSM用户账户 password: <密码> # 访问共享文件夹的DSM用户密码
创建密钥后,创建存储类并填写node-stage-secret的密钥。如果使用SMB,这是必需步骤,否则在挂载卷时会出错。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: synostorage-smb provisioner: csi.san.synology.com parameters: protocol: "smb" dsm: '192.168.1.1' location: '/volume1' csi.storage.k8s.io/node-stage-secret-name: "cifs-csi-credentials" csi.storage.k8s.io/node-stage-secret-namespace: "default" reclaimPolicy: Delete allowVolumeExpansion: true
NFS协议
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: synostorage-nfs provisioner: csi.san.synology.com parameters: protocol: "nfs" dsm: "192.168.1.1" location: '/volume1' mountPermissions: '0755' mountOptions: - nfsvers=4.1 reclaimPolicy: Delete allowVolumeExpansion: true
通过在表中分配参数来配置存储类属性。如果没有偏好,可以留空:
| 名称 | 类型 | 描述 | 默认值 | 支持的协议 |
|---|---|---|---|---|
| dsm | string | DSM的IPv4地址,必须包含在client-info.yml中,以便CSI驱动登录DSM | - | iSCSI, SMB, NFS |
| location | string | DSM上创建PersistentVolume的LUN位置(/volume1, /volume2, ...) | - | iSCSI, SMB, NFS |
| fsType | string | 在pod上挂载时PersistentVolumes的格式化文件系统。此参数仅适用于iSCSI。对于SMB,fsType始终为'cifs'。 | 'ext4' | iSCSI |
| protocol | string | 存储后端协议。输入'iscsi'创建LUN,或输入'smb'或'nfs'在DSM上创建共享文件夹。 | 'iscsi' | iSCSI, SMB, NFS |
| formatOptions | string | 传递给mkfs.*命令的其他选项/参数。请参阅与您选择的文件系统对应的Linux手册。 | - | iSCSI |
| enableSpaceReclamation | string | 为精简配置的Btrfs LUN启用空间回收以提高存储效率。可能会影响性能和空间显示。 | 'false' | iSCSI |
| enableFuaSyncCache | string | 为LUN启用FUA和Sync Cache SCSI命令。 | 'false' | iSCSI |
| csi.storage.k8s.io/node-stage-secret-name | string | node-stage-secret的名称。如果通过SMB访问DSM共享文件夹,则需要。 | - | SMB |
| csi.storage.k8s.io/node-stage-secret-namespace | string | node-stage-secret的命名空间。如果通过SMB访问DSM共享文件夹,则需要。 | - | SMB |
| mountPermissions | string | 挂载文件夹权限。如果设置为非零,驱动将在挂载后执行chmod | '0750' | NFS |
注意
将YAML文件应用到Kubernetes集群:
kubectl apply -f <storageclass_yaml>
创建并应用具有所需属性的卷快照类。
使用deploy/kubernetes/<k8s版本>/snapshotter/volume-snapshot-class.yml作为示例创建YAML文件,其内容如下:
apiVersion: snapshot.storage.k8s.io/v1beta1 # Kubernetes v1.20及以上版本使用v1 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'
通过分配以下参数配置卷快照类属性,所有参数都是可选的:
| 名称 | 类型 | 描述 | 默认值 | 支持的协议 |
|---|---|---|---|---|
| description | string | DSM上快照的描述 | "" | iSCSI |
| is_locked | string | 是否要在DSM上锁定快照 | 'false' | iSCSI, SMB, NFS |
将YAML文件应用到Kubernetes集群:
kubectl apply -f <volumesnapshotclass_yaml>
默认情况下,CSI驱动将从Docker Hub拉取最新的镜像。
如果要使用本地构建的镜像进行安装,请编辑deploy/kubernetes/<k8s版本>/下的所有文件,并确保每个csi-plugin容器都包含imagePullPolicy: IfNotPresent。
make。make synocli。输出二进制文件将位于bin/synocli。make test。./scripts/deploy.sh build。之后,运行docker images检查新创建的镜像。./scripts/deploy.sh install --all./scripts/deploy.sh install --basic./scripts/deploy.sh --help查看有关命令用法的更多信息。如果不再使用CSI驱动,在卸载前确保Kubernetes集群中没有其他资源使用Synology CSI驱动管理的存储:
./scripts/uninstall.sh



manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务