使用 NAS 动态存储卷
阿里云 Kubernetes CSI 支持 2 种类型的 NAS 动态存储卷挂载:subpath 方式和 filesystem 方式。
前提条件
使用此方案,需要在集群中部署 CSI 驱动(Kubernetes 集群默认已部署该驱动)。
如果您没有部署 csi-nas-plugin。请参见安装插件。
subpath 类型的 NAS 动态存储卷
当您的多个 Kubernetes 应用或者 Pod 需要挂载相同的 NAS 存储卷共享数据时,或不同的 Pod 挂载相同 NAS 文件系统的不同子目录时, 可以使用
subpath 类型的 NAS 动态存储卷方式。
NAS 动态存储卷的挂载方式为 subpath 类型时,您需要手动创建 NAS 文件系统和挂载点。
- 创建 NAS 文件系统和挂载点。
- 登录NAS控制台。
- 创建 NAS 文件系统。请参见管理文件系统。
- 添加挂载点。请参见管理挂载点。
- 创建 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
- 创建并拷贝以下内容到alicloud-nas-subpath.yaml文件中。
- 创建 PV/PVC 和 Pod 挂载 NAS 存储卷。
创建 Pod
nginx-1
和nginx-2
共享 NAS 存储卷的同一个子目录,pvc.yaml
、nginx-1.yaml
nginx-2.yaml
文件内容如下。pvc.yaml
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-csi-pvc spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-subpath resources: requests: storage: 20Gi
nginx-1.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: deployment-nas-1 labels: app: nginx-1 spec: selector: matchLabels: app: nginx-1 template: metadata: labels: app: nginx-1 spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 volumeMounts: - name: nas-pvc mountPath: "/data" volumes: - name: nas-pvc persistentVolumeClaim: claimName: nas-csi-pvc
nginx-2.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: deployment-nas-2 labels: app: nginx-2 spec: selector: matchLabels: app: nginx-2 template: metadata: labels: app: nginx-2 spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 volumeMounts: - name: nas-pvc mountPath: "/data" volumes: - name: nas-pvc persistentVolumeClaim: claimName: nas-csi-pvc
执行如下命令,创建 PVC 和 Deployment。$ kubectl create -f pvc.yaml -f nginx-1.yaml -f nginx-2.yaml $ kubectl get po NAME READY STATUS RESTARTS AGE deployment-nas-1-5b5cdb85f6-nhklx 1/1 Running 0 32s deployment-nas-2-c5bb4746c-4jw5l 1/1 Running 0 32s
说明 NAS 存储卷的xxxxxxx.cn-hangzhou.nas.aliyuncs.com:/share/nas-79438493-f3e0-11e9-bbe5-00163e09c2be
会同时挂载到deployment-nas-1-5b5cdb85f6-nhklx
和deployment-nas-2-c5bb4746c-4jw5l
/data目录下。其中:/share
:StorageClass 中指定的 subpath。nas-79438493-f3e0-11e9-bbe5-00163e09c2be
:pv 的名称。
如果您需要为不同的 Pod 挂载同一个 NAS 文件系统的不同子目录, 则需要分别创建 pvc-1 和 nginx-1 以及 pvc-2 和 nginx-2。
filesystem 类型的 NAS 动态存储卷
中的 reclaimPolicy 为 Delete 且 deleteVolume 的值为 true。
当您的 Kubernetes 应用需要动态创建和删除 NAS 文件系统和挂载点时, 可以使用 filesystem 类型。
使用 filesystem 类型 NAS 存储卷的 Pod 只能创建一个文件系统和一个挂载点, 多个 Pod 之间无法共享一个存储卷。
- RAM Policy 设置和授予。
filesystem 类型的 NAS 存储卷涉及 NAS 文件系统和挂载点的动态创建与删除, 需要授予 csi-nasprovisioner 相应的权限,RAM Policy
的最小集合如下:{ "Action": [ "nas:DescribeMountTargets", "nas:CreateMountTarget", "nas:DeleteFileSystem", "nas:DeleteMountTarget", "nas:CreateFileSystem" ], "Resource": [ "*" ], "Effect": "Allow" }
您可以通过以下任意一种方式进行授权:
- 编辑 Kubernetes 集群的 Master RAM 角色中的自定义策略内容,添加以上 NAS 相关的权限设置。请参见角色授权。
- 创建子账号授权以上 RAM Policy 并生成 AccessKey,配置到 StatefulSet csi-provisioner 中 csi-nasprovisioner
的 env 变量中。请参见角色授权。env: - name: CSI_ENDPOINT value: unix://socketDir/csi.sock - name: ACCESS_KEY_ID value: "" - name: ACCESS_KEY_SECRET value: ""
- 编辑 Kubernetes 集群的 Master RAM 角色中的自定义策略内容,添加以上 NAS 相关的权限设置。请参见角色授权。
- 创建 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 vpcId: "vpc-xxxxxxxxxxxx" vSwitchId: "vsw-xxxxxxxxx" deleteVolume: "false" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Retain
- 执行以下命令创建 StorageClass。
kubectl create -f alicloud-nas-fs.yaml
- 创建并拷贝以下内容到alicloud-nas-fs.yaml文件中。
- 创建 PV/PVC 和 Pod 挂载 NAS 存储卷。
pvc.yaml
、nginx.yaml
文件内容如下:pvc.yaml
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-csi-pvc-fs spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-fs resources: requests: storage: 20Gi
nginx.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-nas-fs labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 volumeMounts: - name: nas-pvc mountPath: "/data" volumes: - name: nas-pvc persistentVolumeClaim: claimName: nas-csi-pvc-fs
执行以下命令,创建 PVC 和 Deployment。kubectl create -f pvc.yaml -f nginx.yaml
这种场景下,CSI 会在 PVC 创建时动态新建 NAS 文件系统和挂载点, PVC 删除时动态删除挂载点和文件系统。
发布者:佚, 佚名,转转请注明出处:https://www.cms2.cn/aliyun/csk/5863.html

