在Kubernetes上部署高可用MinIO集群方式
一、MinIO分布式架構(gòu)核心概念
部署模式對(duì)比
單節(jié)點(diǎn)模式
適用場(chǎng)景:開(kāi)發(fā)測(cè)試環(huán)境
特點(diǎn):
- 僅部署單個(gè)節(jié)點(diǎn),資源消耗低,部署簡(jiǎn)單。
- 無(wú)數(shù)據(jù)冗余,硬件故障可能導(dǎo)致數(shù)據(jù)丟失,可靠性較差。
- 適合功能驗(yàn)證、性能測(cè)試等非生產(chǎn)場(chǎng)景。
分布式集群模式
適用場(chǎng)景:生產(chǎn)環(huán)境(推薦)
特點(diǎn):
- 數(shù)據(jù)分片存儲(chǔ),支持橫向擴(kuò)展,提升吞吐量和存儲(chǔ)容量。
- 采用糾刪碼(Erasure Coding)或多副本機(jī)制,確保數(shù)據(jù)高可用。
- 節(jié)點(diǎn)故障自動(dòng)恢復(fù),服務(wù)連續(xù)性高,適合關(guān)鍵業(yè)務(wù)場(chǎng)景。
集群關(guān)鍵組件
MinIO Server節(jié)點(diǎn):4節(jié)點(diǎn)起(推薦偶數(shù)節(jié)點(diǎn))
持久化存儲(chǔ):每個(gè)節(jié)點(diǎn)獨(dú)立PV
網(wǎng)關(guān)服務(wù):通過(guò)Service暴露統(tǒng)一入口
二、Kubernetes部署全流程
步驟1:創(chuàng)建命名空間
~]# kubectl create ns minio
步驟2:配置Secrets(訪問(wèn)密鑰)
~]# kubectl create secret generic minio-creds \ --namespace minio \ --from-literal=MINIO_ROOT_USER=admin \ --from-literal=MINIO_ROOT_PASSWORD=admin123
步驟3:創(chuàng)建 Service
LoadBalancer 類型
~]# vi minio-service.yaml
kind: Service
apiVersion: v1
metadata:
name: minio
namespace: minio
spec:
selector:
app: minio
type: LoadBalancer
ports:
- name: minio
port: 9000
- name: console
port: 9001
步驟4:部署StatefulSet(核心)
~]# vi minio-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: minio
namespace: minio
spec:
serviceName: "minio"
replicas: 4
selector:
matchLabels:
app: minio
template:
metadata:
labels:
app: minio
directpv.min.io/organization: minio
directpv.min.io/app: minio-example
spec:
containers:
- name: minio
image: quay.io/minio/minio:RELEASE.2025-04-08T15-41-24Z
imagePullPolicy: Always
env:
- name: MINIO_ROOT_USER
valueFrom:
secretKeyRef:
name: minio-creds
key: MINIO_ROOT_USER
- name: MINIO_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: minio-creds
key: MINIO_ROOT_PASSWORD
- name: MINIO_CONSOLE_ADDRESS
value: ":9001"
volumeMounts:
- name: minio-data
mountPath: /data
args:
- "server"
- "http://minio-{0...3}.minio.default.svc.cluster.local:9000/data"
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- minio
topologyKey: "kubernetes.io/hostname"
volumeClaimTemplates: # This is the specification in which you reference the StorageClass
- metadata:
name: minio-data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi
storageClassName: standard
步驟5:暴露外部訪問(wèn)(Ingress)
~]# vi minio-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minio-ingress
namespace: minio
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "0"
spec:
rules:
- host: minio.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: minio
port:
number: 9000
三、驗(yàn)證集群狀態(tài)
- 檢查Pod運(yùn)行
~]# kubectl get po -n minio NAME READY STATUS RESTARTS AGE minio-0 1/1 Running 0 55s minio-1 1/1 Running 0 45s minio-2 1/1 Running 0 35s minio-3 1/1 Running 0 25s ~]# kubectl get pvc -n minio NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE minio-data-minio-0 Bound pvc-881730c2-b10c-4285-a1d6-9024482e23ac 10Gi RWO standard <unset> 92s minio-data-minio-1 Bound pvc-f467c8e6-576f-49d1-a1e7-2c4db046b6e1 10Gi RWO standard <unset> 82s minio-data-minio-2 Bound pvc-a83706fc-f9c5-433e-ba6b-0d0b27382676 10Gi RWO standard <unset> 72s minio-data-minio-3 Bound pvc-65415c6d-08ae-480e-aff7-b9a22f3f4b3b 10Gi RWO standard <unset> 62s ~]# kubectl get pv -n minio NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pvc-65415c6d-08ae-480e-aff7-b9a22f3f4b3b 10Gi RWO Delete Bound minio/minio-data-minio-3 standard <unset> 66s pvc-881730c2-b10c-4285-a1d6-9024482e23ac 10Gi RWO Delete Bound minio/minio-data-minio-0 standard <unset> 96s pvc-a83706fc-f9c5-433e-ba6b-0d0b27382676 10Gi RWO Delete Bound minio/minio-data-minio-2 standard <unset> 75s pvc-f467c8e6-576f-49d1-a1e7-2c4db046b6e1 10Gi RWO Delete Bound minio/minio-data-minio-1 standard <unset> 85s ~]# kubectl get svc -n minio NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE minio LoadBalancer 10.105.136.9 172.19.0.200 9000:30876/TCP,9001:31775/TCP 2m33s
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
云原生技術(shù)kubernetes調(diào)度單位pod的使用詳解
這篇文章主要介紹了云原生技術(shù)kubernetes調(diào)度單位pod的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用K8S,感興趣的朋友可以了解下2021-03-03
Kubernetes Gateway API TLS路由使用及說(shuō)明
TLSRoute是GatewayAPI中的一個(gè)資源類型,用于處理TLS流量,可以根據(jù)主機(jī)名等TLS元數(shù)據(jù)將流量定向到不同的Kubernetes后端服務(wù),通過(guò)配置Gateway和TLSRoute,可以實(shí)現(xiàn)TLS流量的透?jìng)骱徒K止處理,滿足不同的安全和管理需求2026-03-03
IoT?邊緣集群Kubernetes?Events告警通知進(jìn)一步配置詳解
這篇文章主要為大家介紹了IoT?邊緣集群Kubernetes?Events告警通知進(jìn)一步配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Rainbond的ServiceMesh架構(gòu)組件端口沖突處理解決
這篇文章主要大家介紹了Rainbond?ServiceMesh架構(gòu)組件端口沖突處理方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
Kubernetes?權(quán)限管理認(rèn)證鑒權(quán)詳解
這篇文章主要為大家介紹了Kubernetes?權(quán)限管理認(rèn)證鑒權(quán)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
IoT邊緣集群Kubernetes?Events告警通知實(shí)現(xiàn)示例
這篇文章主要為大家介紹了IoT邊緣集群Kubernetes?Events告警通知實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
詳解Rainbond云原生平臺(tái)簡(jiǎn)化Kubernetes業(yè)務(wù)問(wèn)題排查
這篇文章主要介紹了詳解Rainbond云原生平臺(tái)簡(jiǎn)化Kubernetes業(yè)務(wù)問(wèn)題排查,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
Kubernetes環(huán)境部署Redis集群過(guò)程
在Kubernetes環(huán)境中部署Redis集群,推薦使用Redis7.0及以上版本;需配置cluster-announce-ip確保節(jié)點(diǎn)間穩(wěn)定通信;使用StatefulSet管理節(jié)點(diǎn)提供穩(wěn)定網(wǎng)絡(luò)標(biāo)識(shí)和持久化存儲(chǔ);配置l生檢查確保節(jié)點(diǎn)可用性2026-06-06
MinIO分布式文件存儲(chǔ)(從入門(mén)到飛翔)
MinIO是一款高性能的分布式對(duì)象存儲(chǔ)系統(tǒng),兼容Amazon S3協(xié)議,具有輕量級(jí)、易部署、高可用和可擴(kuò)展性等優(yōu)勢(shì),它通過(guò)糾刪碼技術(shù)實(shí)現(xiàn)數(shù)據(jù)冗余與高容錯(cuò)性,適用于私有云存儲(chǔ)、大數(shù)據(jù)分析和靜態(tài)資源托管等場(chǎng)景,本文介紹MinIO分布式文件存儲(chǔ)的相關(guān)知識(shí),感興趣的朋友一起看看吧2025-03-03

