前言
最近在学习 k8s,并且应用了阿里云 ACK 的 K8S 集群,学到存储卷时,发现阿里云有三种解决方案:1、云盘,2、NAS,3、OSS,上面就来解说下云盘和 NAS 在 K8S 中应用办法,前面有工夫再出个 OSS 教程。
筹备
- 阿里云 ACK k8s 集群
k8s 存储卷概述
存储卷相干技术,官网文档
存储卷 PVC:PersistentVolumeClaim
存储卷申明 PV:PersistentVolume
存储卷类 SC:StorageClass
这里有篇博客写得十分好,大家有工夫能够看看它们之间的区别,本文不是解说这些概念而是应用它们
应用形式
-
什么是动态创立存储卷?
所谓动态就是通过 yaml 文件先创立 PV,而后创立 PVC,再通过创立的 Deployment 或者 StatefulSet 去指定 PVC。
-
什么是动态创建存储卷?
所谓动静就是通过创立 SC,而后创立 PVC 并且指定了 SC,零碎就会主动创立 PV,因而理论生产中更多的应用动态创建。
上面咱们也是着重解说如何动态创建存储卷。
阿里云反对的存储卷
1、云盘
如果想要创立动静存储卷必须先要创立 StorageClass,上面是阿里云盘提供的以下几种 StorageClass:
alicloud-disk-efficiency:高效云盘。alicloud-disk-ssd:SSD 云盘。alicloud-disk-essd:ESSD 云盘。alicloud-disk-available:提供高可用选项,优先创立 SSD 云盘;如果 SSD 云盘售尽,则创立高效云盘
alicloud-disk-topology: 应用提早绑定的形式创立云盘
存储大小限度:
最低 20Gi
2、NAS
因为 NAS 跟云盘还不一样,要到阿里云控制台手动开明服务,开明之后能力应用,还有 NAS 没有自带 SC,要本人通过 yaml 文件创建。
反对协定:
通用型:NFSv3(Linux)/NFSv4(Linux)/SMB2.1+(Windows)
极速型:NFSv3(Linux)
文件存储 CPFS:POSIX/MPI-IO(Linux)
阿里云 Kubernetes CSI 反对 2 种类型的 NAS 动静存储卷挂载:subpath 形式和 filesystem 形式
subpath 类型的 NAS 动静存储卷
当您的多个 Kubernetes 利用或者 Pod 须要挂载雷同的 NAS 存储卷共享数据时,或不同的 Pod 挂载雷同 NAS 文件系统的不同子目录时,能够应用 subpath 类型的 NAS 动静存储卷形式。filesystem 类型的 NAS 动静存储卷
当您的 Kubernetes 利用须要动态创建和删除 NAS 文件系统和挂载点时,能够应用 filesystem 类型。
上面就来解说应用 filesystem 类型创立 NAS 存储卷。
存储大小限度:
- 无限度
3、OSS
略
创立 NAS StorageClass
下面讲到 NAS 没有自带的 SC 须要手动通过 yaml 文件来创立,所以当初咱们来创立一下,依据官网文档来创立
1、创立 subpath 类型的 StorageClass
alicloud-nas-subpath.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-nas-subpath
mountOptions:
- nolock,tcp,noresvport
- vers=3
parameters:
volumeAs: subpath
server: "xxxxxxx.cn-hangzhou.nas.aliyuncs.com:/k8s/"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
执行以下命令创立 StorageClass。
kubectl create -f alicloud-nas-subpath.yaml
2、创立 filesystem 类型的 StorageClass
alicloud-nas-fs.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-nas-fs
mountOptions:
- nolock,tcp,noresvport
- vers=3
parameters:
volumeAs: filesystem
zoneId: "cn-hangzhou-g"
vpcId: "vpc-xxxxxxxxxxxx"
vSwitchId: "vsw-xxxxxxxxx"
deleteVolume: "false"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
执行以下命令创立 StorageClass。
kubectl create -f alicloud-nas-fs.yaml
留神:如果不填写 zoneId 区域 id,会报错
创立云盘存储卷
-
创立动态云盘存储卷
- 步骤一:创立 PV
- 步骤二:创立 PVC
- 步骤三:创立利用。
-
创立动静云盘存储卷
- 步骤一:创立 StorageClass
- 步骤二:创立 PVC
- 步骤三:创立利用
创立 NAS 存储卷
-
创立动态云盘存储卷
- 步骤一:创立 PV
- 步骤二:创立 PVC
- 步骤三:创立利用。
-
创立动静云盘存储卷
- 步骤一:创立 StorageClass
- 步骤二:创立 PVC
- 步骤三:创立利用
问题
1、Zone not exist 或者 InvaildZone.NotExist
通过命令查看 pod 报错
kubectl logs -n kube-system csi-provisioner-56f5c9d65d-2b82t -c external-nas-provisioner
kubectl logs deployment.apps/csi-provisioner -n kube-system
错误信息:
RequestId: E83FFC19-9A19-45E4-BC49-BC96810F4C3D
Message: Zone not exist
Warning ProvisioningFailed 10m nasplugin.csi.alibabacloud.com_awbeci-nexus_b88f4540-2802-409e-b178-9f7a37e99191 failed to provision volume with StorageClass "alicloud-nas-fs": rpc error: code = Internal desc = SDK.ServerError
ErrorCode: InvaildZone.NotExist
Recommend: https://error-center.aliyun.com/status/search?Keyword=InvaildZone.NotExist&source=PopGw
起因:创立 NAS StorageClass 的时候没有指定 zoneId
解决:查看你的 NAS 所在区域对应的 ZoneId
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-nas-fs
mountOptions:
- nolock,tcp,noresvport
- vers=3
parameters:
volumeAs: filesystem
# 指定 zoneId
zoneId: "cn-hangzhou-g"
vpcId: "vpc-xxx"
vSwitchId: "vsw-xxx"
deleteVolume: "false"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
总结
1、k8s 能够应用云盘和 NAS 存储卷,然而云盘最低要 20Gi,所以平时开发或者测试能够应用 NAS 存储卷
2、应用 NAS 要开明阿里云服务
3、动态创建存储卷更合乎日常工作
援用
长久卷
Kubernetes 对象中的 PersistentVolume、PersistentVolumeClaim 和 StorageClass 的概念关系
阿里云查问可用的地区
阿里云盘存储卷概述
阿里云 NAS 存储卷概述