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
服务。