minio集群部署(k8s內)

一、前言

minio的部署有幾種方式,分別是單節點單磁盤,單節點多磁盤,多節點多磁盤三種方式,本次部署使用多節點多磁盤的方式進行部署,minio集群多節點部署最低要求需要4個節點,集群擴容時也是要求擴容的節點為4的倍數才能更好的發揮minio的性能,使用minio集群可以更好的實現高可用,在minio集群還有n/2節點存活時minio集群依然可讀但不可寫,在minio集群還有n/2+1節點存活時minio集群依然可讀可寫

二、部署

創建minio 服務yaml文件的存儲目錄

mkdir /opt/minio? && cd /opt/minio

這里使用nfs作為minio的存儲,其實最好還是單獨掛載磁盤作為minio的存儲更好,用nfs作為minio的存儲,相當于存儲還是有單點的問題,單獨掛載磁盤可以在k8s的每個工作節點分配磁盤的存儲路徑再使用pv作為存儲塊,這樣就能避免存儲的單點問題,這里就是用nfs網絡存儲作為pv存儲塊的存儲

vi pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:name: minio-pv0
spec:storageClassName: minio-pv    #指定動態存儲卷的類型或類別,當pvc使用該類別時,可以自動綁定屬于該類別的pvcapacity:storage: 100Gi     #存儲大小accessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retain   #配置回收模式,配置為刪除pv不自動刪除存儲路徑中的數據nfs:      #使用nfs存儲path: /volume2/k8s-data/minio/minio-pv0    #nfs存儲路徑,這里使用4個不同的nfs路徑,模擬4個單獨的存儲磁盤server: 10.1.13.99
---
apiVersion: v1
kind: PersistentVolume
metadata:name: minio-pv1
spec:storageClassName: minio-pv   capacity:storage: 100GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:path: /volume2/k8s-data/minio/minio-pv1server: 10.1.13.99
---
apiVersion: v1
kind: PersistentVolume
metadata:name: minio-pv2
spec:storageClassName: minio-pv    capacity:storage: 100GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:path: /volume2/k8s-data/minio/minio-pv2server: 10.1.13.99
---
apiVersion: v1
kind: PersistentVolume
metadata:name: minio-pv3
spec:storageClassName: minio-pv  capacity:storage: 100GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:path: /volume2/k8s-data/minio/minio-pv3server: 10.1.13.99

使用setafulset的方式部署minio集群,因為每個minio是有狀態的應用,每個節點都存著數據,這里再說一下使用的是pvc模板的方式去綁定創建好的pv,也可以使用動態pv,使用pvc模板,然后去動態的自動創建pv綁定

vi setafulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:name: minionamespace: minio
spec:podManagementPolicy: "Parallel"  #并行啟動pod,不配置的話模式是按順序啟動pod,minio、nacos都需要配置并行啟動serviceName: minio  #指定Headless Service的名稱,這個服務的作用是為每個Pod創建一個獨立的DNS記錄,使其能夠通過該DNS記錄進行唯一標識和訪問replicas: 4selector:matchLabels:app: miniotemplate:metadata:labels:app: miniospec:affinity:       #親和性配置可忽略,我這里是為了分配到固定的節點上nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: appoperator: Invalues:- miniocontainers:- name: minioimage: minio/minioimagePullPolicy: IfNotPresentenv:        #配置變量,配置minio集群的賬戶密碼,密碼不能少于8位數- name: MINIO_ROOT_USERvalue: admin- name: MINIO_ROOT_PASSWORDvalue: 12345678args:    #定義minio集群配置,定義每個節點- server- "http://minio-{0...3}.minio.minio.svc.cluster.local/data"#  - "http://minio-{4...7}.minio.minio.svc.cluster.local/data"- --console-address- ":5000"ports:- name: tcp-9000containerPort: 9000protocol: TCP- name: http-5000containerPort: 5000protocol: TCPvolumeMounts:   #配置數據目錄- name: datamountPath: /datatolerations:       #配置污點,我這里是為了能在master節點上分配pod- key: node-role.kubernetes.io/control-planeoperator: Existseffect: NoSchedulevolumeClaimTemplates:   #使用定義pvc模板,去自動創建pvc- metadata:name: dataspec:accessModes: [ "ReadWriteOnce" ]storageClassName: "minio-pv"   #配置存儲類型的名稱,這里配置和上面pv配置的名稱一致,就會自動綁定關于此存儲類型名稱的pvresources:requests:storage: 100Gi

