Kubernetes集群实践(十)在Kubernetes部署MinIO对象存储服务器
本文主要介绍如何安装和使用云原生对象存储服务器MinIO。
关键词:k8s
前言
MinIO 是在 GNU Affero 通用公共许可证 v3.0 下发布的高性能对象存储。它与 Amazon S3 云存储服务 API 兼容。使用 MinIO 为机器学习、分析和应用程序数据工作负载构建高性能基础架构。
本文主要介绍如何使用MinIO Kubernetes Operator部署和安装MinIO。
准备工作
正常运行的K8s集群,这里使用三个master节点,两个worker节点进行演示;
在K8s上部署MinIO一般有两种方式,一种是通过Helm进行自动安装,还有一种是通过MinIO Kubernetes Operator部署安装。处于学习的角度考虑,这里采用Operator进行手动安装
部署MinIO Operator
安装kubectl-minio插件
1 | wget https://github.com/minio/operator/releases/latest/download/kubectl-minio_linux_amd64.zip |
检查是否正常安装
如果显示版本号则说明插件安装成功
1 | wf09@amd-server ➜ ~ kubectl minio version |
初始化MinIO Operator
部署
--image
、--console-image
分别指定私有仓库的镜像,这样可以节约部署的时间
1 | kubectl minio init \ |
稍候片刻,可以看到下面的回显,说明部署完毕
查看部署的资源
可以查看minio-operator命名空间下的资源
1 | kubectl get all -n minio-operator |
当所有Pod都为Running时,表示服务已经Ready了
登录operator控制台
可以通过kube-proxy访问控制台
1 | kubectl minio proxy |
记录JWT,并输入打开的浏览器页面
输入JWT,跳转到下一步
部署多租户MinIO tenant集群
创建StorangeClass
可以通过外部StorangeClass+PVC可以实现自动生成PV。
K3s local-path-provisioner StorangeClass
K3s Local PV 可以在本机通过PV控制器与Scheduler的结合,会对local PV做针对性的逻辑处理,从而,让Pod在多次调度时,能够调度到同一个Node上。
安装方式也很简单,默认在K3s集群中就自动安装完毕了。
若之前禁用了此安装,只需删除--disable=local-storage
即可。
MinIO directpv StorangeClass
DirectPV是用于直连存储的CSI驱动程序。从更简单的意义上讲,它是一个分布式持久卷管理器,而不是像SAN或NAS这样的存储系统。跨服务器发现、格式化、装载、调度和监视驱动器非常有用。由于Kubernetes hostPath和Local PV是静态配置的,并且功能有限,因此创建DirectPV就是为了解决这一限制。
以下是安装步骤
安装kubectl directpv插件
1
2wget https://github.com/minio/directpv/releases/latest/download/kubectl-directpv_linux_amd64.zip
sudo unzip kubectl-directpv_linux_amd64.zip -d /usr/local/bin/检查是否安装成功
1
kubectl directpv --version
如显示版本号说明安装成功了
初始化 directpv
1
kubectl directpv init
检查是否初始化成功
1
kubectl get all -n direct-csi-min-io
查看上述命令的回显,如果Pod Status全部显示Running说明初始化成功
格式化磁盘
以下命令可以格式化所有磁盘,当所有磁盘格式化完毕以后,就可以分配PV了
1
kubectl directpv drives format -a
如果想释放某个节点,即不让该节点的设备分配PV,可以执行
1
kubectl directpv drives release --nodes amd-server
查看节点磁盘状态
1
kubectl directpv drives ls
显示为Ready的节点,可以分配PV
创建 MinIO tenant集群
创建命名空间
需要将minio租户放在一个特定的命名空间中
1 | kubectl create ns minio |
创建 MinIO tenant集群
1 | kubectl minio tenant create minio \ |
参数 | 说明 |
---|---|
--servers |
minio 要跨 Kubernetes 集群部署的服务器数量。 |
--volumes |
集群中的卷数。通过将确定每个服务器的卷数通过。kubectl minio volumes``servers |
--capacity |
集群的总容量。确定每个体积的通过划分容量通过。kubectl minio capacity``volumes |
--storage-class |
StorageClass 创建每个 PVC 时要使用的 Kubernetes
。此示例使用 MinIO DirectCSI 存储类。 |
--namespace |
用于部署 MinIO 租户的 Kubernetes 命名空间。 |
注释:我们的集群有4个节点,--servers=4
;总共4个卷,即每个节点上各有一个卷--volumes 4
;总共容量是100G(由于奇偶校验等原因,最大可以存50G的数据)-capacity 100Gi
;
将集群暴露至外部
将对应的service连接至ingress即可。
s3 API
s3 API对应的是 minio Service
1 | apiVersion: networking.k8s.io/v1 |
MinIO 控制台
控制台对应的是 minio-console Service
1 | apiVersion: networking.k8s.io/v1 |
检查
登录控制台,查看s3存储桶信息
使用 MinIO Client 连接 minio 集群
Binary Download (GNU/Linux)
Platform | Architecture | URL |
---|---|---|
GNU/Linux | 64-bit Intel | https://dl.min.io/client/mc/release/linux-amd64/mc |
64-bit PPC | https://dl.min.io/client/mc/release/linux-ppc64le/mc |
Docker
Docker Stable
1 | docker pull minio/mc |
Docker Edge
1 | docker pull minio/mc:edge |
Note: Above examples run mc
against
MinIO play environment by
default. To run mc
against other S3 compatible servers,
start the container this way:
Copydocker run -it --entrypoint=/bin/sh minio/mc
then use the mc alias
command.
添加集群
账户名:root,密码:rootroot
1 | mc config host add k8s http://s3.deepsoft-tech.com root rootroot --api s3v4 |
查看集群的桶
1 | mc ls k8s |
备份文件到指定集群
1 | mc mirror -a textbook/ k8s/textbook |
-a
:属性同步备份-w
:阻塞备份,--watch