k8s部署minio分布式集群
- 工作时项目有需求,需要在k8s中部署minio分布式集群,以前只部署过单机,minio的集群也没在容器中部署过,于是开始研究如何在k8s中部署minio分布式集群
- 网上查资料的时候,发现信息参差不齐,大部分都是单机部署,还有些误人子弟的假集群,要不就不是在k8s中部署的
- 我一开始是按以前部署minio集群的经验(非容器),来手写yaml部署minio集群,结果还是经验太浅,集群启动后,日志中一直报错,无法与其他minio集群通信,后来才知道需要使用headless服务来进行pod之间的通信,这个是后话
- 这里我来讲最为轻松简单的k8s中minio真分布式集群的部署方式
使用helm部署minio分布式集群
- Helm(又称Helm Charts或Helm Package Manager)是一个用于Kubernetes应用程序的包管理工具。它允许开发者、运维人员和DevOps团队轻松地创建、分享和部署Kubernetes应用程序的预定义软件包和配置。
- 反正就是方便进行k8s部署,省去大量编写yaml的过程,比较方便的工具
helm安装
- 下载地址
https://github.com/helm/helm/releases
- 根据服务器下载需要的版本,这里我是amd64的版本,下载下来后解压缩,把helm复制到/usr/bin中
- 然后命令行测试
helm version
version.BuildInfo{Version:"v3.12.3", GitCommit:"3a31588ad33fe3b89af5a2a54ee1d25bfe6eaa5e", GitTreeState:"clean", GoVersion:"go1.20.7"}
- 这样helm就安装完毕了
- 我这里选择的源是
https://charts.bitnami.com/bitnami
- 命令行输入
helm repo add my-repo https://charts.bitnami.com/bitnami
- 执行完后输入
helm repo list
- 可以看到刚才添加的repo源
- 正常我们部署minio都需要持久化部署,这样不会丢失文件,提前设置好pv与pvc,并进行绑定,然后把values.yaml文件下载下来,
helm fetch my-repo/minio --untar
这里面包含我们需要的values.yaml,进去修改参数,然后执行即可,参数含义地址https://github.com/bitnami/charts/tree/main/bitnami/minio#installing-the-chart
- 打开value.yaml 修改参数
- 账号密码修改
auth:
## @param auth.rootUser MinIO® root username
##
rootUser: minioadmin
## @param auth.rootPassword Password for MinIO® root user
##
rootPassword: "minioadmin"
mode: distributed
修改为distributed,意思是分布式启动replicaCount: 4
启动4个pod,一般建议4的倍数启动,这样会启动minio纠错模式- 服务端口与页面端口,这个看自己配
containerPorts:
api: 9000
console: 9001
- 这里配置启动,helm会自动配置生成pvc进行绑定,绑的本地文件夹
persistence:
## @param persistence.enabled Enable MinIO® data persistence using PVC. If false, use emptyDir
##
enabled: true
....
- 配置权限
volumePermissions:
## @param volumePermissions.enabled Enable init container that changes the owner and group of the persistent volume(s) mountpoint to `runAsUser:fsGroup`
##
enabled: true #这里配置为true
启动minio分布式集群
- 这里 -n是指定命名空间,看个人需求
helm install minio my-repo/minio -n wzh -f /home/k8s/helm/minio/values.yaml
-
等待启动完毕
-
日志也可以看出启动完毕了
-
然后自己再写个nodePort的service去访问页面
apiVersion: v1
kind: Service
metadata:
name: minio-nodeport0
namespace: wzh
spec:
selector:
statefulset.kubernetes.io/pod-name: minio-0
ports:
- protocol: TCP
port: 9001
targetPort: 9001
name: minio-console
- protocol: TCP
port: 9000
targetPort: 9000
name: minio-server
type: NodePort
-
然后查到对外暴露的端口访问即可
-
可以看到这是真的minio分布式集群,4个服务与4块硬盘都在线,这样就部署好了