前言

最近在学习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/v1kind: StorageClassmetadata:  name: alicloud-nas-subpathmountOptions:- nolock,tcp,noresvport- vers=3parameters:  volumeAs: subpath  server: "xxxxxxx.cn-hangzhou.nas.aliyuncs.com:/k8s/"provisioner: nasplugin.csi.alibabacloud.comreclaimPolicy: Retain

执行以下命令创立StorageClass。

kubectl create -f alicloud-nas-subpath.yaml

2、创立filesystem类型的StorageClass

alicloud-nas-fs.yaml

apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:  name: alicloud-nas-fsmountOptions:- nolock,tcp,noresvport- vers=3parameters:  volumeAs: filesystem  zoneId: "cn-hangzhou-g"  vpcId: "vpc-xxxxxxxxxxxx"  vSwitchId: "vsw-xxxxxxxxx"  deleteVolume: "false"provisioner: nasplugin.csi.alibabacloud.comreclaimPolicy: Retain

执行以下命令创立StorageClass。

kubectl create -f alicloud-nas-fs.yaml
留神:如果不填写zoneId区域id,会报错

创立云盘存储卷

  1. 创立动态云盘存储卷

    • 步骤一:创立PV
    • 步骤二:创立PVC
    • 步骤三:创立利用。
  2. 创立动静云盘存储卷

    • 步骤一:创立StorageClass
    • 步骤二:创立PVC
    • 步骤三:创立利用

创立NAS存储卷

  1. 创立动态云盘存储卷

    • 步骤一:创立PV
    • 步骤二:创立PVC
    • 步骤三:创立利用。
  2. 创立动静云盘存储卷

    • 步骤一:创立StorageClass
    • 步骤二:创立PVC
    • 步骤三:创立利用

问题

1、Zone not exist 或者 InvaildZone.NotExist
通过命令查看pod报错

kubectl logs -n kube-system csi-provisioner-56f5c9d65d-2b82t -c external-nas-provisionerkubectl logs deployment.apps/csi-provisioner -n kube-system

错误信息:

RequestId: E83FFC19-9A19-45E4-BC49-BC96810F4C3DMessage: 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.ServerErrorErrorCode: InvaildZone.NotExistRecommend: https://error-center.aliyun.com/status/search?Keyword=InvaildZone.NotExist&source=PopGw


起因:创立NAS StorageClass的时候没有指定zoneId
解决:查看你的NAS所在区域对应的ZoneId

apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:  name: alicloud-nas-fsmountOptions:  - nolock,tcp,noresvport  - vers=3parameters:  volumeAs: filesystem  #  指定zoneId  zoneId: "cn-hangzhou-g"  vpcId: "vpc-xxx"  vSwitchId: "vsw-xxx"  deleteVolume: "false"provisioner: nasplugin.csi.alibabacloud.comreclaimPolicy: Retain

总结

1、k8s能够应用云盘和NAS存储卷,然而云盘最低要20Gi,所以平时开发或者测试能够应用NAS存储卷
2、应用NAS要开明阿里云服务
3、动态创建存储卷更合乎日常工作

援用

长久卷
Kubernetes对象中的PersistentVolume、PersistentVolumeClaim和StorageClass的概念关系
阿里云查问可用的地区
阿里云盘存储卷概述
阿里云NAS存储卷概述