配置service,使得外部能訪問minio集群

vi service.yaml

kind: Service
apiVersion: v1
metadata:name: minionamespace: miniolabels:app: minio
spec:type: NodePortports:- name: http-9000protocol: TCPport: 9000nodePort: 30004targetPort: 9000- name: http-5000protocol: TCPport: 5000nodePort: 30002targetPort: 5000selector:app: minio

創建命名空間

kubectl create namespace minio

創建各yaml服務

kubectl apply -f pv.yaml

kubectl apply -f setafulset.yaml

kubectl apply -f service.yaml

查看各服務是否正常

kubectl get all -n minio

kubectl get pv?

?

kubectl get pvc -n minio

?查看minio web

http://10.1.60.119:30002

輸入配置setafulset時定義的用戶名和密碼

?

可以看到minio集群顯示4個節點均正常

?

?創建bucket上傳文件后進行節點損壞實驗

?

這里就不展示實驗的過程了, 直接講述實驗的結果,本minio集群一共四個節點,當存活節點只剩下n/2時即2個節點,minio的bucket只能讀取文件,不能上傳文件,當存活節點剩下n/2+1時,minio的bucket可以進行正常的讀取文件、上傳文件,可以自行做實驗嘗試

注意:minio集群部署后如果刪除了pvc和pv重新創建,會導致pod重新隨機綁定一個pvc和pv,pod隨機綁定pvc后minio集群會出現問題,會報錯掛載磁盤信息不正確,如果要解決的話,需要刪除該pv掛載路徑下原來的數據,所以一般不要動pvc和pv,因為setafulset的特性只刪除pod,pod會自動綁定原來的pvc,即使把整個setafulset刪除重新創建也是會綁定原來的pvc,就不會導致集群出現問題

minio集群節點對等擴容

minio集群的擴容需要提前創建好需要擴容的pv個數,再更改setafulset配置,關于minio的擴容需要是4的倍數,這樣才能更好的發揮minio集群的特性以便最好地利用 Erasure Code,并提供最佳的冗余和容錯性,這是因為 Erasure Code 將數據分為數據塊和冗余塊,并將它們分布在不同的節點上,確保了數據的可靠性和冗余,另外使用對等擴容后,minio的集群原來的節點和新加入的加點會分成兩部分,兩部分不互相同步數據,當數據上傳到bucket時,minio會根據算法去判斷該數據存在哪一部分節點上

vi pv.yaml

apiVersion: v1          #在之前的pv配置后面加上以下pv配置
kind: PersistentVolume
metadata:name: minio-pv4
spec:storageClassName: minio-pv    #定義了存儲類型capacity:storage: 100GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:path: /volume2/k8s-data/minio/minio-pv4server: 10.1.13.99
---
apiVersion: v1
kind: PersistentVolume
metadata:name: minio-pv5
spec:storageClassName: minio-pv    #定義了存儲類型capacity:storage: 100GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:path: /volume2/k8s-data/minio/minio-pv5server: 10.1.13.99
---
apiVersion: v1
kind: PersistentVolume
metadata:name: minio-pv6
spec:storageClassName: minio-pv    #定義了存儲類型capacity:storage: 100GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:path: /volume2/k8s-data/minio/minio-pv6server: 10.1.13.99
---
apiVersion: v1
kind: PersistentVolume
metadata:name: minio-pv7
spec:storageClassName: minio-pv    #定義了存儲類型capacity:storage: 100GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:path: /volume2/k8s-data/minio/minio-pv7server: 10.1.13.99

vi setafulset

apiVersion: apps/v1
kind: StatefulSet
metadata:name: minionamespace: minio
spec:podManagementPolicy: "Parallel"  #平行啟動pod,不配置的話模式是按順序啟動podserviceName: minioreplicas: 8          #更改pod數量selector:matchLabels:app: miniotemplate:metadata:labels:app: miniospec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: appoperator: Invalues:- miniocontainers:- name: minioimage: minio/minioimagePullPolicy: IfNotPresentenv:- name: MINIO_ROOT_USERvalue: admin- name: MINIO_ROOT_PASSWORDvalue: Zyh@022759args:- server- "http://minio-{0...3}.minio.minio.svc.cluster.local/data"- "http://minio-{4...7}.minio.minio.svc.cluster.local/data"  #增加minio集群配置- --console-address- ":5000"ports:- name: tcp-9000containerPort: 9000protocol: TCP- name: http-5000containerPort: 5000protocol: TCPvolumeMounts:- name: datamountPath: /datatolerations:- key: node-role.kubernetes.io/control-planeoperator: Existseffect: NoSchedulevolumeClaimTemplates:- metadata:name: dataspec:accessModes: [ "ReadWriteOnce" ]storageClassName: "minio-pv"resources:requests:storage: 100Gi

