k8s部署minio分布式集群

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
  • 等待启动完毕
    k8s部署minio分布式集群_第1张图片

  • 日志也可以看出启动完毕了
    k8s部署minio分布式集群_第2张图片

  • 然后自己再写个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
  • 然后查到对外暴露的端口访问即可
    k8s部署minio分布式集群_第3张图片

  • 可以看到这是真的minio分布式集群,4个服务与4块硬盘都在线,这样就部署好了

你可能感兴趣的:(minio,k8s,kubernetes,容器,云原生,运维,linux)