在私有云部署阿里云NAS存储

  1. 1. 前提条件
  2. 2. 配置文件下载
  3. 3. 修改部分配置
  4. 4. 安装CSI插件
  5. 5. kubernetes 1.20版本后适配问题
  6. 6. 使用阿里云NAS作为storageClass

前提条件

私有云内网与阿里云的VPC互通

配置文件下载

首先下载阿里云提供的alibaba-cloud-csi-driver

deploy文件夹下,找到rbac.yaml,这个文件用于配置csi插件的rbac权限,

找到deploy/nas文件夹,其中配置文件为nas-plugin-dedicated.yaml以及nas-provisioner-dedicated.yaml

注意: 原文件夹中有两套不同的配置,根据阿里云官方的解释,在私有云采用阿里云的NAS应该使用dedicated

修改部分配置

要在私有云使用阿里云的csi插件,还需要声明csi-node的nodeid,在非阿里云的机器中,我们需要额外设置hostname作为nodeid

配置方法

nas-plugin-dedicated.yaml:

1
2
3
4
5
6
7
8
image: registry.cn-hangzhou.aliyuncs.com/acs/csi-plugin:v1.16.9.43-f36bb540-aliyun
imagePullPolicy: "Always"
args:
- "--endpoint=$(CSI_ENDPOINT)"
- "--v=2"
- "--driver=nas"
- "--nodeid=$(KUBE_NODE_NAME)" # 添加一行配置

nas-provisioner-dedicated.yaml:

1
2
3
4
5
6
7
8
9
10
11
12
13
image: registry.cn-hangzhou.aliyuncs.com/acs/csi-plugin:v1.16.9.43-f36bb540-aliyun
imagePullPolicy: "Always"
args:
- "--endpoint=$(CSI_ENDPOINT)"
- "--v=2"
- "--driver=nas"
- "--nodeid=$(KUBE_NODE_NAME)" # 添加nodoeid配置
env:
- name: KUBE_NODE_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName # 定义KUBE_NODE_NAME 变量

安装CSI插件

1
2
3
kubectl  apply -f rbac.yaml
kubectl apply -f nas-plugin-dedicated.yaml
kubectl apply -f nas-provisioner-dedicated.yaml

kubernetes 1.20版本后适配问题

在较高版本(1.20+)的kubernetes中使用阿里云的CSI插件会出现selfLink was empty, can't make reference报错,原因是kubernetes 1.20版本后禁用了SelfLink

根据工单,阿里云官方的解释是CSI插件 1.1.4以后的版本适配1.20

当时的解决方案

在kube-apiserver 的yaml文件中添加启动参数--feature-gates=RemoveSelfLink=false,重新apply后生效

使用阿里云NAS作为storageClass

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-nas-subpath
mountOptions:
- nolock,tcp,noresvport
- vers=3
parameters:
volumeAs: subpath
server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s/" # 此处修改为自己的nas地址
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain

参数 描述
mountOptions 挂载NAS的options参数在mountOptions中配置,包括NFS协议版本。
volumeAs 可选subpathfilesystem,分别表示创建子目录类型的PV和文件系统类型PV。
server 表示创建子目录类型的PV时,NAS文件系统的挂载点地址。
provisioner 驱动类型。本例中取值为nasplugin.csi.alibabacloud.com,表示使用阿里云NAS CSI插件。
reclaimPolicy PV的回收策略,默认为Delete,支持Retain。Delete模式:删除PVC的时候,PV和NAS文件系统会一起删除。Retain模式:删除PVC的时候,PV和NAS文件系统不会被删除,需要您手动删除。如果数据安全性要求高,推荐使用Retain方式以免误删数据。
archiveOnDelete 表示在reclaimPolicyDelete时,是否删除后端存储。因为NAS为共享存储,添加此选项进行双重确认。在参数parameters下配置。默认为true,表示不会真正删除目录或文件,而是将其Rename,格式为:archived-{pvName}.{timestamp};如果是配置为false,表示会真正删除后端对应的存储资源。