一、安装Minio(Minio分布式集群搭建部署_minio集群最少几台-CSDN博客)
生成accessKeyID和secretAccessKey:
二、安装csi-s3插件(在k8s集群上)
首先我们把插件的yaml文件都下载下来,为了保证版本测试的一致性,我们下载v1.2.0-rc.2这个Tag
$ wget https://github.com/ctrox/csi-s3/archive/refs/tags/csi-s3-1.2.0-rc.2.tar.gz
解压,会得到目录csi-s3-1.2.0-rc.2
tar zxvf csi-s3-1.2.0-rc.2.tar.gz
[root@k8s-master01 ~]# cd csi-s3-1.2.0-rc.2/deploy/kubernetes/
[root@k8s-master01 kubernetes]# ls
attacher.yaml csi-s3.yaml examples provisioner.yaml
修改csi-s3.yaml中的quay.io/k8scsi/csi-node-driver-registrar:v1.2.0为quay.io/k8scsi/csi-node-driver-registrar:v2.1.0
[root@k8s-master01 kubernetes]# cat csi-s3.yaml | grep imageimage: quay.io/k8scsi/csi-node-driver-registrar:v1.2.0image: ctrox/csi-s3:v1.2.0-rc.2imagePullPolicy: "Always"
修改后:
[root@k8s-master01 kubernetes]# cat csi-s3.yaml | grep imageimage: quay.io/k8scsi/csi-node-driver-registrar:v2.1.0image: ctrox/csi-s3:v1.2.0-rc.2imagePullPolicy: "Always"
安装插件:
[root@k8s-master01 kubernetes]# kubectl create -f provisioner.yaml
[root@k8s-master01 kubernetes]# kubectl create -f attacher.yaml
[root@k8s-master01 kubernetes]# kubectl create -f csi-s3.yaml
查看csi容器已经处地Running状态
[root@k8s-master01 ~]# kubectl get pod -n kube-system -o wide | grep csi
csi-attacher-s3-0 1/1 Running 1 (86m ago) 170m 192.169.58.196 k8s-node02 <none> <none>
csi-provisioner-s3-0 2/2 Running 0 170m 192.169.85.196 k8s-node01 <none> <none>
csi-s3-2rbh4 2/2 Running 0 86m 192.168.79.130 k8s-node02 <none> <none>
csi-s3-8mkbf 2/2 Running 0 85m 192.168.79.129 k8s-node01 <none> <none>
使用
首先我们在K8S集群中创建一个Minio的S3凭证,yaml文件如下(注意,这里secret下面用的stringData,所以下面的数据不需要经过base64编码)
[root@k8s-master01 ~]# vim csi-s3-secret.yaml
apiVersion: v1
kind: Secret
metadata: name: csi-s3-secret namespace: kube-system
stringData:accessKeyID: P4rOywJzZ03IzvLr7ix8secretAccessKey: m0BGZRr7UGgauOEcV55dEwCzl7drpHbxBLTA88MH endpoint: "http://192.168.79.132:9029" region: ""
接着,我们创建一个StorageClass(parameters中的命名空间为kube-system,和上面的secret要一致)
[root@k8s-master01 ~]# vim csi-s3-SC.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:name: csi-s3
provisioner: ch.ctrox.csi.s3-driver
parameters:mounter: rclonecsi.storage.k8s.io/provisioner-secret-name: csi-s3-secretcsi.storage.k8s.io/provisioner-secret-namespace: kube-systemcsi.storage.k8s.io/controller-publish-secret-name: csi-s3-secretcsi.storage.k8s.io/controller-publish-secret-namespace: kube-systemcsi.storage.k8s.io/node-stage-secret-name: csi-s3-secretcsi.storage.k8s.io/node-stage-secret-namespace: kube-systemcsi.storage.k8s.io/node-publish-secret-name: csi-s3-secretcsi.storage.k8s.io/node-publish-secret-namespace: kube-system
接着,我们创建一个PVC
[root@k8s-master01 ~]# vim csi-s3-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: csi-s3-pvcnamespace: default
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10GistorageClassName: csi-s3
应用三个yaml文件:
[root@k8s-master01 ~]# kubectl apply -f csi-s3-secret.yaml[root@k8s-master01 ~]# kubectl apply -f csi-s3-SC.yaml[root@k8s-master01 ~]# kubectl apply -f csi-s3-pvc.yaml
在集群中查看PV已经动态供给了,PVC为绑定状态
[root@k8s-master01 ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
csi-s3-pvc Bound pvc-afe861cc-bd67-4699-a44e-d5926347879e 10Gi RWO csi-s3 28m
我们再去到Minio的管理页面上看一下,已经有bucket生成