相关推荐
-
查看镜像列表
操作步骤 登录容器服务管理控制台。 在 Kubernetes 菜单下,单击左侧导航栏中市场 > 镜像,进入镜像列表页面。 您可以查看镜像的种类或单击 全局搜索通过镜像名称的关键字搜索镜像。 常用镜像: 容器服务推荐的一些常用镜像。 Docker 官方镜像: Docker H…
2019年11月8日 -
公共参数
公共请求头部 公共请求参数是指每个接口都需要使用到的请求参数。 参数名称 说明 选项 Authorization 用于验证请求合法性的认证信息,采用 AccessKeyId:Signature 的形式。 Required Content-Length RFC 2616 中定义的 …
2019年12月13日 -
使用HTTPS来访问Ingress Gateway
本文详细讲述如何使用HTTPS来访问Ingress Gateway。 环境准备 通过CloudShell 连接 Kubernetes 集群。 执行如下命令curl –version | grep LibreSSL命令,确认测试环境。 如果输出结果包含LibreSSL的版本信息,…
2019年12月13日 -
创建工作流
本文主要为您介绍如何创建工作流。 背景信息 工作流是基于argo开发的,为Kubernetes提供容器化的本地工作流程。工作流程中的每个步骤都定义为容器。 工作流是作为 Kubernetes CRD(自定义资源定义)实现的。 因此,可以使用kubectl管理工作流,并与其他Kub…
2019年11月11日 -
ECS选型
本文介绍构建Kubernetes集群时推荐的ECS类型。 集群规划 目前在创建Kubernetes集群时,存在着使用很多小规格ECS的现象,这样做有以下弊端: 小规格Woker ECS的网络资源受限。 如果一个容器基本可以占用一个小规格ECS,此ECS的剩余资源就无法利用(构建新…
2019年12月13日 -
Kube-apiserver审计日志
在Kubernetes集群中,apiserver的审计日志可以帮助集群管理人员记录或追溯不同用户的日常操作,是集群安全运维中重要的环节。本文旨在帮助您了解阿里云Kubernetes集群apiserver审计日志的相关配置,以及如何通过日志服务收集、分析审计日志,并根据您的需求为审…