執行yaml文件加載配置

kubectl apply -f pv.yaml

kubectl apply -f setafulset.yaml

執行完成后minio集群就會擴容成8節點集群,關于數據會隨機分配到兩部分節點上存儲,可以自行做實驗驗證

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161505.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161505.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161505.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2、數倉理論概述與相關概念

1、問:數據倉庫 建設過程中 經常會遇到那些問題? 模型(邏輯)重復建設 數據不一致性 維度不一致:命名、維度屬性值、維度定義 指標不一致:命名、計算口徑 數據不規范(字段命名、表名、分層、主題命名規范) 2、OneData數據建設核心方…

python爬蟲HMAC加密案例:某企業信息查詢網站

聲明: 該文章為學習使用,嚴禁用于商業用途和非法用途,違者后果自負,由此產生的一切后果均與作者無關 一、找出需要加密的參數 js運行 atob(‘aHR0cHM6Ly93d3cucWNjLmNvbS93ZWIvc2VhcmNoP2tleT0lRTQlQjglODclRTglQkUlQkUlRTklOUI…

飛槳——總結PPOCRLabel中遇到的坑

操作系統:win10 python環境:python3.9 paddleocr項目版本:2.7 1.報錯:ModuleNotFoundError: No module named Polygon(已解決) 已解決所以沒有復現報錯內容 嘗試方法一:直接使用pip命令安裝&…

oracle rac 19.3安裝補丁19.19

使用opatchauto apply DIR來進行安裝 1.升級之前先備份一下GRID_HOME和ORACLE_HOME 2.現在新的opatch安裝不需要先停止集群和數據庫,在升級過程中,他會自動關閉和啟動集群 3.先將OPatch(P6880880)包拷貝到$GRID_HOME和$ORACLE_HOM…

【Web安全】sqlmap的使用筆記及示例

【Web安全】sqlmap的使用筆記 文章目錄 【Web安全】sqlmap的使用筆記1. 目標2. 脫庫2.1. 脫庫(補充) 3. 其他3.1. 其他(補充) 4. 繞過腳本tamper講解 1. 目標 操作作用必要示例-u指定URL,檢測注入點sqlmap -u http://…

ts實現合并數組對象中key相同的數據

背景 在平常的業務中,后端同學會返回以下類似的結構數據 // 后端返回的數據結構 [{ id: 1, product_id: 1, pid_name: "Asia", name: "HKG01" },{ id: 2, product_id: 1, pid_name: "Asia", name: "SH01" },{ id: 3, pro…

實現極坐標圖表QPolarChart的角度軸范圍是[0,360]時,0度在水平右側

目錄 參考角度軸范圍是[0,360]時,0度在水平右側.h.cpp 參考 Qt數據可視化(QPolarChart雷達圖) 默認QPolarChart的范圍是[0,360]時,0度在垂直上方 如官方例子QValueAxis角度軸范圍是[-100,100] 角度軸范圍是[0,360]時,0度在水平右側 原理&am…

用eclipse搭建簡單的JavaWeb環境

在 Eclipse 中搭建 JavaWeb 項目的環境涉及到配置服務器、創建項目、添加庫等步驟。以下是基于 Eclipse 的 JavaWeb 項目搭建的簡要步驟: 步驟: 1. 安裝 Eclipse IDE for Java EE Developers 確保你已經安裝了 Eclipse IDE for Java EE Developers 版…

MyBatis-Plus: 簡化你的MyBatis應用

MyBatis-Plus: 簡化你的MyBatis應用 在Java開發中,MyBatis一直是一個受歡迎的持久層框架,提供了靈活的數據訪問方式。然而,MyBatis的使用往往涉及許多樣板代碼,這在一定程度上增加了開發的復雜性。這里,MyBatis-Plus&…

刷題筆記(第八天)

1. 請補全JavaScript代碼,實現一個函數,要求如下: 根據輸入的數字范圍[start,end]和隨機數個數"n"生成隨機數生成的隨機數存儲到數組中,返回該數組返回的數組不能有相同元素 注意: 不需要考慮"n"…

【C++11】auto與decltype關鍵字使用詳解

系列文章目錄 C11新特性使用詳解-持續更新 文章目錄 系列文章目錄前言一、auto關鍵字1.根據變量的初始化表達式來推導變量的類型2.const與引用 二、decltype關鍵字1.推斷表達式的類型2.const與引用 三、總結 前言 auto和decltype是C11引入的倆個重要的新關鍵字,用…

簡單幾步,借助Aapose.Cells將 Excel XLS 轉換為PPT

數據呈現是商業和學術工作的一個重要方面。通常,您需要將數據從一種格式轉換為另一種格式,以創建信息豐富且具有視覺吸引力的演示文稿。當您需要在幻燈片上呈現工作表數據時,需要從 Excel XLS 轉換為 PowerPoint 演示文稿。在這篇博文中&…

原理Redis-QuickList

QuickList **問題1:**ZipList雖然節省內存,但申請內存必須是連續空間,如果內存占用較多,申請內存效率很低。怎么辦? 為了緩解這個問題,我們必須限制ZipList的長度和entry大小。 **問題2:**但是…

[網鼎杯 2018]Fakebook

[網鼎杯 2018]Fakebook 打開環境出現一個登錄注冊的頁面 在登錄和注冊中發現 了地址欄出現變化&#xff0c;掃一波看看 看看robots.txt和flag.php 訪問robots.txt看看 再訪問user.php.bak <?php class UserInfo { public $name ""; public …

Head、Neck、Backbone介紹

在深度學習中&#xff0c;通常將模型分為三個部分&#xff1a;backbone、neck 和 head。 Backbone&#xff1a;backbone 是模型的主要組成部分&#xff0c;通常是一個卷積神經網絡&#xff08;CNN&#xff09;或殘差神經網絡&#xff08;ResNet&#xff09;等。backbone 負責…

ON1 Photo RAW 2024 for Mac——專業照片編輯的終極利器

ON1 Photo RAW 2024 for Mac是一款專為Mac用戶打造的照片編輯器&#xff0c;以其強大的功能和易用的操作&#xff0c;讓你的照片編輯工作變得輕松愉快。 一、強大的RAW處理能力 ON1 Photo RAW 2024支持大量的RAW格式照片&#xff0c;能夠讓你在編輯過程中獲得更多的自由度和更…

練習九-利用狀態機實現比較復雜的接口設計

練習九-利用狀態機實現比較復雜的接口設計 1&#xff0c;任務目的&#xff1a;2&#xff0c;RTL代碼3&#xff0c;RTL原理框圖4&#xff0c;測試代碼5&#xff0c;波形輸出 1&#xff0c;任務目的&#xff1a; &#xff08;1&#xff09;學習運用狀態機控制的邏輯開關&#xff…

【C++11】=default與=delete關鍵字使用詳解

系列文章目錄 C11新特性使用詳解-持續更新 文章目錄 系列文章目錄一、default關鍵字1. 為什么要引入default關鍵字2. 注意事項3. 使用default關鍵字有什么好處4.實例代碼 二、delete關鍵字1. 為什么要引入delete關鍵字2. 注意事項3. 使用場景3.1刪除默認構造函數3.2 刪除拷貝構…

2023.11.22 -數據倉庫的概念和發展

目錄 https://blog.csdn.net/m0_49956154/article/details/134320307?spm1001.2014.3001.5501 1經典傳統數倉架構 2離線大數據數倉架構 3數據倉庫三層 數據運營層,源數據層&#xff08;ODS&#xff09;&#xff08;Operational Data Store&#xff09; 數據倉庫層&#…

開發上門送桶裝水小程序要考慮哪些業務場景

上門送水業務已經有很長一段時間了&#xff0c;但是最開始都是給用戶發名片、貼小廣告&#xff0c;然后客戶電話訂水&#xff0c;水站工作人員再上門去送&#xff0c;這種人工記單和派單效率并不高&#xff0c;并且電話溝通中也比較容易出現偏差&#xff0c;那么根據這個情況就…