一、安装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 image
image: quay.io/k8scsi/csi-node-driver-registrar:v1.2.0
image: ctrox/csi-s3:v1.2.0-rc.2
imagePullPolicy: "Always"
修改后:
[root@k8s-master01 kubernetes]# cat csi-s3.yaml | grep image
image: quay.io/k8scsi/csi-node-driver-registrar:v2.1.0
image: ctrox/csi-s3:v1.2.0-rc.2
imagePullPolicy: "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: P4rOywJzZ03IzvLr7ix8
secretAccessKey: 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: rclone
csi.storage.k8s.io/provisioner-secret-name: csi-s3-secret
csi.storage.k8s.io/provisioner-secret-namespace: kube-system
csi.storage.k8s.io/controller-publish-secret-name: csi-s3-secret
csi.storage.k8s.io/controller-publish-secret-namespace: kube-system
csi.storage.k8s.io/node-stage-secret-name: csi-s3-secret
csi.storage.k8s.io/node-stage-secret-namespace: kube-system
csi.storage.k8s.io/node-publish-secret-name: csi-s3-secret
csi.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-pvc
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: 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生成