当前位置: 首页 > news >正文

使用helm chart在Kubernetes部署Minio-适用于生产环境的部署方案

使用helm chart在Kubernetes部署Minio-适用于生产环境的部署方案

Kubernetes部署部署Minio支持YAML和Helm Chart两种方式。本文将以Helm Chart为例,介绍如何在Kubernetes上部署Minio。

1. 前提条件

  • 默认standalone模式下,需要开启Beta API的Kubernetes 1.4+。

  • distributed 模式,需要开启Beta API的Kubernetes 1.5+。

  • 底层支持PV provisioner,准备可用的storage class。

  • K8s集群已经安装Helm。

2. 使用Helm Charm部署Minio

通过Helm Chart部署,支持单机(standalone)和分布式(distributed)模式的Minio。生产环境中建议使用分布式模式,以提高Minio的可用性和容错能力。

2.1 准备Minio Helm Chart

Minio Helm Chart位于bitnami/charts仓库中。

  1. 添加Minio Helm Chart仓库
# 添加仓库
]# helm repo add bitnami https://charts.bitnami.com/bitnami# 更新仓库
]# helm repo update
  1. 拉取Minio Helm Chart
# 查询Minio Helm Chart可用的版本
]# helm search repo bitnami/minio
NAME            CHART VERSION   APP VERSION     DESCRIPTION
bitnami/minio   14.7.7          2024.9.9        MinIO(R) is an object storage server, compatibl...# 安装Minio Helm Chart
]# mkdir -p /root/minio && cd /root/minio
]# helm pull bitnami/minio --untar
  1. 配置Minio Helm Chart

Minio Helm Chart提供了许多可配置的参数。 可以修改values.yaml文件来配置Minio,也可以通过--set key=value[,key=value]helm install命令设置参数值。

常用配置参数:

  • image.registry: Minio Docker镜像源。
  • image.repository:Minio Docker镜像仓库名。
  • image.tag:Minio Docker镜像版本。
  • image.pullPolicy:镜像拉取策略。
  • mode:Minio模式,可选standalonedistributed
  • auth.rootUser:Minio root用户。
  • auth.rootPassword:Minio root密码。
  • persistence.enabled:是否开启持久化存储。
  • persistence.storageClass:存储类。默认为空,表示使用默认的storage class。
  • persistence.size:存储容量。默认8Gi,根据实际情况调整。
  • resourcesPreset: “micro”,用于设置CPU和内存资源限制。可选参数:none, nano, micro, small, medium, large, xlarge, 2xlarge。
  • resouces: CPU和内存资源限制。上面参数设置后,此处无需设置。

2.2 部署standdalone模式的Minio

helm chart默认部署standalone模式的Minio,使用deployment方式部署。

# 由openebs提供默认存储类
]# kubectl get sc
NAME                         PROVISIONER               RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
openebs-hostpath (default)   openebs.io/local          Delete          WaitForFirstConsumer   false                  77d# 使用默认参数部署Minio
]# cd minio
]# kubectl create namespace minio-oss
]# helm -n minio-oss install minio . .....To get your credentials run:export ROOT_USER=$(kubectl get secret --namespace minio-oss minio -o jsonpath="{.data.root-user}" | base64 -d)export ROOT_PASSWORD=$(kubectl get secret --namespace minio-oss minio -o jsonpath="{.data.root-password}" | base64 -d)To connect to your MinIO® server using a client:- Run a MinIO® Client pod and append the desired command (e.g. 'admin info'):kubectl run --namespace minio-oss minio-client \--rm --tty -i --restart='Never' \--env MINIO_SERVER_ROOT_USER=$ROOT_USER \--env MINIO_SERVER_ROOT_PASSWORD=$ROOT_PASSWORD \--env MINIO_SERVER_HOST=minio \--image docker.io/bitnami/minio-client:2024.9.9-debian-12-r0 -- admin info minio
......# 根据部署后的提示,使用如下命令获取访问凭证
]# export ROOT_USER=$(kubectl get secret --namespace minio-oss minio -o jsonpath="{.data.root-user}" | base64 -d)
]# export ROOT_PASSWORD=$(kubectl get secret --namespace minio-oss minio -o jsonpath="{.data.root-password}" | base64 -d)
Access Key: admin
]# echo "Access Key: $ROOT_USER"
]# echo "Secret Key: $ROOT_PASSWORD"
Secret Key: ALmRHyIQr1

修改minio service类型为NodePort,以便外部访问。

]# kubectl patch service minio -n minio-oss -p '{"spec": {"type": "NodePort"}}']# # kubectl get svc -n minio-oss
NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                         AGE
minio   NodePort   10.96.114.179   <none>        9000:30118/TCP,9001:30954/TCP   7m31s

通过minio-console的NodePort访问Minio服务,上述端口为30954。用户名为:admin,密码为:ALmRHyIQr1

2.3 部署distributed模式的Minio

如需部署distributed模式的Minio,请将mode字段设置为distributed,使用statefulset方式部署。同时置其他相关参数:

auth:rootUser: admin    # 设置root用户,默认为adminrootPassword: ""    # 设置root密码,默认随机生成,可以后续获取。也可以这里设置密码。
...
mode: distributed
...
# service.type设置为LoadBalancer,ingress.enabled设置为true,apiIngress.enabled设置为true。如果没有ingress,可以设置service.type为NodePort。
service:type: LoadBalancer    # 这里选择LoadBalancer,LB由metallb提供,需要提前安装metallb。也可以使用NodePort。
...
...
# 设置持久化存储
persistence:enabled: truestorageClass: "openebs-hostpath"mountPath: /bitnami/minio/dataaccessModes:- ReadWriteOncesize: 8Gi    # 根据实际情况调整
...

使用如下命令部署Minio:

]# kubectl create namespace minio-oss
]# helm -n minio-oss install minio . To get your credentials run:export ROOT_USER=$(kubectl get secret --namespace minio-oss minio -o jsonpath="{.data.root-user}" | base64 -d)        # 获取root用户export ROOT_PASSWORD=$(kubectl get secret --namespace minio-oss minio -o jsonpath="{.data.root-password}" | base64 -d)    # 获取root用户密码To connect to your MinIO&reg; server using a client:- Run a MinIO&reg; Client pod and append the desired command (e.g. 'admin info'):kubectl run --namespace minio-oss minio-client \--rm --tty -i --restart='Never' \--env MINIO_SERVER_ROOT_USER=$ROOT_USER \--env MINIO_SERVER_ROOT_PASSWORD=$ROOT_PASSWORD \--env MINIO_SERVER_HOST=minio \--image docker.io/bitnami/minio-client:2024.9.9-debian-12-r0 -- admin info minioTo access the MinIO&reg; web UI:- Get the MinIO&reg; URL:NOTE: It may take a few minutes for the LoadBalancer IP to be available.Watch the status with: 'kubectl get svc --namespace minio-oss -w minio'export SERVICE_IP=$(kubectl get svc --namespace minio-oss minio --template "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}")    # 获取minio服务IPecho "MinIO&reg; web URL: http://$SERVICE_IP:9001/minio"    # wb访问minio console

检查部署的资源:

]# kubectl get all -n minio-oss
NAME          READY   STATUS    RESTARTS   AGE
pod/minio-0   1/1     Running   0          19s
pod/minio-1   1/1     Running   0          19s
pod/minio-2   1/1     Running   0          19s
pod/minio-3   1/1     Running   0          19sNAME                     TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)                         AGE
service/minio            LoadBalancer   10.97.29.192   10.210.10.241   9000:32721/TCP,9001:30178/TCP   19s
service/minio-headless   ClusterIP      None           <none>          9000/TCP,9001/TCP               19sNAME                     READY   AGE
statefulset.apps/minio   4/4     19s

上述命令部署了个带有4个节点的分布式Minio服务器,通过http://$SERVICE_IP:9001/minio即可访问minio console。

对应本文环境为:http://10.210.10.241:9000/minio,用户名为:admin,密码为:e1Vgg0eZ65

WARN:

Detected Linux kernel version older than 4.0 release, there are some known potential performance problems with this kernel version. MinIO recommends a minimum of 4.x linux kernel version for best performance.(警告:检测到Linux内核版本低于4.0版本,该版本存在一些已知的性能问题。MinIO官方建议部署minio时,使用4.x以上linux内核版本,否则会存在性能问题。)

3. 使用Helm更新Minio版本

修改values.yaml文件中的参数,然后使用如下命令更新Minio版本:

helm -n minio-oss upgrade minio .

4. 卸载Chart

如果需要卸载Minio Helm Chart,使用下面的命令删除它:

# 根据命名空间和release name卸载chart
helm -n minio-oss uninstall minio# 清理pvc
kubectl delete pvc data-minio-{0..3}  -n minio-oss

5. 参考

  • Minio Helm Chart

http://www.mrgr.cn/news/28842.html

相关文章:

  • yolo标签自动标注(使用python和yolo方法)
  • leetcode268 丢失的数字
  • 数据结构Python版
  • gitlab角色、权限
  • C语言与OpenGL实现3D旋转爱心模型及动画效果
  • Scala图书馆创建图书信息
  • 技术上,如何复现 o1?
  • Marketo默认文件夹作用
  • 复选按钮QCheckBox
  • FastAPI动态路由设计:使用APIRouter处理复杂回调函数
  • 使用Faiss进行K-Means聚类
  • 【Linux】Shell编程入门
  • 面试真题-TCP的三次握手
  • 鸿蒙开发笔记_电商严选02_登录页面跳转到我的页面、并传值
  • 【C++】——继承详解
  • GPU加速生物信息分析的尝试
  • react-native和原生android的交互
  • ThreadX源码:Cortex-A7的tx_thread_irq_nesting_end(嵌套中断结束动作).s汇编代码分析
  • 算法竞赛命题数据生成方法
  • 硬件工程师笔试面试学习汇总——器件篇目录
  • iOS 18 新功能:控制中心大變身!控制項目自由選配
  • 电路设计学习(一)
  • 【AcWing】前缀和与差分(一维 + 二维)
  • 企业级即时通讯平台有哪些?探究适合企业使用的即时通讯工具
  • 72、结合无人机进行rk3588oak-lite跟踪目标物体进行识别、跟踪、保持距离
  • 虚拟机centos_7 配置教程(镜像源、配置centos、静态ip地址、Finalshell远程操控使用)