跳转至

Kubernetes 测试阿里云CSI插件


2022-05-02 by dongnan

开始之前

CSI 插件是当前 Kubernetes 社区推荐的插件实现方案,CSI插件包括以下两部分:

  • CSI-Plugin:实现数据卷的挂载、卸载功能。
  • CSI-Provisioner:实现数据卷的自动创建能力,目前支持云盘、NAS两种存储卷创建能力。

环境描述

主机: AliYun ecs.g6.large 2c/8G
OS: Ubuntu Server 18.04
Docker: docker-ce:18.09.9
Kubernetes: v1.17.x
网络: 使用相同的 VPC 与 安全组

操作条件

  • 是在阿里云ECS自建的K8s集群。
  • 需要准备好阿里云的AccessKey,建议使用使用RAM子账户AK

操作步骤

获得资源文件

git clone https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver.git

创建 RBAC 对象

cd alibaba-cloud-csi-driver/deploy/
kubectl apply -f rbac.yaml

部署 disk-plugin

# 进入目录
cd disk/

# 编辑文件设置 AccessKey
vim disk-plugin.yaml

查找关键字 ACCESS_KEY_ID 并设置其 value 值
查找关键字 ACCESS_KEY_SECRET 并设置其 value 值

# 执行命令
kubectl apply -f disk-plugin.yaml 
csidriver.storage.k8s.io/diskplugin.csi.alibabacloud.com created
daemonset.apps/csi-plugin created

# 确保 csi-plugin 容器成功运行
kubectl get pod -A | grep csi
kube-system         csi-plugin-bdrw6                                           2/2     Running   0          26s
kube-system         csi-plugin-r6psr                                           2/2     Running   0          26s
kube-system         csi-plugin-srhk2                                           2/2     Running   0          26s
kube-system         csi-plugin-tnck7                                           2/2     Running   0          26s

部署 disk-provisioner

# 编辑文件设置 AccessKey
vim disk-provisioner.yaml

查找关键字 ACCESS_KEY_ID 并设置其 value 值
查找关键字 ACCESS_KEY_SECRET 并设置其 value 值

# 执行命令
kubectl apply -f disk-provisioner.yaml 
service/csi-provisioner unchanged
deployment.apps/csi-provisioner created

# 确保 csi-plugin 容器成功运行
kubectl get pod -A | grep csi-provisioner
kube-system         csi-provisioner-7465c8fc87-zblk9                           4/4     Running   0          91s

创建 StorageClass 对象

cd ../../examples/disk/topology
kubectl apply -f storageclass.yaml 
storageclass.storage.k8s.io/alicloud-disk-topology created

验证

部署一个使用CSI插件创建云盘的容器

配置文件

编辑 deploy.yaml 文件,将 storageClassName 名字由 csi-disk 更改为 alicloud-disk-topology

# 修改后的配置差异
git diff deploy.yaml

diff --git a/examples/disk/deploy.yaml b/examples/disk/deploy.yaml
index 52390736..31064bf7 100644
--- a/examples/disk/deploy.yaml
+++ b/examples/disk/deploy.yaml
@@ -8,7 +8,7 @@ spec:
   resources:
     requests:
       storage: 25Gi
-  storageClassName: csi-disk
+  storageClassName: alicloud-disk-topology

创建容器

kubectl apply -f deploy.yaml 
persistentvolumeclaim/disk-pvc created
deployment.apps/deployment-disk created

查看PV对象

kubectl get pv
NAME            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                           STORAGECLASS             REASON   AGE
d-8vbxxxsfus   25Gi       RWO            Retain           Bound    default/disk-pvc                alicloud-disk-topology            1s

查看PVC对象

kubectl get pvc
NAME       STATUS   VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS             AGE
disk-pvc   Bound    d-8vbxxxsfus   25Gi       RWO            alicloud-disk-topology   10s

查看POD对象

kubectl get pod
NAME                               READY   STATUS    RESTARTS   AGE
deployment-disk-667f5487f9-mtx2z   1/1     Running   0          43s

容器成功挂载云盘

kubectl exec -ti deployment-disk-667f5487f9-mtx2z df | grep data
/dev/vdb        25671908    45080  25610444   1% /data

注意

  • 阿里云云盘,非共享存储,每个云盘只能在单个节点挂载。
  • 阿里云云盘,会受到地域可用区的限制。
  • 如果需要共享存储(多个节点挂载),可以使用NAS服务。

参考文档

回到页面顶部